Подсчет частот слов и биграмм. Извлечение предложений из текстов

Давным давно сюда ничего не писал — просто как-то переключился на другие занятия. Думаю, в скором будущем здесь будет появляться больше материалов. 

Недавно захотелось немного поэксперементировать с фреймвоком Angular, поразбирать его, а также посмотреть, насколько комфортно можно обрабатывать большим массивы текстов на клиентской части — то есть в браузере. В общем эксперимента ради сделал небольшое веб приложение. Предназначено оно для выборки предложений, содержащих нужную лексику, подсчета частот слов и биграмм в этих предложениях, экспорта предложений и частот слов / биграмм, экспорта term-text матрицы — можно выбрать наиболее часто встречающиеся слова и их словоформы и выгрузить таблицу, в которой будет отражена встречаемость каждого из слов в каждом их предложений. Сделать хотелось больше, но в общем я просто играл с Angular и планы далее совсем другие. 

Приложение находится ТУТ.  Разрабатывалось под использование в  Google Chrome и в других браузерах может не работать. 

На первой вкладке «тексты» можно загрузить файлы txt, кодировка для текстов на русском языке должна быть UTF-8. Можно загрузить и тексты на других языках, но поиск словоформ я делал только для русского языка. 

 

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

Читать далее Подсчет частот слов и биграмм. Извлечение предложений из текстов

Доделал библиотеку для сопоставления текста с шаблоном

Вот наконец-то дошли руки описать результат работы над небольшим проектом — библиотекой на C# для сопоставления строки шаблону (который продолжаю делать и дорабатывать в рамках проекта по-больше).

Суть его такая — есть текст и есть некий шаблон, представленный словами различными операторами. Пример шаблона: (зима | снег | снежн*) & (лёд | гололёд | скользк*)

Этот шаблон можно сопоставить с некоторой строкой — например: «этой зимой очень много снега, из под которого не видно льда вообще…». Строка токенизируется и превращается в массив слов, которые надо сопоставить с шаблоном и определить — соответствует ли он массиву токенов или нет.

Сам шаблон в свою очередь парсится, в результате чего формируется список терминалов и нетерминалов. К каждому терминалу из морфологического словаря подбираются словоформы (если они есть в словаре и если перед токеном не стоит оператор «=» ). Далее с помощью алгоритма сортировочной станции список преобразуется в список в обратной польской нотации (если бы это было арифметическое выражение 1 + 2, то в обратной польской нотации будет 1 2 + ). Далее из него строим бинарное дерево синтаксического разбора, которое при рекурсивной реализации каждой из нод сопоставляется с массивом токенов (нашим текстом). На выходе корень возвращает булево значение — true, если шаблон соответствует строке, и false, если нет.

Нетерминалы в языке формирования шаблонов сделал такие:

& — это AND

| — OR

~ — NOT

«слово1 слово2» — кавычки для идентификации нескольких слов как одного терминала.

/n — максимальное расстояние между операндами (где операндами могут быть как терминальные, так и нетерминальные выражения), где n — целочисленное значение

( и ) — скобки

= — не брать словоформы из словаря для терминала

* — взять из словаря словоформы слов, начинающихся на всё, что идет до звездочки

На мой взгляд, самое хорошее тут,  это оператор расстояния. Во всяком случае, мне он нужен очень-очень, но не в виде типа «слово1 слово2″~n — то есть где оператор расстояния работает только с терминалами.

Библиотека на гитхабе ВОТ ТУТ.

Сделал небольшое настольное демо (большей частью для тестов). Вот пример работы:

В третьем поле результат разбора шаблона уже вместе со словоформами.

Мне эта библиотека нужна для проекта чат бота — нужно сопоставлять большое количество шаблонов текста с сообщением пользователя. Собственно, в том же репозитории, что и эта библиотека стал делать проект по чатботу. Потому что так удобнее мне, хоть это и нехорошо 🙂

P.S. Библиотека написана на C#, .NET STANDARD. Бд для словаря — MS SQL.

Что-то вроде анонса готовящихся проектов

Решил, что давно сюда не писал и надо это исправить — кратко рассказать, над чем сейчас работаю:

0. Во-первых проект с базой пользователей соцмедии и информацией по ним бросил (хоть он и работает сам по себе). Причин несколько — надоели ограничения на количество обращений к API соц сетей, а так же понял, что собранные тексты надо хранить (а не анализировать в памяти и избавляться от них, сохраняя только результаты анализа в БД). В общем у меня нет места для хранения всех постов. Сейчас в БД 2,5 миллиона пользователей, в среднем у каждого около 200 постов (кажись). 2,5 * 200 = очень много миллионов постов, которые надо хранить в индексе (и это только для 2.5 миллионов юзеров)… А без этого введение и применение новых метрик анализа будет идти слишком долго (надо заново собирать посты пользователей).

Теперь о новых проектах. Так вышло что начато сразу 3… И это ужасно, потому что времени хватает только на 1, да и то не хватает… Поэтому как-то все смешалось в кучу и остановились сразу все 3 (перегрелся). Итак, работаю над следующими проектами:

  1. Сервис мониторинга в первую очередь СМИ (может быть будут еще соцмедии типа форумов / блогов). Пока в базе 16 тысяч источников — делаю сервис автоматического определения правил парсинга. Авось получится хотя бы для четверти источников в БД. Сервис будет представлять собой централизованную БД правил парсинга источников (rest api на головном сервере). Клиентская часть состоит из индекса, куда будут сохраняться публикации, по ним можно будет производить поиск, экспорт, некоторый анализ. Приложение для формирования правил парсинга, экспорта, поиска и пр будет на WPF. К нему — WCF сервис, хостящийся на Windows службе — это сервис сбора и взаимодействия с индексом ElasticSearch для клиента и сборщика. Хочу по максимуму автоматизировать установку ElasticSearch, создания индекса, установку WCF сервиса в службе.
  2. Парсер шаблона текста, формирующий бинарное дерево синтаксического разбора шаблона (шаблон это типа поискового запроса — с булевыми операторами, оператором расстояния, кавычками, скобками и пр) и сопоставление этого шаблона строке. По сути, мне нужна библиотека для сопоставление большого количества шаблонов большому количеству строк. На выходе — матрица с бинарными значениями: столбцы — шаблоны, строки — строки текстов.
  3. На блоге о своем опыте изучения программирования описал свою небольшую библиотеку для предобработки текстов (токенизация, стемминг, очистка от урлов, почтовых адресов, пунктуации, стоп-слов, формирование n-грамм из токенов и пр). На выходе после обработки можно сформировать term-text матрицу. В общем она мне нужна была, чтобы сто раз не писать в каждом проекте инструменты для предобработки текстов перед их анализом и пр. Теперь хочу сделать к ней настольное приложение — можно будет загрузить тексты из txt, xlsx и пр, убрать лишние, если очень захочется, получить словарь слов, предобарботать средствами библиотеки, выгрузить term-text матрицу. Мне такое приложение нужно для того, чтобы экспериментировать с мышиным обучением, кое пробую в какой-то мере освоить (не хочу примеров из книг — хочу тексты мучить, потому что больше мне ничего не интересно, но вначале их надо представить в виде term-text матрицы). 

Пока пробую себя заставить не заниматься сразу всем, а остановиться только на проекте из пункта 1.

База данных пользователей соц сетей

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

Запускал сервис локалько в качестве теста — за неполный день благополучно в БД записалась информация из профилей по 521 тысяче юзеров вк.

В планах идентификация ботов, реализация поиска постов по полноценным поисковым запросам (по умолчанию это регулярные выражения), классификаторы на машинном обучении, другие соц сети и много другого. Планирую к сентябрю закончить делать первую версию проекта. Проект делаю на c#, .net 4.5, .net core, elasticsearch, mongo, сервера как на windows так и на linux. Буду ли сам писать классификаторы или это будет что-то вроде Accord.Net — пока не решил. В приоритете первое. 

Варианты применения: получение выборок для соц опросов, для продаж тех или иных товаров или услуг целевым аудиториям «по интересам» и по демографическим признакам. 

Если у вас есть какие-либо предложения по проекту — буду рад их прочитать — пишите в комментариях!

Доделал проект для поиска сдаваемых в аренду и продаваемых квартир, комнат, домов, офисов и пр

Думаю, стоит тут написать.

Доделал свой первый публичный проект для поиска квартир и комнат, сдаваемых в аренду (а также других видов недвижимости). Суть проекта такова — на сервере происходит постоянный мониторинг появления новых постов вконтакте о сдаваемых и продаваемых квартирах, комнатах, домах, офисах, гаражах, складах и пр. Также отслеживаются посты желающих снять или купить недвижимость. Посты классифицируются по типу предложения и по типу недвижимости, определяется страна и город (Россия и СНГ), выдергивается цена. Также сервис пытается определить, кто опубликовал объявление — а точнее, не посредник ли это. Алгоритм для определения посредников довольной простой — регулярные выражения для конкретных индикаторов посредников (типа «комиссия 99%) и учет количества постов, написанных этим же автором.

Снимок экрана 2017-01-09 в 14.54.46

Читать далее Доделал проект для поиска сдаваемых в аренду и продаваемых квартир, комнат, домов, офисов и пр

Global QDA v.1.0.0. Qualitative data analysis software. Part 1. Basic Functions

Hello!

In this post i am going to describe basic functions of free program for qualitative data analysis (texts, to be exact) — Global QDA.

So, using Globa QDA you can:

  • Create projects
  • Upload texts to them (txt files, xlsx files, simple text paste into form)
  • Create quotes
  • Create codes (with hierarchical structure)
  • Mark quotes with codes
  • Add variables for texts
  • Create setes of data — to work with data samples
  • Get analytical data as charts and export raw / analytical data as txt, docx (complete reports), xlsx
  • Get logs of project — each action is in logs
  • Invite other users to projects to wotk together
  • Get all the data of all the projects in Global QDA database including logs — so: PROJECTS DATABASE IS OPEN FOR ALL USERS.

In order to start work with Global QDA you have to register HERE.

You can download program HERE.

And also you need JAVA to run Global QDA => JAVA.

This is 1st version of program, so there some bugs… When I get feedback I try to find the time to solve these problems. But there are some still there… So, please send me feedback when you face with problems using Global Qda. My email is aryumin@aryumin.ru

So, in the next article we will create new project and start real work.

Bye!