Задача извлечения информации из текста сама по себе не нова: в этом направлении проделано довольно много работы как со стороны крупных компаний 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 (спасибо rg_software).

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


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

P.S.


Как уже было сказано выше, статья является компиляцией тех данных по теме извлечения информации, что мне удалось найти и понять. Если у Вас есть информация/идеи/наработки по теме — буду рад увидеть их в комментариях.