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

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

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

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

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

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

& — это AND

| — OR

~ — NOT

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

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

( и ) — скобки

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Программа для запоминания иностранных слов

Здравствуйте, уважаемые читатели блога о контент-анализе!

Давно ничего не писал — учусь программировать 🙂 Хочу поделиться совершенно не связанной с тематикой блога программой, которую только что вот закончил делать. Программа предназначена для запоминания иностранных слов. Алгоритм работы с ней такой:

Пользователь выбирает язык (а точнее — словарь, например, немецко-английский), с которым будет работать. Загружает тексты на этом языке (в данном случае — на немецком). (На текущий момент кодировка только UTF-8 — но это так, к слову. Тем более это не проблема ведь…)

Выделение_066 Читать далее Программа для запоминания иностранных слов

Сделал генератор поисковых запросов для твиттера

Здравствуйте, уважаемые читатели блога о контент-анализе!

Эта заметка — наверное, просто на память и для сохранности моей библиотеки и графической реализации ее использования на java swing. Библиотека позволяет из исходного поискового запроса для твиттера, где не учтена возможная морфология слов, получить массив таких же по логической структуре поисковых запросов, но уже с учетом возможной морфологии. Если словоформ сгенерировалось мало — можно добавить свою лексику. Если есть что-то лишнее — это лишнее можно убрать. Дело в том, что поисковик твиттера сам не будет искать все словоформы — найдет твиты со словами в тех формах, что заданы в вашем поисковом запросе. Словоформы придется указать вручную. Однако, всегда можно что-то забыть указать или нужно сделать ОЧЕНЬ много запросов, а времени или желания прописывать в них все словоформы просто нет.

ts Читать далее Сделал генератор поисковых запросов для твиттера

Сделал программку для конкорданса — конкорданс менеджер 1.0

Здравствуйте, уважаемые читатели блога о контент-анализе!

Сегодня хочу поделиться описанием бесплатной программы для извлечения контекстов употребления слов в массиве текстов. Программку дописал вчера. Для использования понадобится установить JAVA и MYSQL сервер (не стоит пугаться — это не сложно).

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

Снимок Читать далее Сделал программку для конкорданса — конкорданс менеджер 1.0