Сегодня мы будем говорить о том, как автоматизировать процесс анализа методом «Окон-Фактов». Об этом методе, к сожалению, достаточно мало информации, однако он остается одним из ключевых методов обработки информационных потоков. Более детально об анализе текста можно почерпнуть, например, тут. В общих чертах задача метода «Окон-фактов» сводится к поиску в тексте неоспоримых фактов. Но уточним, что же именно стоит понимать под фактом.
В этой статье под фактом будет пониматься следующее — это суждение (предложение), в котором упоминается, какой либо субъект или именованный объект. Имея возможность извлекать подобные факты из многих текстов, мы получаем текст лишенный «воды» и содержащий одни лишь факты.
Разумеется, такой подход к трактовке термина «факт» в результате, в некоторых текстах, упускает достаточно много информации. Однако, данная проблема наблюдалась далеко не во всех текстах. В то же время информация, с которой работает аналитик (работающий с конечным программным анализатором информации), была проанализирована с довольно высокой точностью.
Немного четче сформулируем задачу, которая перед нами стоит: в имеющейся информации в виде текста найти слова, которые являются персоналиями или другими важными объектами ( например названия местности, места или что либо другое значимое в человеческом понимании этого слова). Далее осуществить поиск всех предложений, в которых эта персона встречается (такие предложения мы как уже говорили называем «Фактами»).
По какому признаку мы отличаем персоналию от обычного слова? Думаю, ответ на этот вопрос очень прост — по большой букве. Банально и сурово. Разумеется, такое обобщение имеет очень много проблем, без решения которых подобный метод может не работать. И именно о том, какие проблемы возникают у человека, который пытается реализовать нечто подобное, и как с ними бороться расскажем немного детальнее.
С главным мы разобрались (для начала) — все, что начинается с большой буквы — будем именовать Субъектом или Объектом, о которых идет речь в тексте или о которых в тексте упоминается. Однако сразу же стоит вспомнить об некоторых условностях в каждом языке. К примеру, существуют символы, после которых следующее слово чаще всего начинается большой буквой. Для нашего русского такими символами могут служить точка, вопросительный знак, восклицательный знак и т.д. Таким образом, из поля зрения нашего подхода выпадают как минимум все те слова, которые стоят в начале предложения, так, как не известно, по какой причине в них большая буква. Такое ограничение, на первый взгляд, не может положительно сказаться на результате роботы. Однако, и как показала практика, негативного эффекта не наблюдается.
Итак, подведя промежуточные итоги: мы научились определять Субъекты информации по большой букве. Так как, не все слова, начинающиеся с большой буквы — Субъекты, то мы пришли к необходимости составить список правил — по которым мы анализируем исключения (когда слово хоть и начинается с большой буквы, но не будет считаться Субъектом).
Далее мы сталкиваемся с проблемой сортировки фактов по Субъектам. Так как один и тот же Субъект в разных фактах может упоминаться в измененной форме (разные склонения, падежи и т.д.). Для того что бы определить относятся ли два слова — Субъекта к одному и тому же Субъекту, мы сравниваем эти два слова на «похожесть» друг-другу. А так же экспериментальным путем установили порог «похожести» слов, при котором слова считаем идентичными.
Подобная трактовка поиска персоналий в тексте позволяет в автоматическом режиме выполнять задачу одинаково эффективно, без cущественных затрат на лингвистический анализатор текста, практически для любого языка. То есть алгоритм показывает одинаково хорошие результаты как на Английском, Украинском так и Русском языках.
Напомню, что мы условились вычленять персоналии по большой букве. Так же условимся что у нас есть множество А, в котором перечислены все символы после которых ставится большая буква (это сделано для того, что бы мы не спутали персоналию с обычным словом). А значит что если слово начинается с большой буквы и последний не пустой символ перед ним не содержится в множестве А — это слово будет считаться персоналией, а предложение, в котором содержится это слово — фактом о данной персоне.
Разумеется, теперь, с учетом выше сказанного, мы можем в автоматическом режиме решить следующее задачи:
Но и этот далеко не полный список того, что мы сможем делать в полностью в автоматическом режиме. Имея массив фактов и персоналий можно строить связи по фактам между персонами. Граф связей можно строить по отдельному тексту или же накапливать связи в последующих текстах. Можно, например, искать факты про конкретную персону, и с кем данная персона связана, и через какие факты.
Выстроенные цепочки связей между персонами через факты могут быть измерены по длине.

Все эти возможности были собраны в единый программный комплекс под названием «MadWin». К сожалению, нет возможности выложить исходные коды программы, а саму программу пришлось немного «урезать». Программа собрана в deb и rpm пакеты для х86. Функционал «урезанной» версии программы, доступной для скачивания следующий:
В выходном файле (отчете) программа показывает:
Входящий файл, в котором рассказана история о Николь Кидман (взято из прессы): txt( текст взят тут).
Небольшая цитата из текста:
Отчет программы в формате html.
В отчете сгруппированы персоналии, и каждой из них приведены факты. К примеру далее приведены факты для Субъекта «Николь»
Как видим факт из приведенного выше текста вошел.
Далее приведена в отчете таблица связей персоналий. Каждой персоне дан свой номер и на пересечении двух номеров стоит либо «+», который обозначает что между данными персонами можно построить связь через факты, либо минус, который свидетельствует в обратном.
И завершает таблицу «пути» соединяющие все персоналии между которыми существует связь.
UPD:
Бета второй версии
madwin x867 deb
madwin x86 rpm
блог автора b0noI
В этой статье под фактом будет пониматься следующее — это суждение (предложение), в котором упоминается, какой либо субъект или именованный объект. Имея возможность извлекать подобные факты из многих текстов, мы получаем текст лишенный «воды» и содержащий одни лишь факты.
Факты и субъекты, в тексте
Разумеется, такой подход к трактовке термина «факт» в результате, в некоторых текстах, упускает достаточно много информации. Однако, данная проблема наблюдалась далеко не во всех текстах. В то же время информация, с которой работает аналитик (работающий с конечным программным анализатором информации), была проанализирована с довольно высокой точностью.
Немного четче сформулируем задачу, которая перед нами стоит: в имеющейся информации в виде текста найти слова, которые являются персоналиями или другими важными объектами ( например названия местности, места или что либо другое значимое в человеческом понимании этого слова). Далее осуществить поиск всех предложений, в которых эта персона встречается (такие предложения мы как уже говорили называем «Фактами»).
По какому признаку мы отличаем персоналию от обычного слова? Думаю, ответ на этот вопрос очень прост — по большой букве. Банально и сурово. Разумеется, такое обобщение имеет очень много проблем, без решения которых подобный метод может не работать. И именно о том, какие проблемы возникают у человека, который пытается реализовать нечто подобное, и как с ними бороться расскажем немного детальнее.
Проблемы поиска субъектов
С главным мы разобрались (для начала) — все, что начинается с большой буквы — будем именовать Субъектом или Объектом, о которых идет речь в тексте или о которых в тексте упоминается. Однако сразу же стоит вспомнить об некоторых условностях в каждом языке. К примеру, существуют символы, после которых следующее слово чаще всего начинается большой буквой. Для нашего русского такими символами могут служить точка, вопросительный знак, восклицательный знак и т.д. Таким образом, из поля зрения нашего подхода выпадают как минимум все те слова, которые стоят в начале предложения, так, как не известно, по какой причине в них большая буква. Такое ограничение, на первый взгляд, не может положительно сказаться на результате роботы. Однако, и как показала практика, негативного эффекта не наблюдается.
Итак, подведя промежуточные итоги: мы научились определять Субъекты информации по большой букве. Так как, не все слова, начинающиеся с большой буквы — Субъекты, то мы пришли к необходимости составить список правил — по которым мы анализируем исключения (когда слово хоть и начинается с большой буквы, но не будет считаться Субъектом).
Далее мы сталкиваемся с проблемой сортировки фактов по Субъектам. Так как один и тот же Субъект в разных фактах может упоминаться в измененной форме (разные склонения, падежи и т.д.). Для того что бы определить относятся ли два слова — Субъекта к одному и тому же Субъекту, мы сравниваем эти два слова на «похожесть» друг-другу. А так же экспериментальным путем установили порог «похожести» слов, при котором слова считаем идентичными.
Подобная трактовка поиска персоналий в тексте позволяет в автоматическом режиме выполнять задачу одинаково эффективно, без 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