Что это и для кого (вместо вступления)

В данной статье я бы хотел рассказать о небольших результатах своей научной деятельности в сфере Text Mining. Этими самыми «результатами» стал небольшой FrameWork, который, пока еще, и до либы то не очень дотягивает, но мы растем =). Данный проект — реализация на практике некоторых, разработанных мною, теоретических положений. Как следствие этого я представляю возможности, которыми он может потенциально обладать в конце внедрения всех идей. Названо сее творение: «Text Mining FrameWork»(TextMF). Давайте в кратце рассмотрим, что именно будет позволять TextMF в своей первой финальной версии и что работает уже сейчас.

Должно быть в финальной версии:

  • Статистический анализ текста;
  • Поиск всех слов и словоформ каждого слова в тексте;
  • Ранжирование слов по весу в тексте;
  • Поиск субъектов в тексте, о которых идет речь;
  • Связи между субъектами в тексте (прямые и не прямые связи);
  • Реферирование текста;
  • Определение темы текста;
  • Обучение языку;
  • Организация взаимодействия с пользователем по средствам общения (чата).

Уже реализовано (доступно частично или проходит тестирование):

  • Статистический анализ текста (пока реализовано очень частично);
  • Поиск всех слов и словоформ в тексте;
  • Сортировка слов по их весу в данном тексте;
  • Поиск персон в тексте;
  • Определение темы текста (идет тестирование и юстировка формул).

Зачем еще одна библиотека по обработке текста?

Дело в том, что цель данного проекта не создать инструмент, используя который можно реализовать какой либо алгоритм обработки текста (как например Python NLTK и схожие), а дать возможность использовать уже готовые алгоритмы. А заодно и апробировть на практике свой собственный алгоритм. Т.е. это не еще один статистический анализатор или набор контейнеров оптимизированных под работу с текстовыми данными. Нет! Это набор эвристик, которые будут работать из коробки, не нуждаясь в дополнительных знаниях. 

С какими входными данными работает TextMF: пока только текстовые файлы. Само собой далее планируется поддержка намного больших входных форматов. Так же планируется сделать интеграцию с Веб, дабы можно было-бы спокойно анализировать Веб-странички.

Явки и пароли

Проект распространяется через репозиторий BitBucket.

Клоните его себе и подключаете к своему проекту =) Все предельно просто. В скором времени будут доступны сборки в виде подключаемого jar.

Пример использования

Обработка текста очень часто занимает много времени, особенно если пытаться открыть целую книгу! Так что в целях «на попробовать» настоятельно ��екомендую ограничивать себя несколькими страничными текстами с сайтов. Однако, уж очень маленькие тексты так же могут дать не очень хороший результат, из-за недостаточности информации в них.

Как уже говорилось ранее, основная идея в максимальной простоте использования и сокрытие эвристик и алгоритмов. Так что все банально:

// Открываем и парсим текстовый файл, который лежит по адресу TEXT_FILE_NAME
Text text = new Text(TEXT_FILE_NAME); 

// Получаем список слов отранжированных по весу
List<Word> words = text.getWords();

// Получаем тему текста
List<Word> theme = text.getThem();

// Получаем первое слово в списке слов
Word word = words.get(0);

// Получаем лист всех словоформ
List<String> wordForms =word.getWordForms();

// Получаем количество вхождений слова в текст
long count = word.getCount();

// Получаем все персоны, которые встречаются в тексте
List<Word> objects = text.getObjects();

// Смотрим вес слова
double weight = text.getWordWeight(word);


Повторюсь, получение темы — довольно долгая процедура, так что вызывая данный метод будьте осторожны;) Само собой будет реализован и асинхронный метод получения темы, но позже. Так же ОЧЕНЬ важно отметить, что качество работы методов растет в зависимости от того, какого размера текст подан на вход. Чем больше информации тем, как правило, больше возможности выучить язык. Однако и время открытия файлов существенно возрастает, при увеличении размеров содержимого. 

Небольшая UI-программа 

Для наглядной демонстрации некоторых функций программы, моим коллегой по имени Андрей, был на скорую руку написан небольшой UI клиент. На текущей стадии он носит просто ознаком��тельный характер, так как иногда удобнее воспользоваться им. Написан он на Java FX, и пока не распространяется в виде отдельного jar файла. Для того, что бы его «пощупать», нужно его собрать =(.

Главное окно программы:



1) Меню выбора текста для обработки;
2) Список выбранных файлов;
3) Результаты работы:
         a) слово встречаемое в тексте;
         b) вес слова в тексте;
с) количество повторений в тексте
4) Поле для вывода темы текста;
5) Список словоформ.

Давайте посмотрим, что мы можем узнать, используя нашу программу для этого текста: Владельцам «Волг» и «Москвичей» дадут еще один год:



Поиск темы осуществлялся около минуты (долго, согласен). При выборе какого либо отдельного слова, можно посмотреть его словоформы:



или вот:



А теперь попробуем еще один текст: «Пришельцы похитили семью украинцев и рассказали о будущем землян!», наверное один из самых «желтых» текстов =):



Текст открывался долго, наверное минуту, тему искал где-то так же. Само собой, под темой текста стоит понимать цепочку слов, которые алгоритм посчитал как тему текста. В дальнейшем алгоритм сможет выдавать вывод в читабильном виде, но это будущее, а сейчас

нам нужна Ваша помощь

Само собой, нам очень и очень необходима Ваша помощь! Тасков очень много, а проект то бесплатный. Задачи начинаются от самых простых: заниматься сайтом, писать примеры, документировать код, до самых хардкорных: помогать в оптимизации мат. аппарата и уточнять его. Сейчас, например, неплохо бы было кому-то взять на себя вопрос расширения входных форматов и сделать нечто большее, нежели просто текстовый файл. Так же очень важна помощь в тестировании. У проекта есть домен: www.textmf.com, однако там пусто, и я был бы очень рад, если кто-то помог это исправить =)

По любым предложениям сотрудничества прошу обращаться сюда: Viacheslav@b0noI.com

Ближайшие планы

Из того, что будет в ближайшее время(думаю в пределах месяца-двух) с проектом:

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


Далекие планы

Сейчас TextMF стал полуфиналистом проекта www.ukrinnovation.com. Так что есть, хоть и маленький, но все же шанс получить инвестиции на развитие.

Знаю, что пока это мечты, но если бы у меня спросили какой функционал я вижу в конце, то я бы ответил: библиотека, используя которую можно написать чат-бота, который пройдет тест Тюринга. Если говорить более реальное, то скорее всего движки для динамического отслеживания информации в интернете. Отслеживание связей и контроль за их изменениями. Ну и, само собой, нечто для создания каких либо локальных поисковых систем.

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

Авторы TextMF:
Ваш покорный слуга Вячеслав В Ковалевский и
разработчик UI Андрей Прищепа (vinglfm@gmail.com)