Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2008.12.21;
Скачать: [xml.tar.bz2];

Вниз

Парсинг текста и выделение реквизитов.   Найти похожие ветки 

 
Sergey Masloff   (2008-10-21 22:19) [40]

Если видишь что адрес это хороший маркер то бъешь на блоки и на каждый блок натравливаешь свой анализатор который:
- вытаскивает наименование (считает что это то что над адресов например)
- вытаскивает адреса пытаясь их нормализовать (с проверкой по справочнику)
- вытаскивает телефоны
- весь оставшийся "мусор" ссыпает в общий блок (который потом можно отдельно проанализировать используя уже словарь предметной области)


 
Kolan ©   (2008-10-21 22:22) [41]

Угу, это предложил oxffff. Это способ разрезать на блоки. А дальше? Как анализировать сами данные, на лексемы разбивать? И что? Анализировать каждую лексему?


 
Kolan ©   (2008-10-21 22:24) [42]

41 писал не видя 40.

А первоначальную разбивку по адресу делать не по словарю, а по признакам ул. пр., да?


 
Anatoly Podgoretsky ©   (2008-10-21 22:26) [43]

> Kolan  (21.10.2008 19:47:23)  [23]

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


 
Anatoly Podgoretsky ©   (2008-10-21 22:29) [44]

> Kolan  (21.10.2008 20:11:30)  [30]

Тут надо плясать от конечной базы, явно видно множественные аттрибуты, которые надо помещать в отдельные таблицы, например телефоны, для которых тоже отдельный парсинг.


 
oxffff ©   (2008-10-21 22:38) [45]


> Kolan ©   (21.10.08 22:22) [41]


Я не спец. по составлению грамматик, но как то так. :)

Например

Улица.

NT_Address -> NT_ANY_STRING  "ул."  NT_ANY_STRING
NT_Address -> "Адрес:" NT_ANY_STRING  "ул."  NT_ANY_STRING
NT_Address -> "Адрес" NT_ANY_STRING  "ул."  NT_ANY_STRING
NT_Address -> NT_Address ANYCHAR | NO_CHAR
ANYCHAR_SEQ -> ANY_NUM|a|b|c|
ANY_NUM -> 1|2|3|
ANY_NUM_SEQ -> ANY_NUM_SEQ ANY_NUM | ANY_NUM
NO_CHAR -> ""

Телефон.

NT_TEL -> (ANY_NUM_SEQ)  ANY_NUM_SEQ-ANY_NUM_SEQ
NT_TEL -> ANY_NUM_SEQ-ANY_NUM_SEQ (ANYCHAR_SEQ)
NT_TEL -> ANY_NUM_SEQ

ORG_ITEM-> NT_TEL | NT_Address | ....
ORG_ITEMs-> ORG_ITEMs ORG_ITEM | NO_CHAR
ORG -> ORG_ITEMs.

:))))


 
oxffff ©   (2008-10-21 22:40) [46]


> oxffff ©   (21.10.08 22:38) [45]


Разбор введешь в стиле LR анализа.


 
oxffff ©   (2008-10-21 22:41) [47]


> Я не спец. по составлению грамматик


НО очень им хочу быть. :))))))))))))))))))))))))))))))))))))))))))))))))))))))


 
Sergey Masloff   (2008-10-21 22:42) [48]

Kolan ©   (21.10.08 22:24) [42]
>А первоначальную разбивку по адресу делать не по словарю, а по >признакам ул. пр., да?
Надо пробовать насколько это корректно.Без реальных объемов не так просто угадать. Упрощает ситуацию то что времени на попробовать много не надо -за один день реально 2-3 варианта анализаторов написать


 
Наиль ©   (2008-10-21 22:42) [49]

Kolan, ты же с сайтов собираешься обрабатывать информацию.
В пределах сайта для разбора достаточно использовать одно единственое правило.
Так как все страницы сайта делаются по одному шаблону.
Парсить нужно не текст с HTML страницы, а саму HTML-страницу.
Например в [0] Подробная информация об организации очевидно ссылка и её можно отсеивать по тегу <A>. Т.е. тэги являются разделителями.
Твоя задача создать программу которая берёт одну страницу с сайта, показывает её пользователю.
Пользователь поочерёдно выделяет фрагменты текста и сообщает программе какой фрагмент чем является: адресом, названием или чем другим. Программа запоминает между какими тэгами находятся указаные фрагменты и начинает потрошить сайт. Пока одна часть программы потрошит сайт, вторая с помощью пользователя проходит обучение по потрошению следующего сайта и т.д. Так за день можно выпотрошить сотню сайтов.


 
Kolan ©   (2008-10-21 22:43) [50]

oxffff, благодарю. Кстати, мне кажется ты не знаешь что для Delphi есть уже реализованый модуль для рег. выражений, называется TRegExp. Это я к тому, что вдруг ДКА ты зря делаешь :).
---
Ладно, для начала кое-что есть. Благодарю за ответы.


 
oxffff ©   (2008-10-21 22:47) [51]


> Kolan ©   (21.10.08 22:43) [50]


TRegExp?

Уверен, что я не первый и не последний это делаю. :)
Я всегда стараюсь изучить подход досконально. Поэтому читаю не нового
дракона, а старого в части синтаксического разбора.


 
Kolan ©   (2008-10-21 22:51) [52]

> Наиль

Идея неплоха, но теги-то обычно все одинаковые, это же не xml.

Вот для примера №1
<table cellspacing="0" cellpadding="0"  border="0" class="info">

  <tr><td colspan="2">Одежда, магазин №001 </td></tr>

  <tr><td class="pole" width="20%"><noindex>Город:</noindex></td>
  <td width="80%">Сальск</td></tr>

  <tr><td class="pole"><noindex>Адрес:</noindex></td>
  <td>Ленина ул. 17 </td></tr>

</table>


И что тут выбирать. А ведь надо для любых сайтов...


 
Kolan ©   (2008-10-21 22:53) [53]

> TRegExp?

Извеняюсь, ошибся чуть-чуть.

{
    TRegExpr class library
    Delphi Regular Expressions

Copyright (c) 1999-2004 Andrey V. Sorokin, St.Petersburg, Russia

You may use this software in any kind of development,
including comercial, redistribute, and modify it freely,
under the following restrictions :
1. This software is provided as it is, without any kind of
   warranty given. Use it at Your own risk.The author is not
   responsible for any consequences of use of this software.
2. The origin of this software may not be mispresented, You
   must not claim that You wrote the original software. If
   You use this software in any kind of product, it would be
   appreciated that there in a information box, or in the
   documentation would be an acknowledgement like

    Partial Copyright (c) 2004 Andrey V. Sorokin
                               http://RegExpStudio.com
                               mailto:anso@mail.ru

3. You may not have any income from distributing this source
   (or altered version of it) to other developers. When You
   use this product in a comercial package, the source may
   not be charged seperatly.
4. Altered versions must be plainly marked as such, and must
   not be misrepresented as being the original software.
5. RegExp Studio application and all the visual components as
   well as documentation is not part of the TRegExpr library
   and is not free for usage.

                                   mailto:anso@mail.ru
                                   http://RegExpStudio.com
                                   http://anso.da.ru/
}


 
Сергей М. ©   (2008-10-21 22:55) [54]


> Kolan


Без правил нет игры


 
Наиль ©   (2008-10-21 23:01) [55]

Будем считать любую пару скобок <> тэгом.
Тогда Название находится после третьего тэга,
Город после одиннацатого, Улица и дом после девятнацатого.
Это и должна определять программа после того, как пользователь укажет, что
Одежда, магазин №001 - Название
Сальск - город
Ленина ул. 17 - Адрес.
Далее полученые правила применяются ко всем страницам сайта.
Начать лучше с http://foliant.info/ - 90% всех предприятий России, включая мелкие.


 
Наиль ©   (2008-10-21 23:03) [56]

Кстати, пользователю не обязательно показывать тэги.
Достаточно определить где находится выделеный фрагмент в HTML-коде.


 
Наиль ©   (2008-10-21 23:06) [57]

Например, Вывести текст попадающий между двумя тэгами в отдельную строчку ListBox.
Тогда пользователю остаётся найти нужную строку в ListBox и указать к какому типу информации она относится.


 
makvell   (2008-10-22 10:44) [58]

Я бы еще посоветовал использовать словари, в разборе/нормализации текстов с ними проще. Например для названий вполне вероятно, что если есть "ООО" то за ним может идти название, в официальной форме может быть "Название ООО". Т.е. словари тоже должны помочь ИМХО.


 
Kolan ©   (2008-10-23 16:23) [59]

Отчёт

Кое-что в общем получилось. Придумал и реализовал довольно простую систему, основанную на правилах.

Весть текст разбивается на строки. У каждой строки есть список правил, соответствие которым там можно найти.

Правила бывают двух типов: правила, которые можно найти по рег. выражениям и правила, которые можно найти по расстоянию от других, уже найденных правил.

Работает просто. Сначала парсер перебирает строки и ищет то, что можно найти с помощью рег. выражений. Дальше, он снова проходит все строки и ищет позиции правил по расстоянию.

У правила есть атрибут, который делает его разделителем блоков. Дальше преобразовать все это в БД али еще куда — не проблема.

Сами правила загружаются из ини файла.

Благодарю за обсуждение вопроса.


 
Сергей М. ©   (2008-10-23 16:30) [60]

Судя по тому что


> текст может быть совсем любой


размерчик ini-файла будет впечатлять).. Вселенной для его хранения не хватит)



Страницы: 1 2 вся ветка

Форум: "Прочее";
Текущий архив: 2008.12.21;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.57 MB
Время: 0.05 c
2-1226492779
Andrey_ka
2008-11-12 15:26
2008.12.21
ошибка при присвоении результату функции пустоты!


2-1226748565
Вовчик
2008-11-15 14:29
2008.12.21
Поиск по полям DBmemo


15-1224116206
KilkennyCat
2008-10-16 04:16
2008.12.21
Антивирусы - бяка.


4-1202422124
Master_Of_Puppets
2008-02-08 01:08
2008.12.21
TreeView в чужом приложении


2-1226757057
Ruzzz
2008-11-15 16:50
2008.12.21
способ получения в EAX, значение флага cf?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский