Pull to refresh

Автоматизированный поиск фактов в тексте (метод «окон-фактов»)

Reading time5 min
Views3.5K
Сегодня мы будем говорить о том, как автоматизировать процесс анализа методом «Окон-Фактов». Об этом методе, к сожалению, достаточно мало информации, однако он остается одним из ключевых методов обработки информационных потоков. Более детально об анализе текста можно почерпнуть, например, тут. В общих чертах задача метода «Окон-фактов» сводится к поиску в тексте неоспоримых фактов. Но уточним, что же именно стоит понимать под фактом. 

В этой статье под фактом будет пониматься следующее — это суждение (предложение),  в котором упоминается, какой либо субъект или именованный объект. Имея возможность извлекать подобные факты из многих текстов, мы получаем текст лишенный «воды» и содержащий одни лишь факты.

Факты и субъекты, в тексте


Разумеется, такой подход к трактовке термина «факт» в результате, в некоторых  текстах, упускает достаточно много информации. Однако, данная проблема наблюдалась далеко не во всех текстах. В то же время информация, с которой работает аналитик (работающий с конечным программным анализатором информации), была проанализирована с довольно высокой точностью. 

Немного четче сформулируем задачу, которая перед нами стоит: в имеющейся информации в виде текста найти слова, которые являются персоналиями или другими важными объектами ( например названия местности, места или что либо другое значимое в человеческом понимании этого слова). Далее осуществить поиск всех предложений, в которых эта персона встречается (такие предложения мы как уже говорили называем «Фактами»).

По какому признаку мы отличаем персоналию от обычного слова? Думаю, ответ на этот вопрос очень прост — по большой букве. Банально и сурово. Разумеется, такое обобщение имеет очень много проблем, без решения которых подобный метод может не работать. И именно о том, какие проблемы возникают у человека, который пытается реализовать нечто подобное,  и как с ними бороться расскажем немного детальнее.

Проблемы поиска субъектов


С главным мы разобрались (для начала) — все, что начинается с большой буквы — будем именовать Субъектом или Объектом, о которых идет речь в тексте или о которых в тексте упоминается. Однако сразу же стоит вспомнить об некоторых условностях в каждом языке. К примеру, существуют символы, после которых следующее слово чаще всего начинается большой буквой. Для нашего русского такими символами могут служить точка, вопросительный знак, восклицательный знак и т.д. Таким образом, из поля зрения нашего подхода выпадают как минимум все те слова, которые стоят в начале предложения, так, как  не известно, по какой причине в них большая буква. Такое ограничение, на первый взгляд, не может положительно сказаться на результате роботы. Однако, и как показала практика, негативного эффекта не наблюдается.

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

Далее мы сталкиваемся с проблемой сортировки фактов по Субъектам. Так как один и тот же Субъект в разных фактах может упоминаться в измененной форме (разные склонения, падежи и т.д.). Для того что бы определить относятся ли два слова — Субъекта к одному и тому же Субъекту, мы сравниваем эти два слова на «похожесть» друг-другу. А так же экспериментальным путем установили порог «похожести» слов, при котором слова считаем идентичными.

Подобная трактовка поиска персоналий в тексте позволяет в автоматическом режиме выполнять задачу одинаково эффективно, без cущественных затрат на лингвистический анализатор текста, практически для любого языка. То есть алгоритм показывает одинаково хорошие результаты как на Английском, Украинском так и Русском языках.

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

Автоматизация процесса


Разумеется, теперь, с учетом выше сказанного, мы можем в автоматическом режиме решить следующее задачи:
  • составить список персон, которые упоминаются в тексте;
  • сгруппировать факты по персоналиям;
  • отсортировать персоны, которые в фактах фигурируют парами и тем самым находить факты связующие некоторых персон.

Но и этот далеко не полный список того, что мы сможем делать в полностью в автоматическом режиме. Имея массив фактов и персоналий можно строить связи по фактам между персонами. Граф связей можно строить по отдельному тексту или же накапливать связи в последующих текстах. Можно, например, искать факты про конкретную персону, и с кем данная персона связана, и через какие факты. 

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

MadWin




Все эти возможности были собраны в единый программный комплекс под названием «MadWin». К сожалению, нет возможности выложить исходные коды программы, а саму программу пришлось немного «урезать». Программа собрана в deb и rpm пакеты для х86. Функционал «урезанной» версии программы, доступной для скачивания следующий:
  • умеет находить в тексте персоны;
  • умеет находить в тексте факты и привязывает их к найденным персонам;
  • умеет строить взаимосвязи (и проводит градацию взаимосвязей) между любыми найденными персонами.

В выходном файле (отчете) программа показывает:
  • список персон в тексте;
  • список фактов по персонах;
  • таблицу связей;
  • перечень развернутых связей между персонами.

Пример работы программы

Входной текст

Входящий файл, в котором рассказана история о Николь Кидман (взято из прессы): txt( текст взят тут). 

Небольшая цитата из текста:
Во дворе, за высокой оградой, есть большой бассейн и роскошный сад. Дом находится в хорошо охраняемом и столь же надежно защищенном от всяческих посторонних квартале, что и сыграло решающую роль для супругов при выборе жилья: родители хотят, чтобы их дочурка росла в максимально спокойной атмосфере.
За все эти удобства звёздная чета заплатила около пяти миллионов долларов. Параллельно Николь подыскивает жилище в Лондоне, куда ей в скором времени предстоит отправиться для участия в постановке мюзикла «Девять».


Выходной файл-отчет

Отчет программы в формате html.
В отчете сгруппированы персоналии, и каждой из них приведены факты. К примеру далее приведены факты для Субъекта «Николь»
Николь
  • В то время, как некоторые звёздные пары делают из рождения детей целый бизнес, заранее продавая права на публикацию и видеосъёмки малышей, Николь Кидман – не " такая "
  • Актриса Николь Кидман и её муж, певец Кейт Урбан отказались от миллионов долларов, которые им предлагали за публикацию первых фотографий их новорождённой малышки Сандей Роуз
  • Но Кит и Николь видят огромный интерес к себе и малышке, они это ценят  
  • Пока им не до сделок с журналами, они наслаждаются первыми днями жизни дочери, а Николь больше всего беспокоят такие вопросы, как грудное кормление 
  • Отметим, что Том Круз и Кэти Холмс прислали Николь большой букет роз и несколько огромных пакетов с игрушками, детскими одежками и другими необходимыми для младенцев вещами
  • Недавно стало известно, что Николь Кидман вместе с мужем, кантри-певцом Китом Урбаном, приобрела особняк в Беверли Хиллз
  • Параллельно Николь подыскивает жилище в Лондоне, куда ей в скором времени предстоит отправиться для участия в постановке мюзикла " Девять " 


Как видим факт из приведенного выше текста вошел.

Далее приведена в отчете таблица связей персоналий. Каждой персоне дан свой номер и на пересечении двух номеров стоит либо «+», который обозначает что между данными персонами можно построить связь через факты, либо минус, который свидетельствует в обратном. 
1 2 3 4 5 6 7 8 9 10 11 12 13 14
1: Девять, Лондоне - - + + + + - - + + + + + +
2: E-motion - - - - - - - - - - - - - -
3: Хиллз, Беверли, Китом + - - + + + - - + + + + + +
4: Холмс, Кэти + - + - + + - - + + + + + +
5: Круз + - + + - + - - + + + + + +
6: Теннесси, Нашвилле + - + + + - - - + + + + + +
7: Макконахи, Мэтью, Агилера, Кристина, Энтони, Марк, Лопес, Дженнифер, Питт, Брэд, Джоли - - - - - - - - - - - - - -
8: Herald, Morning, Sydney - - - - - - - - - - - - - -
9: StarLife + - + + + + - - - + + + + +
10: Роуз, Сандей + - + + + + - - + - + + + +
11: Урбан + - + + + + - - + + - + + +
12: Кейт + - + + + + - - + + + - + +
13: Кидман + - + + + + - - + + + + - +
14: Николь + - + + + + - - + + + + + -


И завершает таблицу «пути» соединяющие все персоналии между которыми существует связь. 

Ссылки



UPD:
Бета второй версии

madwin x867 deb
madwin x86 rpm
блог автора b0noI
Tags:
Hubs:
+6
Comments6

Articles

Change theme settings