Автор: Сторожук Н.О., Коломойцева И.А.
Источник: Материалы V Международной научно-технической конференции «Современные информационные технологии в образовании и научных исследованиях» (СИТОНИ-2017). – Донецк: ДонНТУ, 2017. – С. 191-195.
Сторожук Н.О., Коломойцева И.А. - Анализ алгоритмов лексической и морфологической обработки текстов c целью определения жанровой принадлежности В работе представлен обзор существующих алгоритмов лексического анализа и стемминга, используемых в поисковых системах и анализаторах текстов. Сделаны выводы о возможности использования комбинации определенных методов в системе, определяющей жанр исследуемого текста.
Основной проблемой анализа текстов является большое количество слов в документе и его неоднородность. Автоматизированный анализ текста в исходном виде – трудоёмкий и длительный процесс, учитывая то, что не все слова несут значимую для пользователя информацию. Кроме того, в силу гибкости естественных языков формально различные слова (синонимы и т.п.) на самом деле означают одинаковые понятия, большое число словоформ одного и того же слова усложняют поиск и систематизацию информации. Следовательно, удаление неинформативных слов, а также приведение слов к нормальной форме значительно сокращают время анализа текстов. Устранение описанных проблем для заданной предметной области выполняется на этапе предварительной обработки текста, который описан в данной статье.
Целью данной работы является формирование правил лексического анализа для планируемого программного проекта, анализ различных подходов морфологического анализа текстов, в особенности алгоритмов стемминга для текстов на русском языке.
Автоматическая обработка текста – это преобразование текста на искусственном или естественном языке с помощью ЭВМ. В настоящее время элементы обработки текста применяются повсеместно: переводчики, текстовые редакторы, программы для антиплагиата и автореферирования, анализаторы новостей, оптимизаторы программного кода и т.д. Следовательно, задачи эффективной автоматизированной обработки текстов остаются актуальными, стабильное увеличение объёма информации требует постоянного совершенствования алгоритмов и подходов.
Для определения жанровой принадлежности текста в планируемой программной системе будет использован следующий базовый алгоритм:
В данной работе будут рассмотрены первые два этапа анализа текста, как основополагающие методы, используемые для автоматизированного анализа информации независимо от конкретной цели исследования. В процессе первых двух этапов следует применить элементы статистического анализа для дальнейшей обработки для получения более точного результата. Алгоритмы для получения целевой информации носят специализированный характер, в зависимости от жанра, объёма исходного материала и преследуемых исследователем целей.
Программный модуль, отвечающий за лексический анализ, запускается в первую очередь при автоматической обработке текста и готовит данные для последующих этапов анализа. Входными данными для модуля сегментации является последовательность знаков (букв, символов, пробелов, цифр, и других знаков, предусмотренных кодировкой). Следует отметить, что входной текст должен быть грамотно изложенным на русском языке и представлен в файле формата, доступного для парсинга.
Основная задача лексического анализа - распознать лексические единицы текста. Базовым алгоритмом является лексическая декомпозиция, которая предусматривает разбивку текста на токены. В данном контексте токенами могут быть это слова, словоформы, морфемы, словосочетания и знаки препинания, даты, номера телефонов и пр.
Для проведения такой сегментации, повышения её однородности и качества, были разработаны базовые правила, которые должны быть предусмотрены алгоритмом. В процессе программной реализации и дальнейшего анализа полученных токенов правила будут существенно дополнены и детализованы.
Лексическая сегментация имеет фундаментальное значение для проведения автоматического анализа текста, поскольку лежит в основе большинства других алгоритмов. Следующим шагом обработки исходного произведения является стемминг, на вход которого подается готовый список токенов.
Стемминг — это процесс нахождения основы слова для заданного исходного слова. Основа слова необязательно совпадает с морфологическим корнем слова. Стемминг применяется в поисковых системах для расширения поискового запроса, ускорения времени обработки запроса, является частью процесса нормализации текстаx [1].
Стеммеры принято классифицировать на алгоритмические и словарные. Словарные стеммеры функционируют на основе словарей основ слов. В процессе морфологического анализа такой стеммер выполняет сопоставление основ слов во входном тексте и в соответствующем словаре, а анализ начинается с начала слова. Используя словарный стеммер, повышается точность поиска, однако увеличивается время работы алгоритма и объём памяти, занимаемой словарями основ.
Алгоритмические стеммеры работают на основе файлов данных, которые содержат списки аффиксов и флексий. В процессе анализа программа выполняет сравнение суффиксов и окончаний слов входного текста со списком из файла, анализ происходит посимвольно, начиная с конца слова. Такие стеммеры обеспечивают большую полноту поиска, хотя и допускают допуская больше ошибок, которые проявляются в недостаточном или избыточном стеммировании. Избыточное стеммирование проявляется, если по одной основе отождествляются слова с разной семантикой; при недостаточном стеммировании по одной основе не отождествляются слова с одинаковой семантикой.
Например, ланкастерский стеммер для английского языка выделяет bet как основу better, a childr - как основу children. В первом случае имеет место избыточное стеммирование, поскольку по основе bet прилагательное better отождествляется с глаголом bet и его производными (bets, betting), значение которых не имеет ничего общего со значением прилагательного. Во втором случае имеет место недостаточное стеммирование, так как по основе childr нельзя отождествить формы множественного (children) и единственного числа Сchild) одной лексемы [2].
Несмотря на указанные недостатки, на практике более распространены алгоритмические стеммеры. Это можно объяснить тем, что количество суффиксов и флексий в каждом языке достаточно ограничено и их изменения на уровне морфологической структуры происходят намного медленнее, чем на лексическом уровне. Следовательно, словари основ необходимо обновлять чаще, чем словари аффиксов. Применение словарных стеммеров эффективно в системах, анализирующих достаточно узкие предметные области.
Существуют различные виды реализации идеи стемминга в алгоритмах, которые различаются по производительности, точности, а также путями преодоления конкретных проблем стемминга. На рисунке 1 представлена классификация существующих алгоримов стемминга.
Лемматизация – это получение начальной формы слова – леммы [3]. Классические алгоритмы лемматизации, кроме изменения формы слова, предполагают его дополнительных анализ – определение части речи или других показателей, в зависимости от конкретной задачи.
Алгоритм поиска предполагает поиск флективной формы в таблице. Преимущество этого подхода – простота и скорость, однако все флективные формы должны быть явно перечислены в таблице: новые или незнакомые слова не будут найдены, даже если они являются правильными.
Алгоритмы усечения окончаний не используют справочную таблицу, которая состоит из флективных форм и отношений корня и формы. Такие алгоритмы гораздо эффективнее, однако для разработки такого алгоритма программисту необходимо хорошо разбираться в лингвистике и правильно установить правила усечения. Одним из улучшений алгоритма является подстановка суффиксов и окончаний, однако при некорректной постановке правил такой алгоритм может приобрести рекурсивный характер. [4]
Аффикс – стеммеры отсекают префиксы и суффиксы для получения нормальной формы слова. Данному подходу может следовать алгоритм усечения окончаний, который обрабатывает не только аффиксы, но ещё и окончания [5].
Стохастические алгоритмы связаны с вероятностным определением корневой формы слова. Для таких алгоритмов строится вероятностная модель и необходимо обучение с помощью таблицы соответствия корневых и флективных форм. Стемминг выполняется посредством ввода измененных форм и генерацией корневой формы в соответствии с внутренним набором правил модели. Решения, связанные с применением наиболее соответствующего правила, последовательности правил или выбором основы слова, применяются на основании того, что результирующее верное слово будет иметь самую высокую вероятность.
Алгоритмы сопоставления используют базу данных основ слов. С целью выявления правильной основы слова, алгоритм сопоставляет слово с основами из базы, применяя различные ограничения: например, длину искомой основы [6].
Некоторые алгоритмы стемминга используют анализ N-грамм, для того чтобы выбрать подходящую основу для слова. При использовании этого подхода для моделирования языка предполагается, что появление каждого слова зависит только от предыдущих слов [7].
Основная идея стемминга на основе корпуса текстов состоит в создании классов эквивалентности для слов классических стеммеров, а затем «разбить» некоторые слова, объединенные на основе их встречаемости в корпусе [8]. Применение такого подхода помогает предотвратить конфликтные ситуации алгоритма Портера, например, как «policy/police», так как шанс встретить данные слова вместе является довольно низким.
Комбинирование описанных подходов формирует алгоритм, который относится к гибридным подходам.
В русском языке преобладает словоформирование на основе аффиксов, сочетающих сразу несколько грамматических значений. Например, добрый — окончание «ый» указывает одновременно на единственное число, мужской род и именительный падеж, поэтому данный язык способствует использованию алгоритмов стемминга. Однако, в силу сложной морфологической изменяемости слов для минимизации ошибок следует использовать дополнительные средства [9], например, лемматизацию. Ниже рассмотрены наиболее популярные реализации стеммеров, основывающиеся на различных принципах и допускающие обработку несуществующих слов для русского языка.
Основная идея стеммера Портера заключается в том, что существует ограниченное количество словообразующих суффиксов, и стемминг слова происходит без использования каких-либо баз основ: только множество существующих суффиксов и правила, заданные вручную. Алгоритм состоит из пяти шагов, на каждом из которых отсекается словообразующий суффикс и оставшаяся часть проверяется на соответствие правилам [10]. Например, для русских слов основа должна содержать не менее одной гласной. Если полученное слово удовлетворяет правилам, происходит переход на следующий шаг, иначе — алгоритм выбирает другой суффикс для отсечения. На первом шаге отсекается максимальный формообразующий суффикс, на втором — буква «и», на третьем — словообразующий суффикс, на четвертом — суффиксы превосходных форм, «ь» и одна из двух «н». Недостатком является то, что часто обрезается больше необходимого, что затрудняет получение правильной основы слова. Например «кровать-крова» при этом реально неизменяемая часть — «кроват», но стеммер выбирает для удаления наиболее длинную морфему [11].
Алгоритм Stemka основан на вероятностной модели: слова из обучающего текста разбираются анализатором на пары «последние две буквы основы» + «суффикс». При этом, если такая пара уже есть в модели – её вес увеличивается. Полученный массив данных ранжируется по убыванию веса и маловероятные модели отсекаются. Результат — набор потенциальных окончаний с условиями на предшествующие символы — инвертируется для удобства сканирования словоформ «справа налево» и представляется в виде таблицы переходов конечного автомата [12].
Алгоритм MyStem является собственностью компании Яндекс. На первом шаге при помощи дерева суффиксов во входном слове определяются возможные границы между основой и суффиксом, после чего для каждой потенциальной основы начиная с самой длинной бинарным поиском по дереву основ проверяется её наличие в словаре либо нахождение наиболее близких к ней основ мерой близости является длина общего «хвоста». Если слово словарное — алгоритм заканчивает работу, иначе — переходит к следующему разбиению [13].
В статье представлен обзор существующих подходов и алгоритмов, применяемых для парсинга текста для удобства его последующего анализа. Для разработки собственной системы будет использован лексический анализ, согласно перечисленным правилам и усовершенствованный алгоритм Портера для поиска основ слова.