Difference between revisions of "Курсы машинного перевода для языков России/Раздел 3"

From Apertium
Jump to navigation Jump to search
Line 60: Line 60:
===Разрешение неоднозначности при помощи правил===
===Разрешение неоднозначности при помощи правил===


Существует много способов для написания правил по устранению омонимии, самое важное - это суметь объяснить правила в рамках того контекста, которые создает омонимию but the most important thing is to be able to express the rule in terms of the context that provides disambiguation. Например, так как отдельные слова очень часто могут иметь омонимию, такая омонимия часто снимается контекстом. Возьмем фразу на русском языке '' « нашим старым преподавателям »'', так как оба слова ''нашим'' и ''старым'' имеют достаточно омонимов (по три варианта (анализа) на каждое слово three analyses for both), главное слово фразы the head of the phrase ''преподавателям'', у которого только один анализ, помогает снять омонимию с двух других слов which only has one analysis, disambiguates them.
Существует много способов для написания правил для разрешения неоднозначности, самое важное - это суметь объяснить правила в рамках того контекста, который создает омонимию. Например, так как отдельные слова очень часто могут быть омонимами, такая омонимия снимается контекстом. Возьмем фразу на русском языке '' « нашим старым преподавателям »'', так как оба слова ''нашим'' и ''старым'' имеют достаточно омонимов (по три варианта на каждое слово), главное слово фразы ''преподавателям'', у которого только один вариант после анализа, помогает снять омонимию с двух других слов.


* наш{{tag|det}}{{tag|pos}}{{tag|m}}{{tag|sg}}{{tag|ins}} старый{{tag|adj}}{{tag|m}}{{tag|sg}}{{tag|ins}} преподаватель{{tag|n}}{{tag|m}}{{tag|aa}}{{tag|pl}}{{tag|dat}}
* наш{{tag|det}}{{tag|pos}}{{tag|m}}{{tag|sg}}{{tag|ins}} старый{{tag|adj}}{{tag|m}}{{tag|sg}}{{tag|ins}} преподаватель{{tag|n}}{{tag|m}}{{tag|aa}}{{tag|pl}}{{tag|dat}}
Line 70: Line 70:
* ...
* ...


Таким образом мы можем придти к выводу, что необходимо написать правило, которое исключало бы варианты (анализы), которые не согласовываются с главным словом We could thus conceive of writing a rule which removes the analyses that do not agree with the head of the phrase.
Таким образом мы приходим к выводу, что необходимо написать правило, которое исключало бы варианты анализа, которые не согласовываются с главным словом.


====Грамматика ограничений====
====Грамматика ограничений====


Один из способов написания правил - это использование формулы formalism которые называются грамматика ограничений called constraint grammar. Правила грамматики ограничений состоят из двух частей: действия по образцу, и по контексту an operation on a pattern, and a context. Примеры по первой части:
Один из способов написания правил - это использование формальной системы, которая называются грамматикой ограничений (constraint grammar). Правила грамматики ограничений состоят из двух частей: действия по шаблону (образцу), и по контексту. Примеры по первой части:


* {{sc|select}}: Given a context, remove all the readings apart from the one(s) matched by the pattern.Учитывая контекст, удалите все варианты, кроме одного (одних), соответствующих образцу шаблону.
* {{sc|select}}: Given a context, remove all the readings apart from the one(s) matched by the pattern. Учитывая контекст, удалите все варианты, кроме одного (одних), соответствующего шаблону.
* {{sc|remove}}: Учитывая контекст, удалите вариант (ы), соответствующие образцу Given a context, remove the reading(s) that match the pattern.
* {{sc|remove}}: Учитывая контекст, удалите вариант (ы), соответствующий шаблону.


Контекстом может служить любая комбинация слов или tags в данном предложении. Чтобы представить что может служить контекстом, давайте посмотрим на несколько существующих правил избавления от омонимии. Мы будем пользоваться фразами на русском языке:
Контекстом может служить любая комбинация слов или тэгов в данном предложении. Чтобы представить что может служить контекстом, давайте посмотрим на несколько существующих правил снятия неоднозначности. Мы будем пользоваться фразами на русском языке:


<center>« ''Услугами детских садов пользуются 135 тысяч работающих матерей.'' »</center>
<center>« ''Услугами детских садов пользуются 135 тысяч работающих матерей.'' »</center>
Line 89: Line 89:
* <code>SELECT Gen IF (0C A) (*1C GEN BARRIER NPNHA);</code>
* <code>SELECT Gen IF (0C A) (*1C GEN BARRIER NPNHA);</code>
** <code>SELECT Gen</code>: Select genitive, <code>IF</code>
** <code>SELECT Gen</code>: Select genitive, <code>IF</code>
** <code>(0C A)</code>: The current word ''only'' has adjective readings.
** <code>(0C A)</code>: Слово ''только'' имеет трактовки прилагательного has adjective readings.
** <code>(*1C GEN BARRIER NPNHA)</code>: После искомого слова идет слово, которое только в родительном падеже. Продолжаем искать слова после текущего слова, пока не найдем слово, которое не может изменять существительное и не является наречием After the current word there is a word which is only in the genitive case. Keep searching the words after the current word until a word which is any word except a word which can modify a noun, or an adverb.
** <code>(*1C GEN BARRIER NPNHA)</code>: После данного слова идет слово, которое может быть только в родительном падеже. Продолжаем искать слова после данного слова, пока не найдем слово, которое может быть любым словом, которое не может изменять существительное и не является наречием.


;Омонимия #2
;Омонимия #2


Слово ''работающих'' имеет омонимию во множественном числе родительного падежа, множественном числе предложного падежа и множественного числа винительного падежа. Нам нужно выбрать вариант множественного числа родительного падежа.
Слово ''работающих'' имеет омонимию во множественном числе родительного падежа, множественном числе предложного падежа и множественном числе винительного падежа. Нам нужно выбрать вариант множественного числа родительного падежа.


* <code>SELECT Gen IF (0C ACC-GEN-PRP) (*-1C Num LINK 1C Gen BARRIER NOTGEN);</code>
* <code>SELECT Gen IF (0C ACC-GEN-PRP) (*-1C Num LINK 1C Gen BARRIER NOTGEN);</code>
** <code>SELECT Gen</code>: Select genitive, <code>IF</code>
** <code>SELECT Gen</code>: Выберите родительный падеж, <code>IF</code>
*** <code>(0C ACC-GEN-PRP)</code>: The current word can only be accusative, genitive or locative
*** <code>(0C ACC-GEN-PRP)</code>: Данное словом может стоять только в винительном, родительном или местном падежах
*** <code>(*-1C Num LINK 1C Gen BARRIER NOTGEN)</code>: Перед текущим словом идет слово, которое может быть только числительным, после которого может быть только слово в родительном падеже, продолжаем искать к началу предложения, пока не найдем слово, которое не содержит родительный тега.
*** <code>(*-1C Num LINK 1C Gen BARRIER NOTGEN)</code>: Перед текущим словом идет слово, которое может быть только числительным, после которого может быть только слово в родительном падеже, продолжаем искать к началу предложения, пока не найдем слово, которое не содержит тэга родительного падежа.
hat does not contain the genitive tag.


;Омонимия #3
;Омонимия #3
Line 107: Line 106:


* <code>REMOVE Acc IF (0C ACC-OR-GEN) (*-1C Num LINK 1C Gen BARRIER NOTGEN);</code>
* <code>REMOVE Acc IF (0C ACC-OR-GEN) (*-1C Num LINK 1C Gen BARRIER NOTGEN);</code>
** <code>REMOVE Acc</code>: Remove accusative, <code>IF</code>
** <code>REMOVE Acc</code>: Уберите винительный падеж, <code>IF</code>
*** <code>(0C ACC-OR-GEN)</code>: The current word can only be accusative or genitive
*** <code>(0C ACC-OR-GEN)</code>: Данное слово может стоять только в винительном или родительном падежах
*** <code>(*-1C Num LINK 1C Gen BARRIER NOTGEN)</code>: У нас есть предыдущее числительное, у которого есть слово, которое после него может стоять только в родительном падеже (например,''''тысяч), и мы останавливаем поиск, когда находим слово, которое не стоит в родительном падеже There is a previous numeral which has a word which can only be genitive after it (e.g. ''тысяч'') and we stop searching when we find a word that is not in genitive (<code>BARRIER NOTGEN</code>)
*** <code>(*-1C Num LINK 1C Gen BARRIER NOTGEN)</code>: У нас есть предыдущее числительное, у которого есть слово, которое после него может стоять только в родительном падеже (например,''''тысяч), и мы останавливаем поиск, когда находим слово, которое не стоит в родительном падеже (<code>BARRIER NOTGEN</code>)


==Практическое задание==
==Практическое задание==


В данной практической части мы рассмотрим работу маркировщика (tagger), раскроем несколько tagging errors а наконец предложим несколько правил снятия омонимии для решения проблемы tagging errors.
В данной практической части мы рассмотрим работу маркировщика (tagger), раскроем несколько tagging errors и наконец предложим несколько правил снятия омонимии для решения проблемы tagging errors.


===Работа с морфологическим анализатором===
===Работа с морфологическим анализатором===


Давайте попытаемся провести морфологический анализ на фразе, которая выглядит довольно просто:
Давайте попытаемся провести морфологический анализ фразы, которая выглядит довольно просто:


<pre>
<pre>
Line 130: Line 129:
</pre>
</pre>


Фраза, которая выглядела довольно легко и понятно, на самом деле содержит множественную омонимию.
Фраза, которая выглядела довольно легко и понятно, на самом деле содержит множественную неоднозначность.


===Поиск ошибок===
===Поиск ошибок===
Line 150: Line 149:
* После предлога "по", падеж слова "удалённость" должен быть дательным, а не родительным.
* После предлога "по", падеж слова "удалённость" должен быть дательным, а не родительным.


Со остальных слов омонимия была снята правильно.
С остальных слов омонимия была снята правильно.


===Разработка правил===
===Разработка правил===
Line 158: Line 157:
* Набор ситуаций, в которых это правило будет применяться. Например, это правило будет применимо только к данному слову, к данному слову и к одному или двум словам, окружающим данное слово, применимо к придаточному предложению или ко всему предложению в целом?
* Набор ситуаций, в которых это правило будет применяться. Например, это правило будет применимо только к данному слову, к данному слову и к одному или двум словам, окружающим данное слово, применимо к придаточному предложению или ко всему предложению в целом?
* Данное правило будет применимо только к этой лемме или к любому слову, которое относится к данной части речи?
* Данное правило будет применимо только к этой лемме или к любому слову, которое относится к данной части речи?
* Подумать о виде омонимии для которой создается правило. Например, правило будет применимо к любой омонимии между винительным и именительным падежами или применимо только в случае падежей существительных?
* Подумать о типе неоднозначности для которой создается правило. Например, правило будет применимо к любой омонимии между винительным и именительным падежами или применимо только в случае падежей существительных?
* Очень часто бывает так, что существует несколько правил, которые одинаково подходят для снятия омонимии в предложении. Важно не загнать себя в ловушку, пытаясь найти "самое совершенное" правило.
* Очень часто бывает так, что существует несколько правил, которые одинаково подходят для снятия омонимии в предложении. Важно не загнать себя в ловушку, пытаясь найти "самое совершенное" правило.


К вышеприведенным примерам, мы можем разработать следующие правила:
К вышеприведенным примерам, мы можем разработать следующие правила:


* Если слово может стоять только в именительном или винительном падежах, а после него следуют дефис(&mdash;) и прилагательное, которое может быть только в именительном падеже, тогда выбираем вариант именительного падежа.
* Если слово может стоять либо в именительном либо в винительном падежах, а после него следуют дефис(&mdash;) и прилагательное, которое может быть только в именительном падеже, тогда выбираем вариант именительного падежа.
* После предлога "по" невозможен вариант родительного падежа.
* После предлога "по" невозможен вариант родительного падежа.


Line 177: Line 176:
SOFT-DELIMITERS = "<,>" ;
SOFT-DELIMITERS = "<,>" ;


LIST BOS = (>>>) ; # Beginning of sentence
LIST BOS = (>>>) ; # Начало предложения
LIST EOS = (<<<) ; # End of sentence
LIST EOS = (<<<) ; # Конец предложения


LIST Hyphen = guio ;
LIST Hyphen = guio ;
Line 189: Line 188:
SET Acc-Or-Nom = Acc | Nom ;
SET Acc-Or-Nom = Acc | Nom ;


Раздел
SECTION


# Rule 1
# Правило 1
REMOVE Acc IF # Remove accusative reading if,
REMOVE Acc IF # Удалите вариант винительного падежа если,
(0C Acc-Or-Nom) # the current word is only accusative or nominative
(0C Acc-Or-Nom) # данное слово или только в винительном или именительном падежах
(1C Hyphen LINK 1 Nom); # there is a hyphen directly to the right, with a nominative following
(1C Hyphen LINK 1 Nom); # есть дефис сразу справа, после которого именительный падеж


# Rule 2
# Правило 2
REMOVE Gen IF # Remove a genitive reading if,
REMOVE Gen IF # Удалите родительный падеж если,
(-1C Not-Gen-Prep); # it is preceeded by a preposition which does not ever govern the genitive
(-1C Not-Gen-Prep); # до него идет предлог, который не управляет родительным падежом


</pre>
</pre>


Скопируйте данный файл в текстовый редактор и сохраните как <code>rules.rlx</code>. Сначала нам нужно скомпилировать правила:
Copy this file into a text editor, and save it as <code>rules.rlx</code>. First we need to compile the rules:


<pre>
<pre>
$ cg-comp rules.rlx rules.bin
$ cg-comp rules.rlx rules.bin


Sections: 1, Rules: 2, Sets: 17, Tags: 18
Секции: 1, Правила: 2, Наборы: 17, Тэги: 18


</pre>
</pre>


Теперь запустите их:
And now run them:


<pre>
<pre>
Line 223: Line 222:
</pre>
</pre>


And in conjunction with the <code>apertium-tagger</code>:
И вместе с <code>apertium-tagger</code>:


<pre>
<pre>
Line 232: Line 231:
</pre>
</pre>


Мы видим, что, хотя мы удалили неправильный вариант родительного падежа, у нас появился неправильны вариант множественного числа именительного падежа. Так как предлог "по" не может управлять именительным падежом, мы может это тоже удалить, используя похожее правило ко второму варианту.
We can see that although we've removed the incorrect genitive, now we get an incorrect plural nominative reading. As "по" never governs the nominative, we can remove that too, using a similar rule to the second one.


==Для дальнейшего чтения==
==Further reading==


* van Halteren, H. (1999) ''Syntactic wordclass tagging'' (Dordrecht: Kluwer)
* van Halteren, H. (1999) ''Syntactic wordclass tagging'' (Dordrecht: Kluwer)

Revision as of 07:58, 17 January 2012

В данном разделе будет рассмотрены вопросы морфологической омонимии и описано, как они рассматриваются Грамматикой ограничений (Constraint Grammar). Буду рассмотрены теоретические аспекты некоторых видов морфологической омонимии и работа с ними при помощи правил. Практическая часть будет затрагивать discovering tagging errors и попытки решения ошибок при помощи правил.

Теория

Понятие омонимии, которая будет рассматриваться в этом разделе - это морфологическая омонимия. Это омонимия, которая происходит в следствие того, что, исходя из формы слова можно сделать несколько видов морфологического анализа (также называется как омонимичность — samenameness). Например, чувашское слово чалка может быть,

  • Существительным "чалка" единственного числа в именительном падеже.
  • Прилагательным "чалка".
  • Глаголом "чалка" в повелительном наклонении, 2 лицо, единственное число.

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

Морфологическая омонимия

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

Омонимия между частями речи

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

В языках тюркской и уральской групп, существительные и глаголы часто имеют одинаковые суффиксы (например, в финском -n, -t, -i). Подобные основы слов (случайные омонимы) встречаются несколько раз в парадигме, например, по-фински tule- "приходить" и tuli "пожар": tuli = "пожар" сущ., ед.ч или "s/он пришел", tulet = "пожары" or "ты приходишь"; tulen" = "пожара" или "я прихожу".

Деривационные процессы также могут пересекаться с флексией. Таким образом, в финском языке форма множественного числа причастия настоящего времени (и поэтому прилагательного)) и глагола настоящего времени 3 лица множественного числа всегда совпадает: laulavat = они поют / поющие (кто-то), tulevat = они приходят / приходящие (кто-то), cf. Laulavat baritonit laulavat usein (поющие баритоны часто поют).

В киргизском языке есть несколько примеров ак "белый" and ак "течь/бежать (о жидкостях)", которые имеют омонимичную форму, как например акты "белый + сущ (винит.падеж)" и "акты" "оно текло". Другой пример из казахского языка жай, со следующими значениями: в качестве прилагательного "медленный, простой, тихий, поздний"; в качестве наречия "медленно, просто, тихо"; в качестве существительного "молния", "причина, условие", "проживание", "лук (оружие)"; в качестве глагола "вывешивать для сушки / выкладывать, раскладывать / развешивать, расстилать", "гнать животных на пастбище".

Омонимия внутри части речи

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

  • Примером может быть конденсация воды.(ru)
  • Príkladom môže byť kondenzácia vody.(sk)
  • Przykładem może być kondensacja wody.(pl)
  • Primer je lahko kondenzacija vode.(sl)

Однако нельзя сказать что это присуще только славянским языками, тюркские и фино-угорские языки также имеют примеры омонимии, ограниченной частью речи, например, чувашское слово итлĕр (омонимия между повелительным наклонением и будущем временем), и финское voivat ("они могут, они могли"; это омонимия между настоящим и прошедшим временем сохраняется для всех глаголов, состоящих из одного слога и заканчивающихся на -i, например voida "мог" soida "звонить", naida "fuck", etc.).

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

Ме кывлі, тэ пӧ уджалан вузасянінын.(kv)
Я слышала, что ты работаешь в магазине.

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

Синтаксическая неоднозначность

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

  • Сегодня я говорил с подругой Анны, с которой я познакомился вчера. (вчера я познакомился с Анной)
  • Сегодня я говорил с подругой Анны, с которой я познакомился вчера. (вчера я познакомился с подругой Анны)

Трудность для машинного перевода возникает тогда, когда уже в языке-источнике предложение содержит неоднозначность, а не в языке перевода. Если омонимия сохранена, это вызывает меньше трудностей.

Например, для вышеприведенных примеров неоднозначность сохраняется для большинства западно-европейских языков (например, индо-европейских), но для XXX два различных толкования требуют двух разных переводов:

  • xxx
  • yyy

Разрешение неоднозначности при помощи правил

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

  • наш<det><pos><m><sg><ins> старый<adj><m><sg><ins> преподаватель<n><m><aa><pl><dat>
  • наш<det><pos><nt><sg><ins> старый<adj><m><sg><ins> преподаватель<n><m><aa><pl><dat>
  • наш<det><pos><mfn><pl><dat> старый<adj><m><sg><ins> преподаватель<n><m><aa><pl><dat>
  • наш<det><pos><m><sg><ins> старый<adj><mfn><pl><dat> преподаватель<n><m><aa><pl><dat>
  • наш<det><pos><nt><sg><ins> старый<adj><mfn><pl><dat> преподаватель<n><m><aa><pl><dat>
  • наш<det><pos><mfn><pl><dat> старый<adj><mfn><pl><dat> преподаватель<n><m><aa><pl><dat>
  • ...

Таким образом мы приходим к выводу, что необходимо написать правило, которое исключало бы варианты анализа, которые не согласовываются с главным словом.

Грамматика ограничений

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

  • select: Given a context, remove all the readings apart from the one(s) matched by the pattern. Учитывая контекст, удалите все варианты, кроме одного (одних), соответствующего шаблону.
  • remove: Учитывая контекст, удалите вариант (ы), соответствующий шаблону.

Контекстом может служить любая комбинация слов или тэгов в данном предложении. Чтобы представить что может служить контекстом, давайте посмотрим на несколько существующих правил снятия неоднозначности. Мы будем пользоваться фразами на русском языке:

« Услугами детских садов пользуются 135 тысяч работающих матерей. »
Омонимия #1

Слово детских имеет омонимию между родительным, предложным и винительным падежами. Нам нужно выбрать родительный падеж.

  • SELECT Gen IF (0C A) (*1C GEN BARRIER NPNHA);
    • SELECT Gen: Select genitive, IF
    • (0C A): Слово только имеет трактовки прилагательного has adjective readings.
    • (*1C GEN BARRIER NPNHA): После данного слова идет слово, которое может быть только в родительном падеже. Продолжаем искать слова после данного слова, пока не найдем слово, которое может быть любым словом, которое не может изменять существительное и не является наречием.
Омонимия #2

Слово работающих имеет омонимию во множественном числе родительного падежа, множественном числе предложного падежа и множественном числе винительного падежа. Нам нужно выбрать вариант множественного числа родительного падежа.

  • SELECT Gen IF (0C ACC-GEN-PRP) (*-1C Num LINK 1C Gen BARRIER NOTGEN);
    • SELECT Gen: Выберите родительный падеж, IF
      • (0C ACC-GEN-PRP): Данное словом может стоять только в винительном, родительном или местном падежах
      • (*-1C Num LINK 1C Gen BARRIER NOTGEN): Перед текущим словом идет слово, которое может быть только числительным, после которого может быть только слово в родительном падеже, продолжаем искать к началу предложения, пока не найдем слово, которое не содержит тэга родительного падежа.
Омонимия #3

Слово матери имеет омонимию в форме множественного числа родительного и винительного падежей. Нам нужно выбрать вариант родительного падежа (или лучше, убрать вариант винительного падежа).

  • REMOVE Acc IF (0C ACC-OR-GEN) (*-1C Num LINK 1C Gen BARRIER NOTGEN);
    • REMOVE Acc: Уберите винительный падеж, IF
      • (0C ACC-OR-GEN): Данное слово может стоять только в винительном или родительном падежах
      • (*-1C Num LINK 1C Gen BARRIER NOTGEN): У нас есть предыдущее числительное, у которого есть слово, которое после него может стоять только в родительном падеже (например,'тысяч), и мы останавливаем поиск, когда находим слово, которое не стоит в родительном падеже (BARRIER NOTGEN)

Практическое задание

В данной практической части мы рассмотрим работу маркировщика (tagger), раскроем несколько tagging errors и наконец предложим несколько правил снятия омонимии для решения проблемы tagging errors.

Работа с морфологическим анализатором

Давайте попытаемся провести морфологический анализ фразы, которая выглядит довольно просто:

echo "Уран — седьмая по удалённости от Солнца." | lt-proc ru-kv.automorf.bin
^Уран/Уран<np><top><m><sg><acc>/Уран<np><top><m><sg><nom>$ 
^—/—<guio>$ ^седьмая/седьмой<det><ord><f><sg><nom>$ 
^по/по<pr>$ 
^удалённости/удалённость<n><f><nn><sg><gen>/удалённость<n><f><nn><sg><dat>/удалённость<n><f><nn><sg><prp>/удалённость<n><f><nn><pl><acc>/удалённость<n><f><nn><pl><nom>$ 
^от/от<pr>$ 
^Солнца/Солнце<n><nt><nn><sg><gen>/Солнце<n><nt><nn><pl><acc>/Солнце<n><nt><nn><pl><nom>$
^./.<sent>$

Фраза, которая выглядела довольно легко и понятно, на самом деле содержит множественную неоднозначность.

Поиск ошибок

Apertium предлагает статистический маркировщик statistical tagger, который работает следующим образом:

$ echo "Уран — седьмая по удалённости от Солнца." | lt-proc ru-kv.automorf.bin | apertium-tagger -p -g kv-ru.prob 
^Уран/Уран<np><top><m><sg><acc>$ 
^—/—<guio>$ 
^седьмая/седьмой<det><ord><f><sg><nom>$ 
^по/по<pr>$ ^удалённости/удалённость<n><f><nn><sg><gen>$ 
^от/от<pr>$ ^Солнца/Солнце<n><nt><nn><sg><gen>$^./.<sent>$

В маркировщике довольно легко найти ошибки, их две:

  • "Уран" должно стоять в именительном падеже, а не винительном.
  • После предлога "по", падеж слова "удалённость" должен быть дательным, а не родительным.

С остальных слов омонимия была снята правильно.

Разработка правил

При разработке правил, важно принимать во внимание следующее:

  • Набор ситуаций, в которых это правило будет применяться. Например, это правило будет применимо только к данному слову, к данному слову и к одному или двум словам, окружающим данное слово, применимо к придаточному предложению или ко всему предложению в целом?
  • Данное правило будет применимо только к этой лемме или к любому слову, которое относится к данной части речи?
  • Подумать о типе неоднозначности для которой создается правило. Например, правило будет применимо к любой омонимии между винительным и именительным падежами или применимо только в случае падежей существительных?
  • Очень часто бывает так, что существует несколько правил, которые одинаково подходят для снятия омонимии в предложении. Важно не загнать себя в ловушку, пытаясь найти "самое совершенное" правило.

К вышеприведенным примерам, мы можем разработать следующие правила:

  • Если слово может стоять либо в именительном либо в винительном падежах, а после него следуют дефис(—) и прилагательное, которое может быть только в именительном падеже, тогда выбираем вариант именительного падежа.
  • После предлога "по" невозможен вариант родительного падежа.

Создайте несколько правил, которые снимают проблему языковой омонимии для выбранной вами пары языков.

Грамматика ограничений

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


DELIMITERS = "<.>" "<!>" "<?>" ;
SOFT-DELIMITERS = "<,>" ;

LIST BOS = (>>>) ; # Начало предложения
LIST EOS = (<<<) ; # Конец предложения 

LIST Hyphen = guio ;
LIST Nom = nom ;
LIST Acc = acc ;
LIST Gen = gen ;

LIST Not-Gen-Prep = "по";

SET  Acc-Or-Nom = Acc | Nom ;

Раздел

# Правило 1
REMOVE Acc IF                          # Удалите вариант винительного падежа если,
              (0C Acc-Or-Nom)          #   данное слово или только в винительном или именительном падежах
              (1C Hyphen LINK 1 Nom);  #   есть дефис сразу справа, после которого именительный падеж

# Правило 2
REMOVE Gen IF                          # Удалите родительный падеж если,
              (-1C Not-Gen-Prep);      # до него идет предлог, который не управляет родительным падежом

Скопируйте данный файл в текстовый редактор и сохраните как rules.rlx. Сначала нам нужно скомпилировать правила:

$ cg-comp rules.rlx rules.bin

Секции: 1, Правила: 2, Наборы: 17, Тэги: 18

Теперь запустите их:

$ echo "Уран — седьмая по удалённости от Солнца." | lt-proc ru-kv.automorf.bin | cg-proc rules.bin 
^Уран/Уран<np><top><m><sg><nom>$ ^—/—<guio>$ ^седьмая/седьмой<det><ord><f><sg><nom>$ 
^по/по<pr>$ 
^удалённости/удалённость<n><f><nn><pl><nom>/удалённость<n><f><nn><sg><dat>/удалённость<n><f><nn><sg><prp>/удалённость<n><f><nn><pl><acc>$ 
^от/от<pr>$ ^Солнца/Солнце<n><nt><nn><sg><gen>/Солнце<n><nt><nn><pl><acc>/Солнце<n><nt><nn><pl><nom>$
^./.<sent>$

И вместе с apertium-tagger:

$  echo "Уран — седьмая по удалённости от Солнца." | lt-proc ru-kv.automorf.bin | cg-proc rules.bin  |\
   apertium-tagger -g ru-kv.prob
^Уран<np><top><m><sg><nom>$ ^—<guio>$ ^седьмой<det><ord><f><sg><nom>$ ^по<pr>$ 
^удалённость<n><f><nn><pl><nom>$ ^от<pr>$ ^Солнце<n><nt><nn><sg><gen>$^.<sent>$

Мы видим, что, хотя мы удалили неправильный вариант родительного падежа, у нас появился неправильны вариант множественного числа именительного падежа. Так как предлог "по" не может управлять именительным падежом, мы может это тоже удалить, используя похожее правило ко второму варианту.

Для дальнейшего чтения

  • van Halteren, H. (1999) Syntactic wordclass tagging (Dordrecht: Kluwer)