Применение Yargy-парсера при переводе русскоязычных слов в числа |
||
МЕНЮ Главная страница Поиск Регистрация на сайте Помощь проекту Архив новостей ТЕМЫ Новости ИИ Голосовой помощник Разработка ИИГородские сумасшедшие ИИ в медицине ИИ проекты Искусственные нейросети Искусственный интеллект Слежка за людьми Угроза ИИ ИИ теория Внедрение ИИКомпьютерные науки Машинное обуч. (Ошибки) Машинное обучение Машинный перевод Нейронные сети начинающим Психология ИИ Реализация ИИ Реализация нейросетей Создание беспилотных авто Трезво про ИИ Философия ИИ Big data Работа разума и сознаниеМодель мозгаРобототехника, БПЛАТрансгуманизмОбработка текстаТеория эволюцииДополненная реальностьЖелезоКиберугрозыНаучный мирИТ индустрияРазработка ПОТеория информацииМатематикаЦифровая экономика
Генетические алгоритмы Капсульные нейросети Основы нейронных сетей Распознавание лиц Распознавание образов Распознавание речи Творчество ИИ Техническое зрение Чат-боты Авторизация |
2022-04-01 17:36 Проект Natasha хорошо зарекомендовал себя в решении задач NER для работы с русским языком. Он предоставляет возможности для базовой обработки текстов: сегментация на токены и предложения, морфологический и синтаксический анализы, лемматизация и, наконец, распознавание именованных сущностей – аспект, который мы подробно рассмотрим сегодня. Также будет представлено составление своих правил с помощью Yargy-парсера, что необходимо в тех случаях, когда готовые решения показывают низкое качество. Распространенный метод извлечения именованных сущностей из текста – готовые библиотеки. Они дают неплохой результат, но, в случае с переводом русскоязычных слов в числа возникают проблемы. Одна из них – склеивание цифр. Например, такое происходит, когда во фрагменте проговариваются только числа, без уточнения, что из них является номером документа, а что – его датой. Библиотека Word-to-Number (Russia), которая реализована на основе Yargy и Natasha в такой ситуации работает недостаточно корректно, выдавая в качестве результата неупорядоченный набор цифр. Однако, данную задачу можно решить посредством доработки правил, используя Yargy-парсер . Он представляет собой библиотеку для извлечения структурированной информации из текстов на русском языке. Правила описываются контекстно-свободными грамматиками и словарями ключевых слов. Парсер реализует алгоритм Earley parser. Библиотека написана на чистом Python, поддерживает Python 3.5+ и Pypy 3, использует Pymorphy2 для работы с морфологией. Перейдем к конкретному решению поставленной задачи по извлечению параметров сделки из аудиозаписи на русском языке. Тестовый образец аудиозаписи сделки выглядит следующим образом: добрый день представьтесь пожалуйста меня зовут иван иванов я представляю компанию ооо триал согласно соглашениюномер восемьсот пятьдесят семь пятого марта две тысячи двадцатого года дата сделки сегодня первое января две тысячи двадцать второго года начала действия сделки сегодня окончание действия сделки первого марта две тысячи двадцать пятого года на сумму один миллион рублей Устанавливаем библиотеку Yargy: Импортируем только те модули, которые необходимы для составления правил: Составляем функции для предобработки и поиска необходимого фрагмента, чтобы исключить ненужные параметры и увеличить скорость работы Yargy-парсера, так как он достаточно медленный, а тексты в аудиозаписях отличаются большим объемом. В функции find_section строка res.append(text[el.start()-10:el.end()+45]) устанавливает диапазон знаков, который был определен методом подбора, чтобы необходимый фрагмент параметра точно попал в него с небольшим запасом. Получившийся фрагмент: Прописываем правила для парсера. Метод fact является интерпретатором, он работает в связке с конструкцией intepretation(…), чтобы извлекать числа в нужную вершину дерева разбора. Конструкция, выполняющая интерпретацию извлекаемых параметров для дальнейшей обработки: Заводим словари, чтобы извлекать в поля fact значения num1, num2, num3, flag: Дополняем правила: Пояснение: Извлекаем элементы в нужной нам форме в определенное поле факта для дальнейшей обработки. Указываем имя переменной факта – Number и добавляем в нужное поле – num1. Уточнение: normalized()— это предикат, он позволит искать в словаре все формы слова, что избавляет нас от необходимости прописывания всех вариантов (в парсер встроено много готовых предикатов, есть возможность добавить свои). custom создает предикат из произвольной функции и может применяться вместе сnormalized(), тогда слово сначала ставится в нормальную форму, а затем к нему применяется функция DIGIT_NUM1.get для извлечение из словаря значения по ключу «один»: 1 ? извлечь «1». Добавление optional() во второй и последующих позициях делает этот параметр не обязательным. Это сделано для того чтобы номера из одного слова наподобие “восемьсот” тоже извлекались. MONTH_NAME.optional() добавлен в правило для извлечения названия месяца и представляет собой словарь, созданный газеттиром morph_pipeline (перед работой приводит слова к нормальной форме). Для его интерпретации создано поле факта flag. Позже напишем функцию extractor, в которой реализуем возможность не учитывать числа, если они относятся к дате. Этот прием позволит убрать часть ошибок при извлечении номера соглашения. Создаем объект парсера: У парсера есть метод findall, он ищет все строки, удовлетворяющие правилам. Собираем результат работы в список: Результат разбора на токены: Посмотрим на факты: Создаем функцию для извлечения параметров сделок: Результат: [‘857’]. Yargy-парсер предоставляет достаточно широкий функционал, чтобы справиться с нестандартными задачами. Он позволяет создавать расширенные правила, чтобы более эффективно извлекать необходимую информацию, минимизировав неточности получения данных из русскоязычных аудиозаписей. Источник: newtechaudit.ru Комментарии: |
|