Как извлечь структурированную информацию с помощью Yargy-парсера?
В части задачи NER (извлечение именованных сущностей) для текстов на русском языке, многим знакома библиотека natasha, обладающая большим набором встроенных правил (экстракторов) для извлечения отдельных типов сущностей (Адреса, Имена и т.д.) из текста. Но бывают случаи, когда необходимо создать новое уникальное правило для извлечения данных, и иметь для этого понятный и гибкий инструмент на Python. В таком случае Yargy-парсер является хорошим решением.
Данная библиотека является частью большого проекта Natasha и, собственно, основой библиотеки natasha. Работа Yargy-парсера основана на контекстно-свободных грамматиках и словарях. В Yargy-парсере реализован алгоритм Эрли, временная сложность которого Θ (n3).
Yargy-парсер использует словари и правила для извлечения структурированной информации из текстов на русском языке. Правила (rule) состоят из предикатов. Yargy-парсер имеет множество встроенных предикатов, таких как:
- is_capitalized — слово начинается с большой буквы,
- is_single — слово в единственном числе, gram (X), где X – это граммема.
Yargy-парсер использует библиотеку pymorphy для определения формы слова, gram(‘ADJF’) – означает, что слово является прилагательным. У парсера есть метод findall, который возвращает список-результат сопоставлений.
В качестве примера решим задачу определения в тексте заказа наименований напитков. Перечень напитков определим в правиле R_1 через предикат dictionary, перед названием напитка должно идти прилагательное.
Результат:
Попробуем отыскать в тексте обращения информацию о заказе. В данном случае ищем все последовательности, начинающиеся со слова «заказ», после чего должен идти символ или слово «номер» и, непосредственно, сам номер.
Результат будет следующим:
А теперь решим задачу извлечения из текста свойств банковской карты – это тип карты дебетовая или кредитная, а также классическая, золотая или платиновая. Для распознавания различных вариаций для поиска используем газеттир типа morph_pipeline. Конструктор fact описывает объект-результат интерпретации (interpritation), в нашем случае «Card» (банковская карта), где tarif и type – атрибуты данного объекта.
Результат будет следующим:
Yargy-парсер — это мощный инструмент для извлечения структурированной информации из русско-язычных текстов. Вместе с тем, парсер реализован на python, что делает его использование в проекте чаще всего более удобным в сравнении с аналогами, такими, так Tomita-парсер от Yandex.