Особенности создания синтаксического анализатора русского текста

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.

Прежде чем перейти к статье, хочу вам представить, экономическую онлайн игру Brave Knights, в которой вы можете играть и зарабатывать. Регистируйтесь, играйте и зарабатывайте!

В данной статье приводится краткое описание основных особенностей, проблем и сложностей, которые автору пришлось решать при реализации программы морфологической и синтаксической обработки текстов на русском языке.

Была поставлена задача создания программы морфологической и синтаксической обработки грамотно составленных текстов на русском языке с перспективой последующего объединения с семантическим анализатором. В связи с тем, что русский язык имеет некоторую логику построения, то виделось возможным обработать данную языковую логику классическим программным способом (без использования нейронной сети), при этом учитывались следующие соображения. Классическая программа обладает максимальной гибкостью при создании изощренных алгоритмов обработки; сами алгоритмы ориентируются на формализованные конструкции словосочетаний, обрабатывают не конкретные слова, а типы слов, что позволяет легко справляться с новыми словами, возникающими в языке достаточно часто. Данный подход видится целесообразным и при дальнейшем развитии программы – включение семантического анализатора в общий сквозной процесс обработки текстов.

В результате данная задача была в целом выполнена (пока без семантической обработки). Резюмируя пройденный этап, важно отметить ключевые технические задачи в рамках синтаксического разбора, которые требовали решения: выделение из всего множества единственно верной (наиболее вероятной) связи главного и зависимого слова плюс параллельный с этим выбор единственной морфологической формы слова среди множества возможных омонимов.

Выделение слов

Разбиение сплошного текста на составляющие слова и элементы (номер телефона, дата, интернет адрес и прочие) в общем случае не представляет трудной задачи. Алгоритмы усложнялись при выделении сложносоставных слов («диван-кровать»), окончаний цифровых числительных («2000-го», «в 90х») и сокращений («кап. гос-ва»). Более сложными были задачи по сборке фразеологизмов, состоящих из нескольких слов, которые сами по себе имеют самостоятельное значение («на первый взгляд»). Или отладка логики отличия точки в конце предложения от точки в составе сокращения («… и проч.»). При этом не дай бог за сокращением (которое само по себе может быть самостоятельным словом) следовать какому-либо имени / названию с большой буквы («гор. Москва»).

Связывание слов меж собой

Под связью слов подразумевается смысловая связь, их логическая иерархия и зависимость между собой. Например, как учили в школе в предложении «я съел кашу» главным (подлежащим) является «я», с которым связано сказуемое «съел», с которым, в свою очередь, связано дополнение «кашу».  При этом первоначальное выделение межсловных связей производится по совпадению их морфологических признаков (падеж, род, число). В общем случае взаимосвязь слов можно представить логической схемой / графом зависимостей с указанием условной подчиненности:

Помимо связей слов по очевидным морфологическим признакам (совпадение род-число-падеж) необходимо формирование связей по следующим дополнительным критериям:

  • переходный глагол – прямое дополнение («выпить чай»);

  • дополнение в творительном падеже к некоторым типам сказуемых («Он хотел быть военным, а стал гражданским учителем»);

  • существительное в родительном падеже с главным существительным («хозяин тайги», «Качество покрытия машин контролируют автоматы»);

  • когда несколько однородных подлежащих в единственном числе со сказуемым во множественном числе («Лес, поле и река расположены за моим участком»);

  • цепочка связанных инфинитивов («стараться увидеть»).

В реальных предложениях первоначальное количество связей слов между собой может в несколько раз превышать итоговое, то есть большая часть связей является некорректной. Значит надо отсечь лишнее на основе каких-то правил. Самое простое – учет знаков препинания и расположение предлога всегда перед главным словом. Хотя для редких предложений последнее условие с предлогом может не быть легким орешком, например «На недавно на пятой неделе открытой площадке играли дети.»

Следующие логические правила срабатывают не во всех случаях и зависят от смысла текста (то есть результата семантического разбора): учет общеупотребимого характера расположения главного слова относительно зависимого (например, обычно прилагательное ставится перед существительным, наречие – перед глаголом); выбор слова с наименьшим условным расстоянием между связанными словами («лампа светила ярко, как обычно, желтым светом» - наречие «ярко» первоначально связывается как с «светило», так и «желтым»); учет наличия некоторых частей речи между исследуемыми словами (например, глагол отсекает потенциальные зависимые слова от главного «каменщик сложил хороший камин» - хорошим может быть и каменщик, но в данном примере «хороший» относится к камину).

При наличии однородных слов должны формироваться параллельные связи между связанными словами («По вчера отремонтированному мосту и дороге лиса смогла пройти в курятник» - предлог «по» связывается и с «мосту» и с «дороге»).

Омонимы

Большая часть слов русского языка имеет омонимы, то есть разный смысл при одинаковом написании, например, «нагрев» (существительное / деепричастие), «при» (глагол / предлог), «поздней» (прилагательное / наречие). Эта особенность слов является основной причиной появления «лишних» связей меж словами и существенно усложняет логику выбора итогового морфологического варианта слова (часть речи, падеж и прочие). Например, фраза «нагрев печки» может быть как деепричастным оборотом («Нагрев печки, я увеличил температуру в доме»), так и дополнением («Нагрев печки, температуру в доме, конечно, надо поддерживать постоянно»). В предложении «Я увеличил, как всегда, нагрев печки, температуру в доме» слово «нагрев» по формальной логике вообще однозначно не идентифицируется по части речи - требуется подключать смысловой анализатор.

Омонимы с одинаковой частью речи, но с разным смыслом («кисть» - часть руки, или атрибут художника, или гроздь винограда) могут быть идентифицированы только с учетом анализа текущего контекста, формируемого семантическим анализатором.

Выделение сказуемых

Является ключевым этапом синтаксического разбора. В случае некорректного определения сказуемых весь последующий разбор предложения, очевидно, получается некорректным.

На этом этапе основными сложностями являются выделение для потенциального сказуемого (в качестве которых обычно выступают глаголы, краткие / сравнительные прилагательные / причастия) единственного варианта среди множества омонимов. Причем омонимы могут иметь как разные части речи («Корабль болтаем морем» - «Мы болтаем вдвоем»), так и одну («Я люблю есть мясо» - «Победа есть главная цель соревнований»). В предложении «Турист запасся едой, горячим чаем и свежей воблой» слова «горячим» и «свежей» имеют также и форму глагола, что может привести к неверному результату обработки предложения.

Особых хлопот доставляют побудительные глаголы, имеющие омонимы других частей речи («Мой дом красив» - «Мой дом шваброй!»). А вот предложение «Мой дом лучше» вообще не может быть обработано формальной логикой, только с учетом контекста всего сообщения.

Некоторые глаголы-инфинитивы имеют омонимы в виде обычного глагола («Расти, расти лапка!» - «Цветок перестал расти»), что побуждает анализировать окружающий текст на предмет наличия комплементарных слов, например, глаголов или кратких прилагательных, или наличия особых конструкций предложения («Победа есть наша цель»).

Обработка предикативов

Обработка предикативов производится на этапе выделения сказуемых. Если предикатив идентифицирован, то это облегчает задачу поиска подлежащих и сказуемых: наличие в предложении предикативов («Необходимо сегодня сделать уроки») исключает подлежащие (обычно существительные / местоимения в именительном падеже), тем самым упрощая определение, например, прямых дополнений («Всем следует выучить урок», «Крайне необходимо достроить дом, заселить туда людей, а также желательно посадить деревья»).

Часто предикативы имеют в виде омонимов краткие прилагательные / причастия, которые могут выступать в роли сказуемых при наличии реального подлежащего: «Продолжение работ бесперспективно», сравнить с предикативным предложением «Бесперспективно продолжать работы». Некоторые предикативы пересекаются с глаголами («жаль потерять», «нам стоит поторопиться»). Все это вносит дополнительные условия определения главных членов предложения  - подлежащее и сказуемое. 

Фразеологизмы

С одной стороны они существенно упрощают разбор, избавляя от лишних межсловных связей (например, окруженное запятыми вводное слово «самое удивительное»). Но бывают предложения, где каждое из слов, составляющих фразеологизм, имеет самостоятельное значение («самое удивительное явление»). Формальные признаки не всегда дают правильный ответ. Корректный вариант определяется смыслом фразы / предложения, то есть по-хорошему должна быть дополнительно подключена логика семантического разбора. И все стадии обработки текста (разбиение на слова – морфология – синтаксис - семантика) необходимо объединить в единую логику анализа.

Обороты и подчинительные предложения

Отдельная задача - выделение и связывание с главными словами подчинительной части предложения, причастных и деепричастных оборотов. При этом их комбинация и взаимозависимость может быть произвольной в том числе один внутри другого («Оборона для турок есть не тяжкая повинность, которую нужно выполнить, прежде чем начинать атаку»). На первый взгляд данные части предложения в грамотно составленном тексте выделяются запятыми, что обеспечивает легкость реализации. Однако непросто выделить причастный оборот, стоящий перед определяемым словом (не выделяется запятыми) и при этом определить его границы («Мы послушали ведущего семинар лектора и увидели несущую мышь сову»). Или когда деепричастие содержит омонимы других частей речи, и оба варианта имеют право на существование с точки зрения формальной логики (словосочетание «нагрев печки» в примерах выше). И в этом случае зачастую снова встает вопрос о необходимости понимания смысла окружающего текста для решения вышеуказанной дилеммы.

Отдельного внимания требуют конструкции предложений с нетипичной парой подлежащее – сказуемое типа «Волков бояться - в лес не ходить», «Он хороший моряк», «Победить – наша цель».

Однородные слова

Однородные слова разделяются запятыми / союзами и поэтому могут «маскироваться» под самостоятельные сочинительные предложения («Мать была спокойная, такая же бледная, как полгода назад»).

Однозначное выделение однородных слов осложняется наличием у них омонимов с иной частью речи, что требует существенного усложнения обрабатывающей логики: в предложениях «Автор упомянул, как обычно, богатея, бедняка и волшебника», «Я увеличил, как всегда, нагрев печки, температуру в доме» слова «богатея» и «нагрев» могут быть ассоциированы как с деепричастием, так и с существительным, что без анализа контекста приводит к неопределенности. Однако для первого примера можно применить вероятностный метод: при наличии однородных слов к существительному «богатея» и отсутствии у него зависимых слов, характерных для деепричастия (например, «давно богатея»), наиболее вероятно, что это существительное.

Определение падежей существительных

Многие существительные имеют омонимы в разных падежах, например слово «абстракции» имеет для разных форм именительный, родительный, дательный, винительный и предложный падеж. Для подлежащих и прямых дополнений выбор прост (именительный и винительный соответственно); предложный падеж всегда сопровождается предлогом, что несколько упрощает выбор. В остальных случаях требуется анализировать в том числе морфологические параметры сказуемых, деепричастий и иных членов предложения. Например, существительные в творительном падеже согласуются с возвратными глаголами («я помылся мылом»), страдательными причастиями («оставленный одиноким»), краткими прилагательными («я доволен погодой»). Дательный падеж согласуется с деепричастиями переходными («передавая знания ученикам»), непереходными невозвратными («подмигивая ему»). Подобная логика иногда не дает корректный результат; в этом случае необходим дополнительный анализ смысла и / или общеупотребимости словосочетаний. Например, в предложении «Музыканту нравилось выступать ведущим» слово "ведущим" должно быть в творит падеже, но может выступать в дательном в зависимости от смысла глагола «Музыканту нравилось аккомпанировать ведущим».

Существительные как определения к другим существительным

Речь идет о варианте типа «Яблоко на ветке казалось спелым». Здесь «на ветке» по смыслу является определением к слову «яблоко», а не обстоятельством к сказуемому «казалось». Выделение таких определений во многих случаях является нетривиальной задачей и существенно зависит от смысла сказанного. К примеру, для следующих двух предложений при внешней идентичности их конструкции смысл и межсловные связи должны быть различными: «я съел шоколад с орехами», «я съел шоколад с помощью ложки» - если «с орехами» является определением к шоколаду, то во втором предложении «с помощью ложки» является обстоятельством к сказуемому «съел».

Заключение

В русском языке присутствуют правила его построения, которые можно использовать при разработке программы морфологического и семантического анализа текста: совпадение род-число-падеж связанных по смыслу слов, выделение запятыми оборотов и частей предложений, расположение предлога перед главным словом, именительный падеж для подлежащих, винительный (иногда родительный) падеж для прямых дополнений и прочие правила. Однако как показал опыт разработки такого анализатора,  опора только на техническую логику не дает уверенный верный результат в 100% случаев. Требуется учет вероятности общеупотребимости слов меж собой,  анализ контекста и смысла, что обеспечивается дополнительными системами статистического сбора данных о сочетаемости слов и семантическим анализатором смысла. Для достижения наилучшего результата обработки текста необходимо не просто тесное взаимодействие систем дробления текста на слова, морфологического, синтаксического и семантического анализа, а объединение их в единую интеграционную систему с возможностью многократной обработки одного и того же текста с выбором итогового варианта по неким критериям.

В данной статье приводится краткое описание основных особенностей, проблем и сложностей, которые автору пришлось решать при реализации программы морфологической и синтаксической обработки текстов на русском языке.

Источник: https://habr.com/ru/post/567268/


Интересные статьи

Интересные статьи

В прошлой части мы поговорили о советах директору по разработке бизнес-процесса в Битрикс24, сейчас же я постараюсь дать советы руководителям отделов, поскольку по моему опыту почти всегд...
Пару дней назад мы подводили ИИ итоги 2020-го года в мире машинного обучения. 2021 год только начался, но мы определенно видим одну из важнейших работ в области ИИ текуще...
Многие компании в определенный момент приходят к тому, что ряд процессов в бизнесе нужно автоматизировать, чтобы не потерять свое место под солнцем и своих заказчиков. Поэтому все...
Коллеги из Европы попросили включить эти статьи в договор на предоставление облачных услуг. Когда вступил в силу закон о хранении персональных данных в России, к нам в облако начали массово ...
Прошло более двух лет с момента последней проверки кода проекта LLVM с помощью нашего анализатора PVS-Studio. Давайте убедимся, что анализатор PVS-Studio по-прежнему является лидирующим инструм...