Wednesday, May 5, 2010

Извлечение фактов

Задача извлечения информации из текста сама по себе не нова: в этом направлении проделано довольно много работы как со стороны крупных компаний aka Яndex и Google, так и со стороны независимых разработчиков. Однако, говорить о том, что данная задача окончательно решена, увы, не приходится. В этой статье я хочу немного упорядочить свои знания по данному вопросу, поверхностно разобрав наработки, с которыми мне недавно пришлось столкнуться.


И так, пусть нам дано предложение "Визит Президента в Данию придаст новое дыхание диалогу двух стран". Для вычленения фактов из этого предложения потребуется пройти следующие этапы:


I. Токенизация

На данном этапе предстоит разбить предложение на отдельные слова. Проблем тут возникнуть не должно.


II. Морфологический анализ

После разбивки, для каждого слова необходимо получить морфологическую информацию о нём (часть речи, род, падеж, число и т.д.) и всевозможные атрибуты (например, является ли слово именем или географическим месторасположением). Для данной задачи необходимо наличие специальных словарей: в качестве реестра русских слов можно использовать словарь Зализняка или его проприетарные производные. В качестве готового решения можно рассмотреть утилиту Mystem от Яndex.

В случае использования утилиты Mystem исходное предложение будет разобрано следующим образом:

krestyaninov@localhost# echo "Визит Президента в Данию придаст новое дыхание диалогу двух стран" | ./mystem -niwg
Визит{визит=S,муж,неод=(им,ед|вин,ед)}
Президента{президент=S,муж,од=(род,ед|вин,ед)}
в{в=PR=|в=S,сокр=(им,ед|им,мн|род,ед|род,мн|дат,ед|дат,мн|вин,ед|вин,мн|твор,ед|твор,мн|пр,ед|пр,мн)}
Данию{дания=S,гео,жен,неод=вин,ед}
придаст{придавать=V=непрош,ед,изъяв,3-л,сов}
новое{новое=S,сред,неод=(им,ед|вин,ед)|новый=A=(им,ед,полн,сред|вин,ед,полн,сред)}
дыхание{дыхание=S,сред,неод=(им,ед|вин,ед)}
диалогу{диалог=S,муж,неод=дат,ед}
двух{два=NUM=(род|вин,жен,од|вин,муж,од|пр)}
стран{страна=S,жен,неод=род,мн}

III. Синтаксический разбор

На данном этапе определяются связанные подгруппы слов в предложении. Например, СУЩЕСТВИТЕЛЬНОЕ-ГЛАГОЛ: "визит-предаст". Установление этих связей позволит нам определится с неоднозначностями в морфологическом анализе. Так например, из словосочетания "новое дыхание" видно, что "новое" - это прилагательное, а не существительное (в чём не было уверенности после морфологического анализа).


IV. Семантический разбор

Задача семантического анализа заключается в построении полноценного дерева связей слов в предложении. Данный процесс имеет множество нюансов и в целом довольно сложен, для того, что бы быть описанным в этой статье. Подробней о семантическом анализе можно почитать здесь.


V. Извлечение фактов

Для извлечения фактов можно использовать следующие инструменты:
Поиск опорного элемента: В тексте ищется некоторое слово (например, "Президент"), на основе которого исходя из дерева связей строится факт;
Поиск по шаблону: Поиск данных по регулярному выражению (например, вычленение даты);
Поиск по онтологии: Поиск данных на основе предикативных правил, описанных на специальном языке. Пример.

Подробнее об извлечении фактов можно посмотреть по перечисленным ниже адресам:
Презентация "Яндекс.Пресс-портреты";
Презентация: "Автоматическое извлечение фактов из текста";


Существующие решения


Из существующих сколь-либо приемлемо работающих свободно распространяемых систем извлечения фактов мне удалось найти лишь систему под названием GATE. Система довольно интересная и многообещающая, однако нативной поддержки русского языка она, к сожалению, не имеет. Попробовать её в действии можно с помощь этого мануала.

Из платных систем можно отметить отечественную разработку RCO.


Дополнительные ссылки по теме


Извлечение ключевых слов с помощью Wikipedia;
Обзор Text Mining систем;
Обзор лингвистической системы "Semantix".

No comments:

Post a Comment