Pullenti

SDK Pullenti предназначено для разработчиков информационных систем, имеющих дело с неструктурированными данными - текстами на естественном языке. Это открытое программное обеспечение представлено в функционально эквивалентных исходных кодах на языках программирования C#, Java, Python и Javascript.
SDK состоит из трёх независимых друг от друга частей: Lingvo - лингвистический анализ текстов, Unitext - выделение текстов и таблиц из файлов и Address - выделение из текста адресов и их привязка к ГАР ФИАС.

Лицензионная политика

Non-Commercial Freeware - система бесплатна для некоммерческого использования.
Commercial Software - для коммерческого использования можно приобрести бессрочную лицензию, она без ограничений количества инсталляций и включает техподдержку.

Pullenti Lingvo

SDK Pullenti Lingvo - лингвистический анализ неструктурированных текстов на русском и украинском языках. Включает морфологический анализ, выделение именованных сущностей NER (персоны, организации, даты, страны, указы и др.), семантический анализ, а также вспомогательные средства типа выделения именных групп, анализа концов предложений и кавычек, работы с различными числовыми представлениями и другие.
Все алгоритмы основаны на правилах, машинное обучение нигде не используется.

Pullenti Unitext

SDK Pullenti Unitext - выделение из файлов различных форматов текстовых данных и структурирующих их элементов типа таблицы, списки, сноски, примечания, надписи с фигур. Также извлекаются картинки. Поддерживаются такие форматы как docx, doc, pdf, rtf, odt, html и многие другие. Если файл не содержит текстов в явном виде, то они не будут выделены, так как OCR-задачу SDK не решает. Выделяемая информация представляется в универсальном структурно-текстовом представлении - Unitext. Данные о стилях, размерах, цвете, страницах и т.п. также входят в это представление, но это поддержано не для всех форматов.

Pullenti Address

SDK Pullenti Address - выделение из текста адресов, привязка их к объектам ГАР ФИАС. Для своей работы SDK обращается не к внешнему ресурсу, а к локальному индексу, в который преобразуются объекты ГАР ФИАС (из файлов формата xml). Также SDK предлагает разные поисковые возможности по объектам ГАР - по реквизитам, части именований и пр. Через SDK можно получить полную иерархию всех объектов. С версии 4.13 реализованы так называемые Адрессарии - адресный индекс, через который можно присваивать числовые номера адресным элементам, причём номера совпадают для эквивалентных, хотя и по разному записанных адресов в тексте. Подробности с демонстрацией на отдельном сайте garfias.ru.

Реализация и платформы

Исходные коды для языков C# (Framework и Core), Java, Python3, Javascript (Node.js) и документация получены с помощью конвертера Unisharping. Конвертер генерирует функционально эквивалентный код, что подтверждается многочисленными автотестами, которые также конвертируются и корректно отрабатывают на конечных языках.
Скорость обработки на разных языках отличается: C# и Java примерно одинаковы по времени исполнения, Javascript медленнее в 5 раз, Python - в 20 раз. SDK Pullenti может использоваться на любых платформах, поддерживающих хотя бы один из перечисленных языков.
Каждая из частей SDK самодостаточна и для своего использования не требует сторонних библиотек или предустановленного ПО.

Качество

Разработка SDK Lingvo идёт по принципу: "приоритет качества над полнотой". Большое внимание уделяется корректности атрибутов выделяемых сущностей и их падежной нормализации, а также задаче кореференции - объединению сущностей из разных мест текста.
Качество поддерживается на должном уровне посредством полутора тысяч автотестов, содержащих разные тексты и правильные варианты анализа. Все доработки производятся на фоне этих автотестов, не дающих понижать качество.

Соревнования NER

В рамках конференции Диалог мы участвовали в соревнованиях:

  • В 2016 году на соревновании FactRuEval по выделению именованных сущностей (участие было анонимным, мы были под псевдонимом Pink на четырёх дорожках): на дорожках T1, T2 и T2_m Pullenti занял 1-е место, на T1_l - второе. Подробности здесь.
  • В 2021 году на соревновании RuNormAS по нормализации текстовых фрагментов на 1-й дорожке мы заняли 1-е место, на 2-й второе соответственно.
  • В 2022 году на соревновании RuNNE по извлечению вложенных именованных сущностей мы заняли первые места на обеих дорожках.