Сбор публикаций из СМИ с поиском. Проект такой вот начал

Совсем недавно разместил новый небольшой сервис для сбора публикаций из СМИ. Сбор идет приблизительно из 1000 источников и собирается все, что есть в RSS лентах источников (на текущий момент только из RSS). Полный текст пока не собирается — только описание из RSS (если оно есть), заголовок статьи, дата публикации, ссылка, автор, категория.

На отдельной странице можно посмотреть и источники и их rss ссылки. 

Работает полнотекстовый поиск с возможностью использовать различные операторы типа OR, AND, NOT, расстояние между операндами, звездочку, минимальное редакционное расстояние и пр. 

Найденные поиском тексты можно экспортировать в Excel. Также можно и по одному в txt. 

Проект планирую развивать в сторону сбора полного текста публикаций, но писать правила парсинга не буду, потому что это будет нереально трудозатратно. Попробую автоматизировать. Также хочу поиграть с Entity Extraction (это извлечение сущностей из текста, типа ссылок, ФИО, других имен собственных, географии той или иной, email-ов и пр пр пр). Планировал посмотреть в сторону группировки текстов по темам также. В целом, делаю проект просто как полигон для разных экспериментов. 

Писал на asp.net core worker service, asp.net core + angular. 

Проект можно посмотреть и поиспользовать в том виде, в котором он сейчас существует вот тут: ссылка вот

Если вдруг актуален сбор / парсинг каких-либо текстовых данных (извлечь из них что-либо) — обращайтесь по почте: aryumin ___собак___ aryumin.ru. 

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

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

Недавно захотелось немного поэксперементировать с фреймвоком 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

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