Конференция "Прочее" » Парсинг текста и выделение реквизитов.
 
  • Anatoly Podgoretsky © (21.10.08 19:36) [20]
    > Сергей М.  (21.10.2008 19:28:16)  [16]

    Методом экспроприации
  • Сергей М. © (21.10.08 19:37) [21]
    Сайт <> Файл

    Так откуда взялся файл ?
  • Sergey Masloff (21.10.08 19:39) [22]
    Eraser ©   (21.10.08 16:39) [4]
    >в том виде, в котором информация предоставляется сейчас (как попало) >ничего распарсить не получится со 100% результатом качества, все равно >потом перепроверять человеку прийдется.
    Неправда.  Именно на такую информацию - легко написать парсер который будет 90% правильно разбирать и оставшиеся 10% представлять в виде удобном для анализа. У меня такую работу студентка-дипломница делала без проблем.
     Хинт - разбивается на лексемы те на группы построчно.
     email-ы и телефоны парсятся однозначно и сразу - тут не о чем и говорить. Все адреса при парсинге элементарно проверяются пор справочнику - тоже исключаются неоднозначности. На типовые фразы составляется словарь.
     Это начало дальше немного сложнее но проблем нет. Потом оператор проверяет только неразобраное
  • Kolan © (21.10.08 19:47) [23]
    > Так откуда взялся файл ?

    Если данные на сайте выделить и скопировать в буфер, то их затем можно будет вставить в обычный текстовый файл. Файлы эти будут похожи на те, которые я привел в вопросе.

    Анатолий, заголовки полей, как я понял, в моём случае такие:
    Исходные данные | Название фирмы | Телефон | Адрес | ...



    А что будет исходными данными, можно пример?
  • Сергей М. © (21.10.08 19:51) [24]

    > Kolan ©   (21.10.08 19:47) [23]


    Ну да ладно.

    Вставил и вставил.

    А ты, мил человек, с технологиями и механизмами регулярных выражений хоть в коей-то мере знаком ?
  • Kolan © (21.10.08 19:52) [25]
    Sergey Masloff, а как рабить на блоки? Я считаю, что это самое сложное.

    Как понять, что тут:
    Кварта-Трейд Подробная информация об организации
    Город:  Аксайский р-н, Аксай
    Адрес:  Промышленная ул. 5
    Телефон: (86350) 49396
    (86350) 48985
    (86350) 56292 — факс
    E-mail: Отправить e-mail
    Транс-Абсолют Экспорт-Импорт, дилер автомобилей SCANIA Подробная информация об организации
    Город:  Аксайский р-н, Аксай
    Адрес:  Промышленная ул. 2
    Телефон: (86350) 55155
    (863) 2919333 — г.Ростов-на-Дону
    (863) 2919222 — г.Ростов-на-Дону
    (863) 2919111 — г.Ростов-на-Дону
    (863) 2999000 — диспетчерская
    E-mail: Отправить e-mail


    два блока реквизитов?
  • Kolan © (21.10.08 19:55) [26]
    Сергей, в вопросе я пишу: «Некоторые данные (телефон, почта) можно легко найти с помощью рег. выражений...», видимо знаком :).
  • Сергей М. © (21.10.08 20:01) [27]

    > Kolan ©   (21.10.08 19:55) [26]


    А все остальное, мил человек, не регулярное.. и ищется с пом. того самого "ИИ", который тебе предстоит изобрести)
  • Kolan © (21.10.08 20:05) [28]
    В принципе, Сергей Маслофф подсказал куда копать — лексемы. Осталось только отделить блоки данных, может таки в два прохода?
  • Eraser © (21.10.08 20:06) [29]
    > [22] Sergey Masloff   (21.10.08 19:39)

    и, тем не менее, без проверки человеком не обойтись.
    довольно просто написать парсер, который сделет пусть 70-80% работы, но очень сложно написать парсер, который сделает 90-95% работы. цифры грубо привел, но думаю мысль понятна. чем отвлекать на несколько дней квалифицированного программиста, проще сделать базовый скрипт, а потом поручить работу девочке. конечно от объемов данных зависит.. если записей миллионы (даже сотни тысяч) и более, тогда я не прав, но смоневаюсь, что у автора такие объемы данных.
  • Kolan © (21.10.08 20:11) [30]
    Eraser, смысл отвлекать программиста есть. Программист, то есть я, должен показать на новой работе, что он умеет программировать :) Пусть 70% сейчас я не понимаю как и 1% найти. Ну разложу я на лексемы, ну понахожу телефоны и все «простое», и что из этого? Что делать с этим добром? Как вычленить группы реквизитов? — Хз...
  • Сергей М. © (21.10.08 20:15) [31]

    > может таки в два прохода?


    Да хоть в двести !

    Во сколько проходов, мил человек, ты определишь судьбу того, в "файле" которого так или иначе фигурируют "казнить" и "помиловать" ?
  • Eraser © (21.10.08 20:17) [32]
    > [30] Kolan ©   (21.10.08 20:11)

    из тех примеров, что ты привел нифига не понятно, как разделять на группы.
    надо просмотреть все записи и составить список признаков начала/окончания блока. потом в нужной последовательности пытаться разбивать текст по этим признакам.
  • oxffff © (21.10.08 20:21) [33]

    > Kolan ©  


    Блок данных почти во всех случаях имеет адрес. Его можно использовать в качестве разделителей блоков(информация о конторе). + нужно еще сделать правки вверх или вниз. Например вверх на одну строку, поскольку в большинстве случаев

    Пусть он будет в виде.
    a) Адрес: ....
    б)  ....

    Таким образом ты делаешь нетерминалом - реквизит. И пытаешься свернуть правую часть раньше левой части. То есть как только в потоке встречается поток представляющий новый нетерминал. Начинаешь его анализ. И в случае успеха, останавливаешь предыдущий(то есть реквизит останавливается на начале нового), в случае провала продолжаешь старый реквизит.

    То есть действуешь по принципу почти LR анализатора.
    Пытаешься свернуть, то что справа.
    Но действуешь явной без грамматики(оно задана частично).

    Например

    Нашли нетерминал

    1. Город: (терминал - это удачно, но не всегда так будет)
    2.  Аксайский
    3. р-н,
    4. Аксай

    О!!!! новый нетерминал

    5. Адрес:  
    6. Промышленная ул.
    7. Телефон: (86350) 49396

    С телефоном сложнее придется придумать несколько правил на него. И рассматривать самое длинное правило в грамматике. Аля прогностический оператор.

    P.S. Я к сожалению не эксперт. Читаю в данный момент сам.
    Пока только написал ДКА построитель для рег. выражений.
    Уверен Ахо бы тебе помог.
  • Сергей М. © (21.10.08 20:26) [34]

    > oxffff ©   (21.10.08 20:21) [33]


    Уж сколько раз твердили миру - бардак не поддается автоматизации его разгребания)
  • oxffff © (21.10.08 20:30) [35]

    > Сергей М. ©   (21.10.08 20:26) [34]


    Как бы нам не хотелось, хотим мы того или нет, но мы всегда вынуждены бороться со сложностями.
    Слава богу что мир не идеален, для нас всегда найдется работа. ;)
  • Сергей М. © (21.10.08 21:12) [36]

    > oxffff ©   (21.10.08 20:30) [35]
    > > Сергей М. ©   (21.10.08 20:26) [34]
    > мы ..вынуждены бороться со сложностями.


    Кроме тебя вряд ли кого-то понуждают)

    Давай уже не трынди)
  • Sergey Masloff (21.10.08 21:59) [37]
    Сергей М. ©   (21.10.08 20:26) [34]
    >Уж сколько раз твердили миру - бардак не поддается автоматизации его >разгребания)
    Ну так мир не в нашей власти (скорее наоборот) поэтому тверди не тверди а разгребать приходится ;-)
  • Kolan © (21.10.08 22:01) [38]
    Sergey Masloff, нужен еще хинт. Положим, что блоки чётко разделены. Вот я разбил строки на лексемы для двух примеров.
    Кварта-Трейд
    Подробная
    информация
    об
    организации

    Город:  
    Аксайский
    р-н,
    Аксай

    Адрес:  
    Промышленная
    ул.
    5

    Телефон:
    (86350)
    49396

    (86350)
    48985

    (86350)
    56292

    факс

    E-mail:
    Отправить
    e-mail



    ПихтинАвто
    344090,
    Ростов-на-Дону,
    Малиновского
    ул.,
    13а/1
    (Автосервис)Общий:
    (863)
    200-77-88
    ;Эвакуатор:
    (863...
    ;Кузовной
    цех:
    (863...
    ;E-mail:
    www.pihtinauto@aaanet.ru

    Ростов-на-Дону,
    Авторынок
    Фортуна,
    павильон
    46Общий:
    (863...
    ;

    Ростов-на-Дону,
    Авторынок
    Алмаз,
    павильон
    129Общий:
    (863...
    ;

    Ростов-на-Дону,
    Малиновского
    ул.,
    13в
    (Автозапчасти)Общий:
    (863...
    ;

    Автозапчасти
    на
    европейские,
    японские
    и
    корейские
    автомобили,
    автосервис,
    электронная
    измерительная
    система
    параметров
    кузова,
    чип-тюнинг,
    автострахование,
    независимая
    оценка
    ущерба

    Web-сайт:
    www.pihtinauto.rostov.ru



    Теперь что? Иду полексемно? И что делаю?
  • Sergey Masloff (21.10.08 22:13) [39]
    Kolan ©  
    Если в лоб (на тех данных что приведены) я бы попробовал выделять адреса (это можно делать с достаточно высокой степенью достоверности). Причем в адрес объединять возможно несколько подряд идущих строк перед которыми есть строка точно с не-адресом. Написать анализатор который такие блоки выделяет. Потом взять достаточно большой массив исходных данных и порезать его на куски беря например на одну строку "выше" начала адреса. И статичтически посмотреть сколько будет ошибок сразу. Ну и дальше по обстановке
 
Конференция "Прочее" » Парсинг текста и выделение реквизитов.
Есть новые Нет новых   [134444   +24][b:0][p:0.097]