Объектно-ориентированная модель морфологического анализатора
русскоязычного текста
Е.В. Ерискина, Д. С. Курушин, Д. В. Яруллин, Д.Ю. Корюкин Пермский национальный исследовательский политехнический университет, Пермь
Аннотация: В статье описан процесс создания стеммера для морфологического анализатора Pymystem. Приведено теоретическое обоснование выбора морфологического анализа как приоритетного направления для лингвистического анализа текста. Рассмотрены основные анализаторы и выявлены их достоинства и недостатки. Описан основной алгоритм разделения вложенных структур на структурированное дерево классов. Приведена функция поиска нужных характеристик частей речи с использованием регулярных выражений в языке программирования Python. Рассмотрены и описаны основные шаги алгоритма построения необходимой иерархии. Проведен анализ результатов работы и сделаны необходимые выводы. Описаны дальнейшие перспективы развития представленной разработки.
Ключевые слова: стеммер, морфологический анализатор, дерево классов, регулярное выражение, анализ текста, компьютерная лингвистика, лемма, токен, словообразование, иерархия классов.
В процессе решения задач лингвистического анализа текста возникает проблема построения отношений между понятиями[1]. Для того, что бы связь была логически верной и ориентированной прибегают к различным видам анализа текста. Приоритетным среди них является морфологический анализ. Именно он лежит в основе любого лингвистического разбора[2].
Морфологический анализ основывается на извлечении множества словоформ из тела текста. Для каждой словоформы существует лемма — начальная форма и лексема, которая несет в себе множество всех словоформ. Слово обладает словообразовательными и формообразовательными параметрами. Отличие их состоит в том, что словообразовательные параметры не изменяются при изменении слова по формам. Процесс изменения привязан к набору определённых грамматических параметров, таких как часть речи, род, число, падеж, залог и т.д.[3].
Существует два вида морфологических анализаторов. Самый большой недостаток всего многообразия таких инструментов — привязка к одному
большому словарю, что автоматически указывает на его «конечность». Более продвинутые анализаторы могут работать на основе вероятностных методов. Анализатор, который в составе синтаксического метода имеет грамматический, называют парсером и применяют, в основном, для разбора сайтов и интернет-ресурсов. Другой вид таких программ имеет свой собственный словарь и предназначен для нахождения основы слова для заданного исходного слова. Его общепринятое название — стеммер. Существует ряд инструментов, которые наиболее распространены в современной компьютерной лингвистике. Их сравнительный анализ приведен в таблице 1.
Таблица №1
Основные морфологические анализаторы [4]
Название Специализация Словарь Выходные данные
Rumor Русский язык 125 тыс. слов Слово и его словоформы
MyStem Русский язык Без словаря Слово, его морфологиче ские характеристики
Morphology Русский язык Английский язык Немецкий язык 115 тыс. слов Слово, его словоформы, корни и начальные формы
Ispell Русский язык Немецкий язык Английский язык и др. 137,2 тыс. слов Ориентированность на проверку орфографии; слово и его словоформы
Очевидно, что для решаемой в рамках разработки задачи наиболее подходящим анализатором является Mystem. Это единственный анализатор, который работает без встроенного словаря на основе эвристических методов. На этапе верификации модели предметной области [5] и формирования конечных отношений появилась сложность приведения полученных данных к виду структурированной иерархии классов [6]. Проблема возникает по
тому, что используемая библиотека для Python Pymystem выводит необходимые для морфологического алгоритма характеристики слов в неструктурированном виде.
Для того что бы организовать корректный поиск хотя бы одной характеристики в токенах необходимо для каждой характеристики использовать отдельное регулярное выражение. Это существенно увеличивает код, снижает читаемость алгоритма и увеличивает время его работы. Для того, чтобы выводить токены в более удобной для алгоритма морфологического поиска форме, решено создать стеммер для Pymystem, которая результатом морфологического анализа будет выводить иерархию классов. Всего стеммер содержит два исполняемых файла lingv.py и class.py.
Файл lingv.py представляет собой дерево классов. Здесь описаны все части речи русского языка и их характеристики в виде графа (рис.1).
Рис. 1 - Дерево классов обёртки для Mystem
Ниже приведен код основной функции def_init_(листинг 1). Здесь происходит разбор каждого выводимого программой Mystem токена на отдельные смысловые части. Затем происходит отсечение «не нужных» частей, в данном случае, не содержащих наименования и характеристики частей речи. В завершении, с помощью регулярных выражений задаётся формат вывода нужных значений на экран. Таким образом, получается упорядоченная структура, из которой путем простых манипуляций можно извлечь значение любой характеристики. Далее в файле задаётся иерархия классов, представленная на рисунке 1. Определение принадлежности к экземпляру класса реализовано также с помощью регулярных выражений [7].
def init (self, analysis): try:
self.lemma = analysis[0]['lex'] self.analysis = analysis[0]['gr']
self.pos = set(re.findall(r"A([A-Z]+).+", self.analysis)) except (IndexError, KeyError): print(analysis) raise KeyError
Листинг 1 - Код конструктора класса
Файл class.py предназначен для конфигурации вывода результата обработки текста. Главная особенность здесь заключается в том, что если программно определить принадлежность к какому-либо классу не получается, на экране не будет выводиться значение None. Это позволит избежать избыточности (листинг 2).
hb = HierarchyBuilder()
for a in my.analyze(string): try:
x = hb.build(a['analysis']) if x is not None:
print(x, x.pos)
if isinstance(x, Существительное): elif isinstance(x, Глагол): elif isinstance(x, Прилагательное): elif isinstance(x, Числительное): elif isinstance(x, Наречие): elif isinstance(x, Местоимение): elif isinstance(x, Союз): elif isinstance(x, Междометие): elif isinstance(x, Предлог): elif isinstance(x, Частица): except KeyError: pass
Листинг 2 - Псевдокод функции вывода дерева классов
Для сравнения результатов работы алгоритма приведен пример работы РушуБ1еш без использования обёртки и с её подключением. Для этого использован отрывок одного и того же текста. Для упрощения восприятия результаты занесены в таблицу 2.
Таблица № 2
Сравнение результатов работы алгоритма
Вывод Pymystem с
Исходный текст Вывод Pymystem без обёртки
оберткой
Карл у Клары украл {'analysis':[{'lex':'карл', карл {'S {'им,'} {'муж'}
' gr ' : 'S,имя,муж,од= им,ед'}],
кораллы. 'text': 'Карл'}, {'text': ' '}, {'ед'} { у {'PR'} 'од' }
{'analysis':[{'lex': 'у', клара {' S'}
'gr': 'PR='}], 'text': 'у'}, {'им,'} {'жен'}
{'text': ' '}, {' мн '} { 'од' }
{'analysis': [{'lex': 'клара', украсть {'V' }
'gr': {'прош'} { изъяв'}
'S,имя,жен,од=(род,ед|им,мн)'}] {'сов '} {' муж }
, коралл { 'S'}
'text': 'Клары'}, {'им,'} {'муж'}
{'text': ' '}, {' мн '} { 'од' }
{'analysis': [{'lex':
'украсть', 'gr' :
'V,сов,пе=прош,ед,изъяЕ ,муж'}],
'text': 'украл'},
{'text': ' '},
{'analysis': [{'lex':
'коралл', 'gr' :
'S,муж,неод=(вин,мн|им, мн)'}],
'text': 'кораллы'}
Заметим, что в таблице представлено строковое представление данных,
выводимых в таком виде для удобства пользователя. В памяти же эта структура хранится в виде экземпляров классов.
Работа, представленная в статье, проделана в рамках исследования способов автоматического построения модели предметной области[8]. На этапе включения в алгоритм разбора текста морфологических характеристик, стало понятно, что их извлечение из результатов работы стандартного РушуБ1еш представляется довольно сложным процессом. С помощью созданного дерева классов этот процесс укладывается в одну строку
программного кода. В дальнейшем, обёртка будет применяться для включения алгоритма поиска морфологических характеристик в текстовый анализатор, работа которого основывается на построении эталонного денотатного графа[9,10].
Литература
1. Cristina Cachero, Santiago Meliá, Jesús M. Hermida Impact of model notations on the productivity of domain modelling: an empirical study // Information and Software Technology. 2018. pp. 26-33.
2. Боярский К.К. Введение в компьютерную лингвистику. СПб.: ИТМО, 2013. С. 30-34.
3. Большакова Е.И., Воронцов К.В., Ефремова Н.Э., Клышинский Э.С., Лукашевич Н.В., Сапин А.С. Автоматическая обработка текстов на естественном языке и анализ данных. М.: НИУ ВШЭ, 2017. С. 48-56.
4. Сравнение и создание морфологических анализаторов в NLTK // Habr URL: habr.com/post/340404/ (дата обращения: 24.11.2018).
5. Бурякова Н.А., Чернов А.В. Классификация частично формализованных и формальных моделей и методов верификации программного обеспечения // Инженерный вестник Дона, 2010, №4. URL: ivdon.ru/magazine/archive/n4y2010/259
6. Смирнов И.В., Шелманов А.О. Семантико-синтаксический анализ естественных языков Часть I. Обзор методов синтаксического и семантического анализа текстов // Искусственный интеллект и принятие решений. 2013. С. 41-51.
7. Репозиторий relation_extractor // GitHub URL: github.com/eriskina/relation_extractor (дата обращения: 02.12.2018)
8. Elena Dolgova, E. V. Eriskina, Rustam Faizrakhmanov, E. A. Kasyanova, D. S. Kurushin, N. M. Nesterova, and O. V. Soboleva Automatic Test Generation
on the Basis of a Semantic Network // Digital Science. Budva: Springer, 2018. pp. 159-165.
9. Герте Н.А., Курушин Д.С., Нестерова Н.М., Соболева О.В. Экспериментальные исследования денотативной модели понимания в приложениях автоматического реферирования текста // Инженерный вестник Дона, 2015, №4. URL: ivdon.ru/ru/magazine/archive/n4y2015/3311
10. Новиков А.И., Нестерова Н.М. Реферативный перевод научно-технических текстов. М.: Академия наук СССР, Институт языкознания, 1991. С. 35-42.
References
1. Cristina Cachero, Santiago Meliá, Jesús M. Hermida Impact of model notations on the productivity of domain modelling: an empirical study Information and Software Technology. 2018. pp. 26-33.
2. Boyarskij K.K. Vvedenie v kompyuternuyu lingvistiku. [Introduction to computational linguistics] SPb. ITMO, 2013. pp. 30-34.
3. Bolshakova E.I., Voronczov K.V., Efremova N.E\ Kly'shinskij E\S., Lukashevich N.V., Sapin A.S. Avtomaticheskaya obrabotka tekstov na estestvennom yazyke i analiz dannyx. [Automatic processing of natural language texts and data analysis]. M. NIUVShE\ 2017. pp. 48-56.
4. Sravnenie i sozdanie morfologicheskix analizatorov v NLTK. [Comparison and creation of morphological analyzers in the NLTK]. Habr URL: habr.com/post/340404/
5. Buryakova N.A., Chernov A.V. Inzenernyj vestnik Dona (Rus), 2010, №4. URL: ivdon.ru/magazine/archive/n4y2010/259
6. Smirnov I.V., Shelmanov A.O. Iskusstvenny'j intellekt i prinyatie reshenij. 2013. pp. 41-51.
7. Repozitiry relation_extractor GitHub URL: github.com /eriskina /relation_ extractor.
8. Elena Dolgova, E. V. Eriskina, Rustam Faizrakhmanov, E. A. Kasyanova, D. S. Kurushin, N. M. Nesterova, and O. V. Soboleva. Digital Science. Budva: Springer, 2018. pp. 159-165.
9. Gerte N.A., Kurushin D.S., Nesterova N.M., Soboleva O.V. Inzenernyj vestnik Dona (Rus), 2015. №4, URL: ivdon.ru/ru/magazine/archive/n4y2015/3311
10. Novikov A.I., Nesterova N.M. Referativnyj perevod nauchno-texnicheskix tekstov. [Abstract translation of scientific and technical texts] M. Akademiya nauk SSSR, Institut yazykoznaniya, 1991. pp. 35-42.