Difference between revisions of "Курсы машинного перевода для языков России/Раздел 4"
m (moved Машинный перевод для языков России/Раздел 4 to Курсы машинного перевода для языков России/Раздел 4: ... to get a better structure.) |
|||
(18 intermediate revisions by 2 users not shown) | |||
Line 1: | Line 1: | ||
{{TOCD}} |
{{TOCD}} |
||
Цель данного раздела |
Цель данного раздела - описать процессы лексического переноса и лексического выбора. В теоретической части более подробно будет описано почему переносной словарь (или двуязычный словарь) это не всегда лишь соответствие между леммами/частями речи в одном языке и леммами/частями речи в другом языке. В практической части мы добавим три вида записи: один к одному, множество к одному, один к многим. |
||
==Теория== |
==Теория== |
||
Существует два аспекта |
Существует два аспекта лексического переноса, первый - выбор наиболее подходящего перевода, второй - маркировка в записях тех особых характеристик, которые должны согласовываться с правилами переноса. Например, выбор наиболее подходящего русского перевода для чувашского слова ''тӳпе'', когда существует несколько вариантов переводов, включая ''вершина'', ''крыша'' и ''небо'' - это пример первого аспекта, а выбор единственного или множественного числа при переводе русского слова ''брюки'' на татарский (например ''чалбар'', ''чалбарлар'') - это пример второго аспекта перевода лексики. |
||
===Переводные эквиваленты=== |
===Переводные эквиваленты=== |
||
Простая модель перевода - это когда вы берете по очереди каждое слово из предложения на языке |
Простая модель перевода - это когда вы берете по очереди каждое слово из предложения на языке оригинала, находите переводной эквивалент на языке перевода и заменяете слово. Эта модель проблематична, потому что отношения между словами в языке-источнике и языке перевода, это не один к одному, а множество к множеству, потому что слова могут быть "полисемичны" (многозначны) и этим значениям могут соответствовать различные варианты перевода. Один из способов расширить эту простую модель перевода - снять омонимию со слов, опираясь на лексическую категорию или принадлежность к части речи. Например, кыргызское слово ''жаз'' может быть как глаголом, так и существительным, что в свою очередь может на русский язык соответственно переводиться как ''писать'' или ''весна''. |
||
<div style="float:right;"> |
<div style="float:right;"> |
||
{|class=wikitable |
{|class=wikitable |
||
! |
! чувашский !! !! русский |
||
|- |
|- |
||
| тӳпе || ↔ || вершина |
| тӳпе || ↔ || вершина |
||
Line 25: | Line 25: | ||
|} |
|} |
||
</div> |
</div> |
||
Это пример |
Это пример практически соответствия один к одному, значения слова ''жаз'' на кыргызском и ''весна'' на русском соответствуют друг другу. Однако это не всегда так. Может быть так, что не одно, а несколько слов в языке-оригинале будут переводиться одним и тем же словом на язык перевода. Например, оба слова из русского языка ''вершина'' и ''небо'' могут быть переведены на чувашский как ''тӳпе''. На самом деле, отношения между словами можно описать как множество к множеству. |
||
Для машинного перевода не составляет проблемы |
Для машинного перевода не составляет проблемы запомнить, что ''вершина'', ''небо'' и ''крыша'' - все слов будут переводиться как ''тӳпе''. Но что ''тӳпе'' имеет три (или больше) вариантов перевода на русский - это проблема. |
||
Применение знаний о части речи для разрешения неоднозначности при переводе может частично, но не полностью решить проблему. Даже после того как снята омонимия с части речи, одно слово может иметь несколько вариантов перевода, как в примере с ''тӳпе''. Итак, как же решить проблему один к множеству? Самый очевидный способ - это выбрать наиболее часто встречающийся вариант, или общее значение — в данном случае ''тӳпе''. |
|||
В данное время Apertium имеет экспериментальный модуль для решения проблемы ''лексического выбора'', то есть выбора наиболее подходящего перевода лексической формы языка-источника, предлагая контекст, использования |
В данное время Apertium имеет экспериментальный модуль для решения проблемы ''лексического выбора'', то есть выбора наиболее подходящего перевода лексической формы языка-источника, предлагая контекст, но использования словосочетаний тоже может быть частичным решением, например в случаях, когда существуют часто встречающиеся коллокации, которые являются исключением по отношению к общему переводу (например, с испанского на французский) : ''estación del año'' → ''saison de l'année''). |
||
===Диалектные формы=== |
===Диалектные формы=== |
||
Часто бывает |
Часто бывает, что диалектные формы одного языка желательно перевести на другой язык в нормативном стиле. Например, из русского языка слово ''мясо'' может быть переведено на чувашский язык как ''аш'', ''какай'', или ''аш-какай''. Первые два варианты перевода считаются более диалектными и в основном употребляются в разговорном языке. Третий вариант более нормативный и более подходит для письменного варианта. |
||
===Грамматическое различие=== |
|||
===Грамматическая дивергенция=== |
|||
Еще одна проблема лексической передачи - грамматическое различие между двумя языками |
Еще одна проблема лексической передачи - грамматическое различие между двумя языками |
||
* Слова могут при переводе менять род и число (например, русское слово ''брюки'' — множественного числа переводятся на башкирский ''салбар'' — единственного числа) |
* Слова могут при переводе менять род и число (например, русское слово ''брюки'' — множественного числа переводятся на башкирский ''салбар'' — единственного числа) |
||
* Слова в языке-источнике могут иметь омонимию в числе (французское слово ''temps'' на испанское ''tiempo'' или ''tiempos'') или роде (испанское слово ''estudiante'' — может быть мужского или женского рода во |
* Слова в языке-источнике могут иметь омонимию в числе (французское слово ''temps'' на испанское ''tiempo'' или ''tiempos'') или роде (испанское слово ''estudiante'' — может быть мужского или женского рода во французском ''étudiant'', мужской род, ''étudiante'', женский род). |
||
* Другие характеристики, которые могут быть полезными при |
* Другие характеристики, которые могут быть полезными при лексическом переносе между двумя языками, это является ли переводное существительное абстрактным или исчисляемым — это нужно, например, чтобы решить какой поставить артикль при переводе с языка, где отсутствует категория артикля, на язык, где такая категория присутствует. |
||
* Также в двуязычном словаре полезно указать, если |
* Также в двуязычном словаре полезно указать, если есть два вида прилагательных, которые изменяют окончания в степенях сравнения и нет. |
||
Обо всем этом необходимо подумать при составлении |
Обо всем этом необходимо подумать при составлении словаря переноса (двуязычного словаря). |
||
==Практика== |
==Практика== |
||
Для данной практической части будут использоваться примеры из языковой пары татарский-башкирский, поэтому найдите |
Для данной практической части будут использоваться примеры из языковой пары татарский-башкирский, поэтому найдите папку <code>apertium-tt-ba</code>. Двуязычный словарь находится в файле <code>apertium-tt-ba.tt-ba.dix</code>. Откройте ее. |
||
===Один к одному=== |
===Один к одному=== |
||
Line 70: | Line 70: | ||
</pre> |
</pre> |
||
Сохраните словарь и выйдите из текстового редактора, мы можем сформировать словарь при помощи следующей команды: |
|||
Save the dictionary and exit out of the text editor, and we can compile the dictionary with the following command: |
|||
<pre> |
<pre> |
||
Line 76: | Line 76: | ||
</pre> |
</pre> |
||
Давайте протестируем: |
|||
We can test it as follows: |
|||
<pre> |
<pre> |
||
Line 85: | Line 85: | ||
</pre> |
</pre> |
||
Данная команда показывает вам вводимую лексическую форму, и получаемую лексическую форму после ее прохождения через двуязычный словарь. |
|||
This command shows you the input lexical form, and the output lexical form after having been passed through the bilingual dictionary. |
|||
===Множество к одному=== |
|||
===Many to one=== |
|||
Следующая стадия, это осуществить перевод от многих слов к одному слову. Татарское слово ''морон'' может быть переведено на башкирский язык как ''борын'', но в настоящий момент данное слово не занесено в словари. Сначала мы ищем слово ''борын'' в файле <code>apertium-tt-ba.tt-ba.dix</code>, и мы находим следующую запись: |
|||
<pre> |
<pre> |
||
Line 95: | Line 95: | ||
</pre> |
</pre> |
||
Мы можем добавить запись для перевода слова ''морон'' → ''борын'', но для того чтобы это сделать, нам нужно добавить ограничение в направлении перевода, при котором данная запись имеет силу только при переводе с башкирского на татарский. Ограничения добавляются к элементу {{tag|e}} с описанием <code>r</code> и выделяются цветами, <code>LR</code> слева направо или справа налево <code>RL</code>. Папка называется <code>apertium-tt-ba.tt-ba.dix</code> где татарский вариант слева, а башкирский справа. Итак, если мы хотим, чтобы перевод происходил только в направлении с башкирского на татарский язык нам необходимо добавить ограничение по направлению справа налево(<code>RL</code>). Скопируйте запись и вставьте ее ниже, затем измените лемму и добавьте ограничение. |
|||
We can add an entry to translate ''морон'' → ''борын'', but in order to do this we need to also add a direction restriction, so that that this entry only applies when translating from Bashkir to Tatar. Restriction are added to the {{tag|e}} element with the <code>r</code> attribute and come in two flavours, <code>LR</code> or left-to-right and <code>RL</code> or right-to-left. The file is called <code>apertium-tt-ba.tt-ba.dix</code> with Tatar on the left and Bashkir on the right. So, if we want to translate only from Bashkir to Tatar we need to add a right-to-left (<code>RL</code>) direction restriction. Copy the entry and paste it below, then change the lemma and add the restriction. |
|||
<pre> |
<pre> |
||
Line 102: | Line 102: | ||
</pre> |
</pre> |
||
Изучите важность ограничений по направлению перевода в [[Машинный_перевод_для_языков_России/Раздел_7|разделе 7]]. Теперь сформируйте словарь и протестируйте запись: |
|||
For the importance of direction restrictions, see [[/Session 7|Session 7]]. Now compile the dictionary and test the new entry: |
|||
<pre> |
<pre> |
||
Line 124: | Line 124: | ||
</pre> |
</pre> |
||
Мы используем ограничение по направлению перевода если хотим, чтобы перевод был возможен только в определенном направлении или в случае перевода диалектных и не нормативных форм. Но бывает желательно иметь два возможных перевода. |
|||
We use the direction restrictions when we ''never'' want to be able to translate a word in that direction, e.g. in the case of dialect or substandard forms. But sometimes it might be desirable to have two possible translations. |
|||
=== |
===Один ко множеству=== |
||
<div style="float: right"> |
<div style="float: right"> |
||
{|class=wikitable |
{|class=wikitable |
||
|- |
|- |
||
! |
! Финский !! !! Северо-саамский |
||
|- |
|- |
||
| pitää || ↔ || doallat |
| pitää || ↔ || doallat |
||
Line 143: | Line 143: | ||
|} |
|} |
||
</div> |
</div> |
||
Для данной части практики вы должны находиться в папке <code>apertium-sme-fin</code>. Двуязычный словарь <code>apertium-sme-fin.sme-fin.dix</code> |
|||
В данной подпапке мы добавим несколько записей для лексических форм с более чем одним переводом и напишем правила для лексического выбора не установленного заранее образца перевода. |
|||
In this subsection we will add some entries for lexical forms with more than one translation, and write lexical selection rules to select the non-default translations. |
|||
Возьмем для примера финское слово ''pitää'', мы обнаружим, что данное слово может быть переведено несколькими вариантами на северо-саамский язык, следовательно, чтобы добавить несколько вариантов не шаблонного перевода мы делаем следующее: |
|||
If we take the example of ''pitää'' in Finnish, we find that it can also be translated with several words in North Sámi, so if we want to add some non-default translations of it, we can do it as follows: |
|||
<pre> |
<pre> |
||
Line 156: | Line 156: | ||
</pre> |
</pre> |
||
Если мы хотим добавить перевод ''galgat'' → ''pitää'', тогда нам нужно сделать еще одну запись, в этот раз с пометкой <code>LR</code>, чтобы перевод шел только в направлении из северо-саамского на финский. |
|||
If we also want to add a translation from ''galgat'' → ''pitää'', then we need to add another entry, this time marking it with <code>LR</code> for translating only from North Sámi to Finnish. |
|||
<pre> |
<pre> |
||
Line 162: | Line 162: | ||
</pre> |
</pre> |
||
Сформируйте словарь обычным способом: |
|||
Compile the dictionary in the usual way: |
|||
<pre> |
<pre> |
||
Line 171: | Line 171: | ||
</pre> |
</pre> |
||
Внимательно проверьте новые записи следующими способами: |
|||
And try out the new entries as follows: |
|||
<pre> |
<pre> |
||
Line 180: | Line 180: | ||
</pre> |
</pre> |
||
В случае омонимии при лексическом переносе, переносной компонент выберет первый вариант перевода для дальнейшей обработки, если первый вариант перевода не подходит, может быть применено правило лексической выборки, которое выберет другой вариант перевода: |
|||
In the case of ambiguity in the lexical transfer, the transfer component will pick the first translation to continue with, if the first translation is not the desired translation, a lexical selection rule can be made which chooses a different one: |
|||
Создайте файл <code>apertium-sme-fin.fin-sme.lrx</code>, и вставьте следующий текст |
|||
<pre> |
<pre> |
||
Line 194: | Line 194: | ||
</pre> |
</pre> |
||
Вы можете создать это правило используя <code>apertium-lrx-comp</code>: |
|||
<pre> |
<pre> |
||
$ apertium-lrx-comp apertium-sme-fin.fin-sme.lrx fin-sme.lrx.bin |
$ apertium-lrx-comp apertium-sme-fin.fin-sme.lrx fin-sme.lrx.bin |
||
1 |
1 |
||
написано 1 правило, 2 шаблона. |
|||
Written 1 rules, 2 patterns. |
|||
</pre> |
</pre> |
||
И протестируйте следующим образом: |
|||
And test it as follows: |
|||
<pre> |
<pre> |
||
Line 211: | Line 211: | ||
</pre> |
</pre> |
||
Как вы видите стандартный перевод ''doallat'' был выбран. Ну а если мы хотим выбрать нестандартный перевод в определенном контексте? При последующем исходном падеже в противовес винительному/родительному более подходящим вариантом перевода ''liikot'', поэтому давайте добавим для этого правило: |
|||
As you can see the default translation ''doallat'' has been chosen. But what if we want to choose a non-default translation in certain contexts ? With an elative following as opposed to an accusative/genitive, a better translation is ''liikot'', so let's add a rule for that: |
|||
<pre> |
<pre> |
||
Line 222: | Line 222: | ||
</pre> |
</pre> |
||
Вы можете снова сделать "сформировать" и протестировать это правило на предложении ''Minä pidän sinusta.'' "Ты мне нравишься" . |
|||
You can compile it again, and try this rule with a sentence like ''Minä pidän sinusta.'' "I like you" . |
|||
===Лексическая выборка=== |
|||
===Lexical selection=== |
|||
Для использования правил выбора лексики подготовлен отдельный раздаточный материал. |
|||
There is a separate handout on using lexical selection rules. |
|||
==Смотрите также== |
|||
==See also== |
|||
* [[Как начать работу с правилами по выбору лексики]] |
|||
* [[How to get started with lexical selection rules]] |
|||
==Для дальнейшего чтения== |
|||
==Further reading== |
|||
Latest revision as of 12:00, 31 January 2012
Цель данного раздела - описать процессы лексического переноса и лексического выбора. В теоретической части более подробно будет описано почему переносной словарь (или двуязычный словарь) это не всегда лишь соответствие между леммами/частями речи в одном языке и леммами/частями речи в другом языке. В практической части мы добавим три вида записи: один к одному, множество к одному, один к многим.
Теория[edit]
Существует два аспекта лексического переноса, первый - выбор наиболее подходящего перевода, второй - маркировка в записях тех особых характеристик, которые должны согласовываться с правилами переноса. Например, выбор наиболее подходящего русского перевода для чувашского слова тӳпе, когда существует несколько вариантов переводов, включая вершина, крыша и небо - это пример первого аспекта, а выбор единственного или множественного числа при переводе русского слова брюки на татарский (например чалбар, чалбарлар) - это пример второго аспекта перевода лексики.
Переводные эквиваленты[edit]
Простая модель перевода - это когда вы берете по очереди каждое слово из предложения на языке оригинала, находите переводной эквивалент на языке перевода и заменяете слово. Эта модель проблематична, потому что отношения между словами в языке-источнике и языке перевода, это не один к одному, а множество к множеству, потому что слова могут быть "полисемичны" (многозначны) и этим значениям могут соответствовать различные варианты перевода. Один из способов расширить эту простую модель перевода - снять омонимию со слов, опираясь на лексическую категорию или принадлежность к части речи. Например, кыргызское слово жаз может быть как глаголом, так и существительным, что в свою очередь может на русский язык соответственно переводиться как писать или весна.
чувашский | русский | |
---|---|---|
тӳпе | ↔ | вершина |
тăрă | → | вершина |
тӳпе | ← | небо |
тӳпе | ← | крыша |
... |
Это пример практически соответствия один к одному, значения слова жаз на кыргызском и весна на русском соответствуют друг другу. Однако это не всегда так. Может быть так, что не одно, а несколько слов в языке-оригинале будут переводиться одним и тем же словом на язык перевода. Например, оба слова из русского языка вершина и небо могут быть переведены на чувашский как тӳпе. На самом деле, отношения между словами можно описать как множество к множеству.
Для машинного перевода не составляет проблемы запомнить, что вершина, небо и крыша - все слов будут переводиться как тӳпе. Но что тӳпе имеет три (или больше) вариантов перевода на русский - это проблема.
Применение знаний о части речи для разрешения неоднозначности при переводе может частично, но не полностью решить проблему. Даже после того как снята омонимия с части речи, одно слово может иметь несколько вариантов перевода, как в примере с тӳпе. Итак, как же решить проблему один к множеству? Самый очевидный способ - это выбрать наиболее часто встречающийся вариант, или общее значение — в данном случае тӳпе.
В данное время Apertium имеет экспериментальный модуль для решения проблемы лексического выбора, то есть выбора наиболее подходящего перевода лексической формы языка-источника, предлагая контекст, но использования словосочетаний тоже может быть частичным решением, например в случаях, когда существуют часто встречающиеся коллокации, которые являются исключением по отношению к общему переводу (например, с испанского на французский) : estación del año → saison de l'année).
Диалектные формы[edit]
Часто бывает, что диалектные формы одного языка желательно перевести на другой язык в нормативном стиле. Например, из русского языка слово мясо может быть переведено на чувашский язык как аш, какай, или аш-какай. Первые два варианты перевода считаются более диалектными и в основном употребляются в разговорном языке. Третий вариант более нормативный и более подходит для письменного варианта.
Грамматическое различие[edit]
Еще одна проблема лексической передачи - грамматическое различие между двумя языками
- Слова могут при переводе менять род и число (например, русское слово брюки — множественного числа переводятся на башкирский салбар — единственного числа)
- Слова в языке-источнике могут иметь омонимию в числе (французское слово temps на испанское tiempo или tiempos) или роде (испанское слово estudiante — может быть мужского или женского рода во французском étudiant, мужской род, étudiante, женский род).
- Другие характеристики, которые могут быть полезными при лексическом переносе между двумя языками, это является ли переводное существительное абстрактным или исчисляемым — это нужно, например, чтобы решить какой поставить артикль при переводе с языка, где отсутствует категория артикля, на язык, где такая категория присутствует.
- Также в двуязычном словаре полезно указать, если есть два вида прилагательных, которые изменяют окончания в степенях сравнения и нет.
Обо всем этом необходимо подумать при составлении словаря переноса (двуязычного словаря).
Практика[edit]
Для данной практической части будут использоваться примеры из языковой пары татарский-башкирский, поэтому найдите папку apertium-tt-ba
. Двуязычный словарь находится в файле apertium-tt-ba.tt-ba.dix
. Откройте ее.
Один к одному[edit]
Возможно вы помните, что, в первом разделе мы добавили слово чалбар в татарский словарь, мы будем пользоваться этим примером для простых один к одному записей в двуязычном словаре.
Например, найдите запись >песи<,
<e><p><l>песи<s n="n"/></l><r>бесәй<s n="n"/></r></p></e>
Скопируйте запись и измените лексические формы в языке-источнике и языке перевода, чтобы у вас получилось что-то подобное:
<e><p><l>песи<s n="n"/></l><r>бесәй<s n="n"/></r></p></e> <e><p><l>чалбар<s n="n"/></l><r>салбар<s n="n"/></r></p></e>
Сохраните словарь и выйдите из текстового редактора, мы можем сформировать словарь при помощи следующей команды:
$ lt-comp lr apertium-tt-ba.tt-ba.dix tt-ba.autobil.bin
Давайте протестируем:
$ echo "чалбар" | hfst-proc tt-ba.automorf.hfst | apertium-tagger -g tt-ba.prob |\ apertium-pretransfer | lt-proc -b tt-ba.autobil.bin ^чалбар<n><nom>/салбар<n><nom>$
Данная команда показывает вам вводимую лексическую форму, и получаемую лексическую форму после ее прохождения через двуязычный словарь.
Множество к одному[edit]
Следующая стадия, это осуществить перевод от многих слов к одному слову. Татарское слово морон может быть переведено на башкирский язык как борын, но в настоящий момент данное слово не занесено в словари. Сначала мы ищем слово борын в файле apertium-tt-ba.tt-ba.dix
, и мы находим следующую запись:
<e><p><l>борын<s n="n"/></l><r>танау<s n="n"/></r></p></e>
Мы можем добавить запись для перевода слова морон → борын, но для того чтобы это сделать, нам нужно добавить ограничение в направлении перевода, при котором данная запись имеет силу только при переводе с башкирского на татарский. Ограничения добавляются к элементу <e>
с описанием r
и выделяются цветами, LR
слева направо или справа налево RL
. Папка называется apertium-tt-ba.tt-ba.dix
где татарский вариант слева, а башкирский справа. Итак, если мы хотим, чтобы перевод происходил только в направлении с башкирского на татарский язык нам необходимо добавить ограничение по направлению справа налево(RL
). Скопируйте запись и вставьте ее ниже, затем измените лемму и добавьте ограничение.
<e><p><l>борын<s n="n"/></l><r>танау<s n="n"/></r></p></e> <e r="RL"><p><l>борын<s n="n"/></l><r>морон<s n="n"/></r></p></e>
Изучите важность ограничений по направлению перевода в разделе 7. Теперь сформируйте словарь и протестируйте запись:
$ lt-comp rl apertium-tt-ba.tt-ba.dix ba-tt.autobil.bin main@standard 1228 1995 $ lt-comp lr apertium-tt-ba.tt-ba.dix tt-ba.autobil.bin main@standard 1226 1990 $ echo "борын" | hfst-proc tt-ba.automorf.hfst | apertium-tagger -g tt-ba.prob |\ apertium-pretransfer | lt-proc -b tt-ba.autobil.bin ^борын<n><nom>/танау<n><nom>$ $ echo "танау" | hfst-proc ba-tt.automorf.hfst | apertium-tagger -g ba-tt.prob |\ apertium-pretransfer | lt-proc -b ba-tt.autobil.bin ^танау<n><nom>/борын<n><nom>$ $ echo "морон" | hfst-proc ba-tt.automorf.hfst | apertium-tagger -g ba-tt.prob |\ apertium-pretransfer | lt-proc -b ba-tt.autobil.bin ^морон<n><nom>/борын<n><nom>$
Мы используем ограничение по направлению перевода если хотим, чтобы перевод был возможен только в определенном направлении или в случае перевода диалектных и не нормативных форм. Но бывает желательно иметь два возможных перевода.
Один ко множеству[edit]
Финский | Северо-саамский | |
---|---|---|
pitää | ↔ | doallat |
pitää | → | berret |
pitää | → | liikot |
pitää | → | coakcut |
pitää | ← | galgat |
Для данной части практики вы должны находиться в папке apertium-sme-fin
. Двуязычный словарь apertium-sme-fin.sme-fin.dix
В данной подпапке мы добавим несколько записей для лексических форм с более чем одним переводом и напишем правила для лексического выбора не установленного заранее образца перевода.
Возьмем для примера финское слово pitää, мы обнаружим, что данное слово может быть переведено несколькими вариантами на северо-саамский язык, следовательно, чтобы добавить несколько вариантов не шаблонного перевода мы делаем следующее:
<e c="hold (acc)"><p><l>doallat<s n="V"/><s n="TV"/></l><r>pitää<s n="V"/></r></p><par n="V_V"/></e> <e c="ought to"><p><l>berret<s n="V"/><s n="IV"/></l><r>pitää<s n="V"/></r></p><par n="V_V"/></e> <e c="like (ela)"><p><l>liikot<s n="V"/><s n="IV"/></l><r>pitää<s n="V"/></r></p><par n="V_V"/></e> <e c="get a foothold"><p><l>coakcut<s n="V"/><s n="IV"/></l><r>pitää<s n="V"/></r></p><par n="V_V"/></e>
Если мы хотим добавить перевод galgat → pitää, тогда нам нужно сделать еще одну запись, в этот раз с пометкой LR
, чтобы перевод шел только в направлении из северо-саамского на финский.
<e r="LR"><p><l>galgat<s n="V"/><s n="IV"/></l><r>pitää<s n="V"/></r></p><par n="V_V"/></e>--><!-- skulle, should -->
Сформируйте словарь обычным способом:
$ lt-comp rl apertium-sme-fin.sme-fin.dix fin-sme.autobil.bin main@standard 15454 19523
Внимательно проверьте новые записи следующими способами:
$ echo "Minä pidän kirjan." | hfst-proc fin-sme.automorf.hfst | cg-proc fin-sme.rlx.bin | apertium-tagger -g fin-sme.prob | lt-proc -b fin-sme.autobil.bin ^Mikä<Pron><Interr><Sg><Ess>/Mii<Pron><Interr><Sg><Ess>$ ^pitää<V><Act><Ind><Prs><Sg1><@+FMAINV>/berret<V><IV><Ind><Prs><Sg1><@+FMAINV>/liikot<V><IV><Ind><Prs><Sg1><@+FMAINV>/doallat<V><TV><Ind><Prs><Sg1><@+FMAINV>/coakcut<V><IV><Ind><Prs><Sg1><@+FMAINV>$ ^kirja<N><Sg><Gen><@←OBJ>/girji<N><Sg><Gen><@←OBJ>$^.<Punct><CLB>/.<CLB>$
В случае омонимии при лексическом переносе, переносной компонент выберет первый вариант перевода для дальнейшей обработки, если первый вариант перевода не подходит, может быть применено правило лексической выборки, которое выберет другой вариант перевода:
Создайте файл apertium-sme-fin.fin-sme.lrx
, и вставьте следующий текст
<rules> <rule> <match lemma="pitää" tags="V.*"> <select lemma="doallat" tags="V.TV.*"/> </match> </rule> </rules>
Вы можете создать это правило используя apertium-lrx-comp
:
$ apertium-lrx-comp apertium-sme-fin.fin-sme.lrx fin-sme.lrx.bin 1 написано 1 правило, 2 шаблона.
И протестируйте следующим образом:
$ echo "Minä pidän kirjan." | hfst-proc fin-sme.automorf.hfst | cg-proc fin-sme.rlx.bin | apertium-tagger -g fin-sme.prob | lt-proc -b fin-sme.autobil.bin | apertium-lrx-proc fin-sme.lrx.bin ^Mikä<Pron><Interr><Sg><Ess>/Mii<Pron><Interr><Sg><Ess>$ ^pitää<V><Act><Ind><Prs><Sg1><@+FMAINV>/doallat<V><TV><Ind><Prs><Sg1><@+FMAINV>$ ^kirja<N><Sg><Gen><@←OBJ>/girji<N><Sg><Gen><@←OBJ>$^.<Punct><CLB>/.<CLB>$
Как вы видите стандартный перевод doallat был выбран. Ну а если мы хотим выбрать нестандартный перевод в определенном контексте? При последующем исходном падеже в противовес винительному/родительному более подходящим вариантом перевода liikot, поэтому давайте добавим для этого правило:
<rule> <match lemma="pitää" tags="V.*"> <select lemma="liikot" tags="V.*"/> </match> <match tags="*.Ela"/> </rule>
Вы можете снова сделать "сформировать" и протестировать это правило на предложении Minä pidän sinusta. "Ты мне нравишься" .
Лексическая выборка[edit]
Для использования правил выбора лексики подготовлен отдельный раздаточный материал.