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

From Apertium
Jump to navigation Jump to search
 
(19 intermediate revisions by 2 users not shown)
Line 1: Line 1:
{{TOCD}}
{{TOCD}}


Цель данного раздела дать описание процессам лексической передачи и лексического выбора. В теоретической части более подробно будет описано почему передаваемый словарь (или двуязычный словарь) не всегда только соответствие между леммами/частями речи в одном языке и леммами/частями речи в другом языке. В практической части мы добавим три записи, The theory section will cover some details of why a transfer lexicon (or bilingual dictionary) cannot always be just correspondences between lemmas/parts-of-speech in one language and lemmas/parts-of-speech in another. In the practice section, we will add three entries, a simple one-to-one entry, a many-to-one entry and a one-to-many entry.
Цель данного раздела - описать процессы лексического переноса и лексического выбора. В теоретической части более подробно будет описано почему переносной словарь (или двуязычный словарь) это не всегда лишь соответствие между леммами/частями речи в одном языке и леммами/частями речи в другом языке. В практической части мы добавим три вида записи: один к одному, множество к одному, один к многим.


==Теория==
==Теория==


Существует два аспекта лексической передачи, первая - выбор наиболее подходящего перевода, вторая - выделение в записях тех особых характеристик, которые нужно согласовывать с правилами. the first is choosing the most adequate translation, the second is marking in the entries features which need to be inferred by transfer rules. Например, выбор наиболее подходящего русского перевода для чувашского слова ''тӳпе'', когда существует несколько вариантов переводов, включая ''вершина'', ''крыша'' и ''небо'' - это пример первого аспекта, а выбор единственного или множественного числа при переводе русского слова ''брюки'' на татарский (например ''чалбар'', ''чалбарлар'') - это пример второго аспекта перевода лексики.
Существует два аспекта лексического переноса, первый - выбор наиболее подходящего перевода, второй - маркировка в записях тех особых характеристик, которые должны согласовываться с правилами переноса. Например, выбор наиболее подходящего русского перевода для чувашского слова ''тӳпе'', когда существует несколько вариантов переводов, включая ''вершина'', ''крыша'' и ''небо'' - это пример первого аспекта, а выбор единственного или множественного числа при переводе русского слова ''брюки'' на татарский (например ''чалбар'', ''чалбарлар'') - это пример второго аспекта перевода лексики.


===Переводные эквиваленты===
===Переводные эквиваленты===


Простая модель перевода - это когда вы берете по очереди каждое слово из предложения на языке-оригинале, находите переводной эквивалент в языке перевода и заменяете слова. Это модель проблематична, потому что отношения между словами в языке источнике и языке перевода, это не один к одному, а множество к множеству, потому что слова могут быть "полисемичны" (многозначны) и этим значениям могут соответствовать различные переводы. Один из способов расширить эту простую модель перевода - снять омонимию со слов, опираясь на лексическую категорию или принадлежность к части речи. Например, киргизское слово ''жаз'' может быть как глаголом, так и существительным, что в свою очередь может на русский язык соответственно переводиться как ''писать'' или ''весна''.
Простая модель перевода - это когда вы берете по очереди каждое слово из предложения на языке оригинала, находите переводной эквивалент на языке перевода и заменяете слово. Эта модель проблематична, потому что отношения между словами в языке-источнике и языке перевода, это не один к одному, а множество к множеству, потому что слова могут быть "полисемичны" (многозначны) и этим значениям могут соответствовать различные варианты перевода. Один из способов расширить эту простую модель перевода - снять омонимию со слов, опираясь на лексическую категорию или принадлежность к части речи. Например, кыргызское слово ''жаз'' может быть как глаголом, так и существительным, что в свою очередь может на русский язык соответственно переводиться как ''писать'' или ''весна''.
<div style="float:right;">
<div style="float:right;">
{|class=wikitable
{|class=wikitable
! Chuvash !! !! Russian
! чувашский !! !! русский
|-
|-
| тӳпе || ↔ || вершина
| тӳпе || ↔ || вершина
Line 25: Line 25:
|}
|}
</div>
</div>
Это пример более менее соответствия один к одному, Значения для слова ''жаз'' на киргизском и ''весна'' на русском соответствуют друг другу. Однако это не всегда так. Может быть что не одно а несколько слов в языке-оригинале будут переводиться одни и тем же словом в языке перевода. Например, оба слова из русского языка ''вершина'' и ''небо'' могут быть переведены на чувашский как ''тӳпе''. На самом деле, отношения между словами можно описать как многие к многим.
Это пример практически соответствия один к одному, значения слова ''жаз'' на кыргызском и ''весна'' на русском соответствуют друг другу. Однако это не всегда так. Может быть так, что не одно, а несколько слов в языке-оригинале будут переводиться одним и тем же словом на язык перевода. Например, оба слова из русского языка ''вершина'' и ''небо'' могут быть переведены на чувашский как ''тӳпе''. На самом деле, отношения между словами можно описать как множество к множеству.


Для машинного перевода не составляет проблемы сказать, что ''вершина'', ''небо'' и ''крыша'' - все будут переводиться как ''тӳпе''. Но что ''saison'' может быть переведено также как ''temporada'' и что ''тӳпе'' имеет три (или больше) вариантов перевода на русский - это проблема.
Для машинного перевода не составляет проблемы запомнить, что ''вершина'', ''небо'' и ''крыша'' - все слов будут переводиться как ''тӳпе''. Но что ''тӳпе'' имеет три (или больше) вариантов перевода на русский - это проблема.


Использование знания о части речи для снятия омонимии при переводе может частично, но не полностью решить проблему. Даже после того как снята омонимия с части речи, одно слово может иметь несколько вариантов перевод, как в примере с ''тӳпе''. Итак, как решить проблему с один ко многим. Самый очевидный способ это выбрать наиболее часто встречающиеся, или общий перевод &mdash; в данном случае ''xxx''.
Применение знаний о части речи для разрешения неоднозначности при переводе может частично, но не полностью решить проблему. Даже после того как снята омонимия с части речи, одно слово может иметь несколько вариантов перевода, как в примере с ''тӳпе''. Итак, как же решить проблему один к множеству? Самый очевидный способ - это выбрать наиболее часто встречающийся вариант, или общее значение &mdash; в данном случае ''тӳпе''.


В данное время Apertium имеет экспериментальный модуль для решения проблемы ''лексического выбора'', то есть выбора наиболее подходящего перевода лексической формы языка-источника, предлагая контекст, использования мультислов тоже может быть частичным решением, например в случаях, когда существуют часто встречающиеся словосочетания, которые отличаются от общего перевода (например, с испанского на французский) that is choosing the most appropriate translation of a source language lexical form given its context, but the use of multiwords can also offer a partial solution, for example in the cases where there are frequent collocations which are exceptions to the general translation (for example, Spanish to French: ''estación del año'' → ''saison de l'année'').
В данное время Apertium имеет экспериментальный модуль для решения проблемы ''лексического выбора'', то есть выбора наиболее подходящего перевода лексической формы языка-источника, предлагая контекст, но использования словосочетаний тоже может быть частичным решением, например в случаях, когда существуют часто встречающиеся коллокации, которые являются исключением по отношению к общему переводу (например, с испанского на французский) : ''estación del año'' → ''saison de l'année'').


===Диалектные формы===
===Диалектные формы===


Часто бывает желательно перевести диалектные формы одного языка на нормативный стиль другого языка. Например, из русского языка слово ''мясо'' "meat" может быть переведено на чувашский язык как ''аш'', ''какай'', или ''аш-какай''. Первые два варианты перевода считаются более диалектными и в основном употребляются в разговорном языке. Третий вариант более нормативный и более подходит для письменного варианта.
Часто бывает, что диалектные формы одного языка желательно перевести на другой язык в нормативном стиле. Например, из русского языка слово ''мясо'' может быть переведено на чувашский язык как ''аш'', ''какай'', или ''аш-какай''. Первые два варианты перевода считаются более диалектными и в основном употребляются в разговорном языке. Третий вариант более нормативный и более подходит для письменного варианта.


===Грамматическое различие===
===Грамматическая дивергенция===


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


* Слова могут при переводе менять род и число (например, русское слово ''брюки'' &mdash; множественного числа переводятся на башкирский ''салбар'' &mdash; единственного числа)
* Слова могут при переводе менять род и число (например, русское слово ''брюки'' &mdash; множественного числа переводятся на башкирский ''салбар'' &mdash; единственного числа)
* Слова в языке-источнике могут иметь омонимию в числе (французское слово ''temps'' на испанское ''tiempo'' или ''tiempos'') или роде (испанское слово ''estudiante'' &mdash; может быть мужского или женского рода во французским ''étudiant'', мужской род, ''étudiante'', женский род).
* Слова в языке-источнике могут иметь омонимию в числе (французское слово ''temps'' на испанское ''tiempo'' или ''tiempos'') или роде (испанское слово ''estudiante'' &mdash; может быть мужского или женского рода во французском ''étudiant'', мужской род, ''étudiante'', женский род).
* Другие характеристики, которые могут быть полезными при лексической передаче между двумя языками, это является ли переводное существительное абстрактным или исчисляемым &mdash; это нужно, например, чтобы решить какой поставить артикль при переводе с языка, где нет концепции артикля на язык, где такая концепция присутствует.
* Другие характеристики, которые могут быть полезными при лексическом переносе между двумя языками, это является ли переводное существительное абстрактным или исчисляемым &mdash; это нужно, например, чтобы решить какой поставить артикль при переводе с языка, где отсутствует категория артикля, на язык, где такая категория присутствует.
* Также в двуязычном словаре полезно указать, если прилагательные в языке которые изменяют окончания в степенях сравнения и нет Also, for languages that have both adjectives which inflect for comparison, and adjectives which don't &mdash; it is useful to specify this in the bilingual dictionary.
* Также в двуязычном словаре полезно указать, если есть два вида прилагательных, которые изменяют окончания в степенях сравнения и нет.


Обо всем этом необходимо подумать при составлении передаваемого словаря (двуязычного словаря).
Обо всем этом необходимо подумать при составлении словаря переноса (двуязычного словаря).


==Практика==
==Практика==


Для данной практической части будут использоваться примеры из языковой пары татарский-башкирский, поэтому найдите справочник <code>apertium-tt-ba</code>. Двуязычный словарь находится в папке <code>apertium-tt-ba.tt-ba.dix</code>. Откройте ее.
Для данной практической части будут использоваться примеры из языковой пары татарский-башкирский, поэтому найдите папку <code>apertium-tt-ba</code>. Двуязычный словарь находится в файле <code>apertium-tt-ba.tt-ba.dix</code>. Откройте ее.


===Один к одному===
===Один к одному===


Возможно вы помните, что, в первом разделе мы добавили слово ''чалбар'' в татарский словарь, мы будем пользоваться этим примером для простых один к одному записей в двуязычном словаре.
You may remember that we added the word ''чалбар'' to the Tatar dictionary in the first session, we'll keep with this example for the simple one-to-one bilingual dictionary entries.


So, for example, search for the entry ''>песи<'',
Например, найдите запись ''>песи<'',


<pre>
<pre>
Line 62: Line 62:
</pre>
</pre>


Скопируйте запись и измените лексические формы в языке-источнике и языке перевода, чтобы у вас получилось что-то подобное:
Copy the entry and change the lexical forms on the source and target side, so you have something that looks like:


<pre>
<pre>
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===


The next job is to perform a translation from many words, to one word. The word ''морон'' in Tatar can be transated as ''борын'' in Bashkir, but this word is not currently in the dictionaries. We first want to search for the word ''борын'' in the file <code>apertium-tt-ba.tt-ba.dix</code>, and we'll find the following entry:
Следующая стадия, это осуществить перевод от многих слов к одному слову. Татарское слово ''морон'' может быть переведено на башкирский язык как ''борын'', но в настоящий момент данное слово не занесено в словари. Сначала мы ищем слово ''борын'' в файле <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.


===One to many===
===Один ко множеству===
<div style="float: right">
<div style="float: right">
{|class=wikitable
{|class=wikitable
|-
|-
! Finnish !! !! North Sámi
! Финский !! !! Северо-саамский
|-
|-
| pitää || ↔ || doallat
| pitää || ↔ || doallat
Line 143: Line 143:
|}
|}
</div>
</div>
For this section of the practical, you need to be in the <code>apertium-sme-fin</code> directory. The bilingual dictionary is <code>apertium-sme-fin.sme-fin.dix</code>
Для данной части практики вы должны находиться в папке <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:


Make a file <code>apertium-sme-fin.fin-sme.lrx</code>, and paste the following text
Создайте файл <code>apertium-sme-fin.fin-sme.lrx</code>, и вставьте следующий текст


<pre>
<pre>
Line 194: Line 194:
</pre>
</pre>


You can compile this rule using <code>apertium-lrx-comp</code>:
Вы можете создать это правило используя <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ñosaison 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>

Если мы хотим добавить перевод galgatpitää, тогда нам нужно сделать еще одну запись, в этот раз с пометкой 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]

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

Смотрите также[edit]

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