(Части 1 , 2 , 3 ) В части 4 мы поговорим о проверке грамматики, выходящей за рамки токенизированных предложений.
Как уже говорилось, разбиение предложения на токены и POS-разметка уже позволяет создать простой инструмент проверки грамматической правильности текста.
По крайней мере, так работает плагин LanguageTool для Open Office. Очевидно, что на уровне помеченных токенов можно отловить множество ошибок.
Однако очевидно также, что не менее обширные классы ошибок остаются за пределами возможностей нашего модуля.
Возьмем, к примеру, такую простую вещь, как согласие между подлежащим и сказуемым: «дама любила собак», «дама любила собак», «дама любила собак»… как создать образец правила « предикат должен иметь тот же род, что и подлежащееЭ» Даже для английского языка с более или менее четким порядком слов это затруднительно; о русском вообще говорить не приходится.
Авторы LanguageTool пытаются сформулировать отдельные грамматические модели.
На практике получаются достаточно сложные конструкции, работающие в ограниченном числе случаев.
Например:
* Этот исходный код был выделен значком Выделение исходного кода .«Предложение начинается с уточняющего слова, затем существительного во множественном числе, а затем глагола в третьем лице единственного числа».
Под это определение подпадают такие фрагменты, как «Коты пьют молоко».
Очевидно, глагол должен стоять в форме первого лица (пить).
Как видите, это правило работает только в начале предложения и только для четко определенной ситуации.
Авторы, вероятно, перестраховываются, чтобы избежать ложных срабатываний (понятно, что не каждая пара близко расположенных слов «существительное + глагол» является связкой формы «подлежащее + сказуемое»).
Я вижу более надежный вариант с использованием синтаксического анализатора естественного языка.
О синтаксическом анализе Синтаксический анализатор — это модуль, который строит дерево связей между словами для входного предложения.
Пример такого дерева для фразы «Я люблю больших собак» был приведен во второй части заметок:
Существуют разные представления о том, как именно должны быть связаны слова.
Вместо прямых ребер «слово-слово» можно, например, выделить составные члены предложения:
Этот подход был предложен Хомским и до сих пор популярен среди англоязычных исследователей.
Однако сейчас появляется все больше сторонников словесных связей (связей зависимости), особенно в Европе, поскольку считается, что деревья Хомского не очень хорошо подходят для языков с более рыхлым порядком слов (а существуют таких языков в Европе много).
Возможно, у меня была первая проблема с парсером.
Трудно найти хороший парсер (кстати, разделитель предложений и POS-тегер тоже, но их можно быстро написать самостоятельно, благо есть вспомогательные библиотеки).
У нас еще есть практический проект, и нам бы хотелось, чтобы этот модуль был (а) на C/C++ (так как весь наш проект на нем); (б) было бесплатно или по разумной цене; (c) поддерживаемые ссылки зависимости; (г) был адаптирован к новым языкам.
Я потратил много времени на поиск, перепробовал много парсеров.
Тут полная путаница - кто-то не держится за парсер (LGPL), кто-то хочет нереальных денег (мне приводили цены в 100 и даже 300 тысяч евро - по-моему, это за гранью добра и зла), а кто-то - тогда вам нужен процент от продаж.
Было бы хорошо, если бы парсер был основным модулем в системе, но это не так, это всего лишь часть модуля проверки грамматики! Несколько месяцев назад я решил остановиться на проекте МальтПарсер .
Он хорош во всем (даже поддерживает так называемые непроективные связи, что приятно), кроме выбранного авторами языка — Java. Я уже был готов стиснуть зубы и переписать код на C++ (а там очень много кода.
), но буквально недавно появился новый проект под названием ЛДПар .
Не знаю, как там с качеством анализа, но по остальным критериям подходит. Китайцы спасут мир! Ну или хотя бы наш проект :) Честно говоря, я пока не готов приводить здесь конкретные примеры анализируемых с помощью парсера грамматических правил — мы только начали экспериментировать с этим модулем.
Но самые простые идеи уже ясны.
Например, как проверить совместимость подлежащего со сказуемым (для английского языка): Берем корень дерева, проверяем, что корень — это глагол — тогда это сказуемое.
Ищем первое связанное с ним существительное или местоимение – это и есть подлежащее.
Проверяем совместимость по лицу и номеру.
Среди очевидных потенциальных проблем могу назвать непонятное качество разбора неверных предложений.
То есть сразу неясно, будет ли парсер рассматривать слова I и должно ли быть подлежащее и сказуемое в предложении «У меня есть собаки».
Необходимо провести исследования по этой теме, но их пока нет. В комментариях как-то упоминался корпус с ошибками (автор Дж.
Фостер) — поэтому некоторые парсеры я лично тестировал на нем.
Большинство из них корректно разбирали даже фразы с ошибками, но дополнительное изучение вопроса точно не помешало бы.
Итак, на сегодня я закончил, и в следующей части мы еще немного поговорим о трибанках.
Теги: #искусственный интеллект #Обработка естественного языка #nlp #обработка слов #обработка слов #компьютерная лингвистика #проверка грамматики #проверка орфографии
-
Маршрутизация И Коммутация
19 Oct, 24 -
Внедрение Облачной Erp-Системы Client360
19 Oct, 24 -
Алгоритм Соловея-Штрассена
19 Oct, 24 -
Скотт Макнили Попал В Книги
19 Oct, 24