Difference between revisions of "Курсы машинного перевода для языков России/Раздел 6"
m (moved Машинный перевод для языков России/Раздел 6 to Курсы машинного перевода для языков России/Раздел 6: ... to get a better structure.) |
|||
(11 intermediate revisions by 2 users not shown) | |||
Line 1: | Line 1: | ||
{{TOCD}} |
{{TOCD}} |
||
Системы базового структурного переноса, описанного в [[Машинный перевод для языков России/Раздел 5|session 5]] достаточно для работы с большинством расхождений, которые имеются в родственных языках (например, башкирский и татарский, финский и квен), при работе с языками, которые имеют больше морфологических и синтаксических расхождений необходимо использовать более мощную систему структурного переноса. В данном разделе мы познакомим вас с системой уровня Apertium 3+, которая была разработана для работы с более длинными шаблонами и языками, которые сильнее отличаются друг от друга. |
|||
==Теория== |
==Теория== |
||
=== |
===Перенос c помощью разбивки на блоки (Chunking-based transfer)=== |
||
Обычное применение данного метода состоит из трех модулей: разбивание на блоки (chunker), процессы между блоками (interchunk) и после разбивки на блоки (postchunk). При необходимости данная модель может быть расширена до двух и более модулей intertchunk. |
|||
====Chunker==== |
|||
====Разбивание на блоки (Chunker)==== |
|||
⚫ | |||
⚫ | Идея ''разбивания на блоки (chunker)'' - расширить существующие правила переноса для группировки ряда лексических единиц. Эти группы называются ''блоки (chunks)'' . Блоки могут объединять именные части речи, делать согласование, вставлять и удалять слова, и выполнять местную перестановку слов, например, |
||
{|class=wikitable |
{|class=wikitable |
||
|- |
|- |
||
! Входной шаблон |
! Входной шаблон !! Пример !! Блок на выходе !! Пример |
||
|- |
|- |
||
| <code>nom</code> || ҫурт || <code>SN{nom}</code> || дом |
| <code>nom</code> || ҫурт || <code>SN{nom}</code> || дом |
||
Line 39: | Line 40: | ||
Где <code>nom</code> = существительное, <code>adj</code> = прилагательное, <code>num</code> = числительное, <code>det</code> = артикль, <code>SN</code> = именная конструкция. |
Где <code>nom</code> = существительное, <code>adj</code> = прилагательное, <code>num</code> = числительное, <code>det</code> = артикль, <code>SN</code> = именная конструкция. |
||
Такой же процесс и для формирования глагольных блоков |
Такой же процесс и для формирования глагольных блоков: |
||
{|class=wikitable |
{|class=wikitable |
||
Line 65: | Line 66: | ||
|} |
|} |
||
Таким образом, если мы хотим согласовать именное словосочетание с основным глаголом, мы только можем использовать одно правило (для <code>SN V</code>) во втором модуле |
Таким образом, если мы хотим согласовать именное словосочетание с основным глаголом, мы только можем использовать одно правило (для <code>SN V</code>) во втором модуле переноса (процесс между блоками ''interchunk'') вместо отдельных правил для <code>nom verb</code>, <code>adj nom verb</code>, <code>det adj nom verb</code>, и тд. |
||
Очень важно помнить о том, что блоки (chunks) не могут быть вложенными (т.е. блок |
Очень важно помнить о том, что блоки (chunks) не могут быть вложенными (т.е. блок не может содержать другой блок). В определенных обстоятельствах, и при определенном усилии они могут быть сведены к интерблоку interchunk — например, можно присоединить одну или несколько однородных именных словосочетаний, но не вложить их друг в друга. |
||
Важно отметить, что лексические формы переводятся на язык перевода в первом модуле; последующие модули |
Важно отметить, что лексические формы переводятся на язык перевода в первом модуле; последующие модули работают с лексическими формами уже на языке перевода. |
||
====Interchunk==== |
====Процессы между блоками (Interchunk)==== |
||
Как только созданы эти блоки, следующий модуль '' |
Как только созданы эти блоки, следующий модуль ''между блоками'' помогает проводить операции между блоками так, как будто они являются лексическими единицами: блоки используются на уровне абстракции, таким образом эквивалентные слова и фразы также могут переводиться с использованием одинаковых для них правил. |
||
Этот модуль позволяет распознавать лицо, а также |
Этот модуль позволяет распознавать лицо, а также согласовывать слов в роде, определять порядок слов — например, согласовывать глагол прошедшего времени с местоимением в предложении на чувашском языке. В русском предложении ''Я вчера читалa'', разделение на блоки привел бы к следующему результату: |
||
<pre> |
<pre> |
||
Line 83: | Line 84: | ||
</pre> |
</pre> |
||
Формат блоков во многом похож на формат выделения лексических единиц, <code>^</code> указывает на начало, и <code>$</code> на конец. Разница в том, что блок может содержать внутри себя другие лексические единицы <code>{</code> и <code>}</code>. |
|||
Лексические единицы, которые заключены внутри блока (между обозначениями <code>{</code> и <code>}</code>) не могут быть обработаны и изменены модулем "между блоками"; на данном этапе мы можем только работать и изменять элементы описания блока, которые находятся в области после <code>^</code> и перед первым <code>{</code>. Описание блока содержит лемму блока (как <code>pron</code> в предыдущем примере) и морфологические тэги блока (для <code>pron</code> это {{tag|SN><p1><mf><sg><nom}}). |
|||
Эти тэги могут быть связаны с лексическими формами внутри блока: этим объясняются цифры {{tag|5}} и {{tag|7}} в лексических формах глагольного блока <code>verb</code>: они связаны с пятым и седьмым тэгами блока ({{tag|PD}} и {{tag|sg}}) и будут заменены на них в модуле "после разбивания на блоки". |
|||
These tags can be linked with the lexical forms inside the chunk: this is the reason for the numbers {{tag|5}} and {{tag|7}} in the lexical forms of the <code>verb</code> chunk: they are linked with the fifth and seventh tags of the chunk ({{tag|PD}} and {{tag|sg}}) and will be substituted for them in the postchunk module. |
|||
Модуль "между блоками" имеет правила для разных видов блоков: 'именные части речи' 'наречие' 'глагол', которые копируют лицо из первого блока "именные части речи" для имени в глагольном блоке, заменяя тэг 'PD'; в данном примере присваивая тэгу {{tag|p1}} (первое лицо) значение: |
|||
Interchunk has a rule for 'nominal chunk' 'adv' 'verb chunk', which copies the person from the first nominal chunk to the verb chunk, replacing the 'PD' tag; in this example, giving it the {{tag|p1}} (first person) value: |
|||
<pre> |
<pre> |
||
Line 97: | Line 98: | ||
</pre> |
</pre> |
||
Итоговый модуль работы с блоками припишет этот тэг глаголу внутри блока. |
|||
The postchunk module will assign this tag to the verb inside the chunk. |
|||
====Postchunk==== |
====Итоговый модуль работы с блоками (Postchunk)==== |
||
Модель "после разбивки на блоки" позволяет нам использовать результаты взаимодействия между блоками и еще раз поработать с контентом. |
|||
Postchunk allows us to take the output of interchunk, and once again operate on the contents. |
|||
Изменения, которые блоки претерпели после прохождения модуля "между блоками" будут применены к контенту блока: тэги, содержащие число, будут заменены на значение, соответствующее тэгу вне блока. Модуль ''после разбивания на блоки'' удаляет блоки ''лемма'' и тэги, и оставляет в качестве итогового продукта ряд лексических единиц. |
|||
Changes made on the chunks in the interchunk module, will be applied to the contents of the chunk: tags containing a number will be substituted for the value of the corresponding tag outside of the chunk. The ''postchunk'' module removes the chunk ''lemma'' and tags, and leaves the output as a sequence of lexical units. |
|||
Модуль "после разбивания на блоки" может работать одновременно с одним блоком. В добавление к элементам <tt>clip</tt>, которые соотносятся с отдельными словами, содержащимися в блоке, есть также элемент <tt>clip</tt> под номером 0 (ноль), который позволяет получать информацию из леммы, которые может использоваться для получения информации "вне" блока (измененной в модуле "между блоками") для слов внутри. Также, так как число слов в блоке может быть разным, есть элемент, <tt>lu-count</tt>, которые подсчитывает количество слов в блоке, и, соответственно влияет на наши действия. |
|||
Postchunk operates on a single chunk at a time. In addition to the <tt>clip</tt> elements which refer to individual words contained in the chunk, there is also a <tt>clip</tt> numbered 0 (zero), which allows us to access information from the chunk lemma, which can be used to take information from "outside" the chunk (changed in interchunk) to the words inside. Also, because the number of words in a chunk may vary, there is an element, <tt>lu-count</tt>, which allows us to test how many words the chunk contains, and act accordingly. |
|||
==Практика== |
|||
==Practice== |
|||
На практической части мы посмотрим, как происходит процесс переноса в три этапа в Apertium в паре татарский —киргизский, <code>apertium-tt-ky</code>, и затем, опишем правило переноса в рамках трех и более уровней. Поэтому перейдите к папке <code>apertium-tt-ky</code> и убедитесь, что данная языковая пара создана. |
|||
For the practice section, we are going to look at how a transfer is performed in three stages by the Apertium Tatar—Kyrgyz pair, <code>apertium-tt-ky</code>, and then describe a transfer rule in terms of three or more levels. So change directory to <code>apertium-tt-ky</code> and make sure the pair is compiled. |
|||
===Знакомство с трех-этапным переносом=== |
|||
===Looking at three-stage transfer=== |
|||
Мы переведем предложение ''Әхмәт тиз генә иске зур бер агачка йөгерә.'' с татарского на киргизский и проследим за процессом перевода на трех уровнях. |
|||
==== |
====Вводные данные==== |
||
Так как полный переводчик с татарского на киргизский еще не закончен, мы будем пользоваться некоторыми подготовленными вводными данными из пары татарский и башкирский. |
|||
Because we don't yet have a full translator for Tatar and Kyrgyz, we're going to use some preprepared input from the Tatar and Bashkir pair. |
|||
<pre> |
<pre> |
||
Line 125: | Line 126: | ||
</pre> |
</pre> |
||
====Разделение на блоки==== |
|||
====Chunker==== |
|||
Итог работы маркировщика части речи передается лексическому переносу, а потом идет первый уровень переноса: |
|||
Then output of the part-of-speech tagger is passed to the lexical transfer, and then the first level of transfer: |
|||
<pre> |
<pre> |
||
Line 137: | Line 138: | ||
</pre> |
</pre> |
||
Существует четыре правила, применяемые модулем переноса первого уровня: |
|||
There are four rules applied by the first-level transfer module: |
|||
* <code>ПРАВИЛО: NP-ANT</code>: |
* <code>ПРАВИЛО: NP-ANT</code>: Данное правило соответствует антропониму (имя человека). Оно создает новый блок имен {{tag|SN}}. |
||
* <code>ПРАВИЛО: ADV POSTADV</code>: |
* <code>ПРАВИЛО: ADV POSTADV</code>: Это правило соответствует ряду наречий и прилагательных, оно создает блок наречий {{tag|ADV}} который содержит две лексические единицы. |
||
* <code>ПРАВИЛО: ADJ ADJ DET NOM</code>: Данное правило соответствует набору из двух прилагательных, артикля и существительного. Они помещаются внутрь блока имен {{tag|SN}} и падеж блока соответствует падежу существительного. Данное существительное имеет специальный показатель {{tag|2}} на случай, если изменяется падеж блока, он копируется внутри. |
|||
* <code>ПРАВИЛО: ADJ ADJ DET NOM</code>: This rule matches a sequence of two adjetives, a determiner and a noun. These are put inside a nominal chunk {{tag|SN}} and the case of the chunk is set to the case of the noun. A pointer {{tag|2}} is put on the noun so that when the case of the chunk is changed, it will be propagated inside. |
|||
* <code>ПРАВИЛО: V-PRES</code>: Это правило стандартного глагола настоящего времени, оно соответствует любому глаголу в настоящем времени. В настоящем примере оно изменяет синтетическое настоящее время в татарском на продолженное настоящее время со вспомогательном глаголом в киргизском. This is because the Kyrgyz cognate to the Tatar present means either "future" or "habitual/general". This Tatar form is "habitual/general" and "present progressive". When translating the "present progressive" reading of the Tatar "present", then we need to translate to a different form in Kyrgyz, namely the participle + ''жат'' auxiliary. |
|||
* <code>ПРАВИЛО: V-PRES</code>: This is the default present tense verb rule, it matches any verb in the present tense. It currently changes the synthetic present in Tatar into a progressive present tense with an auxiliary verb in Kyrgyz. '''WHY???''' |
|||
Обратите внимание, что после первой стадии переноса появляется несколько проблем. Грамматическое время правильное, но падеж существительного неверен, и обстоятельство не на месте. В киргизском языке оно должно стоять перед глаголом. |
|||
Note that after the first stage of transfer there are a couple of problems. The tense is correct, but the case of the noun is wrong, and the adverbial is in the wrong place. In Kyrgyz it should come before the verb. |
|||
==== |
====Между блоками==== |
||
<pre> |
<pre> |
||
Line 157: | Line 158: | ||
</pre> |
</pre> |
||
В модуле "между блоками" применяется одно правило: |
|||
One rule is applied in the interchunk module: |
|||
* <code>ПРАВИЛО: ADV SN V</code>: |
* <code>ПРАВИЛО: ADV SN V</code>: Правило соответствует блоку обстоятельства (<code>ADV</code>), за которым следует блок имен (<code>SN</code>) а потом глагольный блок (<code>V</code>). Оно содержит макроэлемент <code>conv_arg1</code>, который настраивает падеж блока имен и предлагает послеслог в зависимости от леммы глагольного блока. Оно также меняет местоположения субстантивного блока и блока обстоятельств, помещая второй перед глаголом. |
||
Мы можем видеть, что в результате работы модуля "между блоками", обстоятельство было передвинуто и субстантивный блок стоит в правильном падеже с послеслогом. |
|||
We can see that in the output of interchunk, the adverbial has been moved and the nominal chunk is in the correct case with a postposition. |
|||
====После разбивания на блоки==== |
|||
====Postchunk==== |
|||
Последний модуль переноса использует результат работы модуля "между блоками", и заменяет связанный тэг (e.g. {{tag|2}}) на значение из блока. |
|||
The final module of transfer takes the chunks output by the interchunk module, and replaces the linked tag (e.g. {{tag|2}}) with its value from the chunk. |
|||
<pre> |
<pre> |
||
Line 176: | Line 177: | ||
</pre> |
</pre> |
||
Теперь предложение готово к морфологическому построению. Папка <code>tr-ky.autogen.hfst</code> может быть скопирована из пары <code>apertium-tr-ky</code> в <code>trunk/</code>. |
|||
==== |
====Итог==== |
||
<pre> |
<pre> |
||
Line 188: | Line 189: | ||
</pre> |
</pre> |
||
===Описание правила многоступенчатого переноса=== |
|||
===Describing a multi-stage transfer rule=== |
|||
При создании правила многоступенчатого переноса очень важно понять как разбить правило между разными ступенями переноса. Например, перестановки (на уровне слов 1—5) наверное следует провести на первой ступени. Блоки должны быть в какой-то степени тематическими, например, спрягаемые глаголы не должны группироваться с прилагательными и существительными. |
|||
The important thing to work out when writing a multi-stage transfer rule is how to split the rule between the different parts of transfer. For example, local reorderings (at the level of 1—5 words) should probably be done in the first stage. The chunks should be in some way thematic, so for example, finite verbs should probably not be chunked with adjectives or nominals. |
|||
==Для дальнейшего чтения== |
|||
==Further reading== |
|||
* Ginestí i Rosell, M. (ed.) (2007) [https://wiki.apertium.org/w/images/d/d0/Apertium2-documentation.pdf Documentation of the Open-Source Shallow-Transfer Machine Translation Platform ''Apertium''] |
* Ginestí i Rosell, M. (ed.) (2007) [https://wiki.apertium.org/w/images/d/d0/Apertium2-documentation.pdf Документы по общедоступному поверхностному машинному переводу на базе платформы Apertium / Documentation of the Open-Source Shallow-Transfer Machine Translation Platform ''Apertium''] |
||
Latest revision as of 12:00, 31 January 2012
Contents |
Системы базового структурного переноса, описанного в session 5 достаточно для работы с большинством расхождений, которые имеются в родственных языках (например, башкирский и татарский, финский и квен), при работе с языками, которые имеют больше морфологических и синтаксических расхождений необходимо использовать более мощную систему структурного переноса. В данном разделе мы познакомим вас с системой уровня Apertium 3+, которая была разработана для работы с более длинными шаблонами и языками, которые сильнее отличаются друг от друга.
Теория[edit]
Перенос c помощью разбивки на блоки (Chunking-based transfer)[edit]
Обычное применение данного метода состоит из трех модулей: разбивание на блоки (chunker), процессы между блоками (interchunk) и после разбивки на блоки (postchunk). При необходимости данная модель может быть расширена до двух и более модулей intertchunk.
Разбивание на блоки (Chunker)[edit]
Идея разбивания на блоки (chunker) - расширить существующие правила переноса для группировки ряда лексических единиц. Эти группы называются блоки (chunks) . Блоки могут объединять именные части речи, делать согласование, вставлять и удалять слова, и выполнять местную перестановку слов, например,
Входной шаблон | Пример | Блок на выходе | Пример |
---|---|---|---|
nom |
ҫурт | SN{nom} |
дом |
adj nom |
хитре ҫурт | SN{nom adj} |
красивый дом |
nom |
ҫуртӑм | SN{det nom} |
мой дом |
det nom |
манăн ҫурт | SN{det nom} |
мой дом |
det nom |
манăн ҫуртӑм | SN{det nom} |
мой дом |
num nom |
икĕ ҫурт | SN{num nom} |
два дома |
num nom |
пилĕ ҫурт | SN{num nom} |
пять домов |
adj nom |
хитре ҫуртсем | SN{adj nom} |
красивые домы |
adv adj nom |
питĕ хитре ҫурт | SN{adv adj nom} |
очень красивый дом |
num adv adj nom |
пилĕ питĕ хитре ҫурт | SN{num adv adj nom} |
пять очень красивых домов |
Где nom
= существительное, adj
= прилагательное, num
= числительное, det
= артикль, SN
= именная конструкция.
Такой же процесс и для формирования глагольных блоков:
Входной шаблон | Пример | Блок на выходе Output chunk | Пример |
---|---|---|---|
verb |
вулать | V{verb} |
читает |
verb |
вуламасть | V{neg_adv verb} |
не читает |
verb |
вуларĕ | V{verb} |
читал |
verb |
вуламĕ | V{aux inf} |
будет читать |
verb |
вуламарĕ | V{neg_adv aux inf} |
не будет читать |
verb |
вуласшăн | V{aux part inf} |
хотел бы говорить |
verb |
вулӑттӑм | V{verb part} |
говорил бы |
adv verb |
ан вула ! | V{adv verb} |
не читай ! |
ger verb |
вулама пуçлать | V{verb inf} |
начинает читать. |
Таким образом, если мы хотим согласовать именное словосочетание с основным глаголом, мы только можем использовать одно правило (для SN V
) во втором модуле переноса (процесс между блоками interchunk) вместо отдельных правил для nom verb
, adj nom verb
, det adj nom verb
, и тд.
Очень важно помнить о том, что блоки (chunks) не могут быть вложенными (т.е. блок не может содержать другой блок). В определенных обстоятельствах, и при определенном усилии они могут быть сведены к интерблоку interchunk — например, можно присоединить одну или несколько однородных именных словосочетаний, но не вложить их друг в друга.
Важно отметить, что лексические формы переводятся на язык перевода в первом модуле; последующие модули работают с лексическими формами уже на языке перевода.
Процессы между блоками (Interchunk)[edit]
Как только созданы эти блоки, следующий модуль между блоками помогает проводить операции между блоками так, как будто они являются лексическими единицами: блоки используются на уровне абстракции, таким образом эквивалентные слова и фразы также могут переводиться с использованием одинаковых для них правил.
Этот модуль позволяет распознавать лицо, а также согласовывать слов в роде, определять порядок слов — например, согласовывать глагол прошедшего времени с местоимением в предложении на чувашском языке. В русском предложении Я вчера читалa, разделение на блоки привел бы к следующему результату:
^pron<SN><p1><mf><sg><nom>{^Эпĕ<prn><pers><2><3><4><5>$}$ ^adv<ADV>{^ĕнер<adv>$}$ ^verb<SV><imperf><tv><evid><PD><f><sg>{^вула<v><3><4><5><7>$}$
Формат блоков во многом похож на формат выделения лексических единиц, ^
указывает на начало, и $
на конец. Разница в том, что блок может содержать внутри себя другие лексические единицы {
и }
.
Лексические единицы, которые заключены внутри блока (между обозначениями {
и }
) не могут быть обработаны и изменены модулем "между блоками"; на данном этапе мы можем только работать и изменять элементы описания блока, которые находятся в области после ^
и перед первым {
. Описание блока содержит лемму блока (как pron
в предыдущем примере) и морфологические тэги блока (для pron
это <SN><p1><mf><sg><nom>
).
Эти тэги могут быть связаны с лексическими формами внутри блока: этим объясняются цифры <5>
и <7>
в лексических формах глагольного блока verb
: они связаны с пятым и седьмым тэгами блока (<PD>
и <sg>
) и будут заменены на них в модуле "после разбивания на блоки".
Модуль "между блоками" имеет правила для разных видов блоков: 'именные части речи' 'наречие' 'глагол', которые копируют лицо из первого блока "именные части речи" для имени в глагольном блоке, заменяя тэг 'PD'; в данном примере присваивая тэгу <p1>
(первое лицо) значение:
^pron<SN><p1><mf><sg><nom>{^Эпĕ<prn><pers><2><3><4><5>$}$ ^adv<ADV>{^ĕнер<adv>$}$ ^verb<SV><imperf><tv><evid><p1><f><sg>{^вула<v><3><4><5><7>$}$
Итоговый модуль работы с блоками припишет этот тэг глаголу внутри блока.
Итоговый модуль работы с блоками (Postchunk)[edit]
Модель "после разбивки на блоки" позволяет нам использовать результаты взаимодействия между блоками и еще раз поработать с контентом.
Изменения, которые блоки претерпели после прохождения модуля "между блоками" будут применены к контенту блока: тэги, содержащие число, будут заменены на значение, соответствующее тэгу вне блока. Модуль после разбивания на блоки удаляет блоки лемма и тэги, и оставляет в качестве итогового продукта ряд лексических единиц.
Модуль "после разбивания на блоки" может работать одновременно с одним блоком. В добавление к элементам clip, которые соотносятся с отдельными словами, содержащимися в блоке, есть также элемент clip под номером 0 (ноль), который позволяет получать информацию из леммы, которые может использоваться для получения информации "вне" блока (измененной в модуле "между блоками") для слов внутри. Также, так как число слов в блоке может быть разным, есть элемент, lu-count, которые подсчитывает количество слов в блоке, и, соответственно влияет на наши действия.
Практика[edit]
На практической части мы посмотрим, как происходит процесс переноса в три этапа в Apertium в паре татарский —киргизский, apertium-tt-ky
, и затем, опишем правило переноса в рамках трех и более уровней. Поэтому перейдите к папке apertium-tt-ky
и убедитесь, что данная языковая пара создана.
Знакомство с трех-этапным переносом[edit]
Мы переведем предложение Әхмәт тиз генә иске зур бер агачка йөгерә. с татарского на киргизский и проследим за процессом перевода на трех уровнях.
Вводные данные[edit]
Так как полный переводчик с татарского на киргизский еще не закончен, мы будем пользоваться некоторыми подготовленными вводными данными из пары татарский и башкирский.
$ cat input ^Әхмәт<np><ant><m><nom>$ ^тиз<adv>$ ^гына<postadv>$ ^иске<adj>$ ^зур<adj>$ ^бер<det><ind>$ ^агач<n><dat>$ ^йөгер<v><iv><pres><p3><sg>$^..<sent>$
Разделение на блоки[edit]
Итог работы маркировщика части речи передается лексическому переносу, а потом идет первый уровень переноса:
$ cat input | lt-proc -b tt-ky.autobil.bin | apertium-transfer -b apertium-tt-ky.tt-ky.t1x tt-ky.t1x.bin ^ant<SN>{^Акмат<np><ant><m><nom>$}$ ^adv<ADV>{^катуу<adv>$ ^гана<postadv>$}$ ^a_a_d_n<SN><dat>{^эски<adj><pst>$ ^чоң<adj><pst>$ ^бир<det><ind>$ ^дарак<n><2>$}$ ^чурка<V>{^чурка<v><iv><prt_perf>$ ^бар<v><iv><prt_impf>$ ^жат<vaux><aor><p3><sg>$}$^sent<SENT>{^..<sent>$}$
Существует четыре правила, применяемые модулем переноса первого уровня:
ПРАВИЛО: NP-ANT
: Данное правило соответствует антропониму (имя человека). Оно создает новый блок имен<SN>
.ПРАВИЛО: ADV POSTADV
: Это правило соответствует ряду наречий и прилагательных, оно создает блок наречий<ADV>
который содержит две лексические единицы.ПРАВИЛО: ADJ ADJ DET NOM
: Данное правило соответствует набору из двух прилагательных, артикля и существительного. Они помещаются внутрь блока имен<SN>
и падеж блока соответствует падежу существительного. Данное существительное имеет специальный показатель<2>
на случай, если изменяется падеж блока, он копируется внутри.ПРАВИЛО: V-PRES
: Это правило стандартного глагола настоящего времени, оно соответствует любому глаголу в настоящем времени. В настоящем примере оно изменяет синтетическое настоящее время в татарском на продолженное настоящее время со вспомогательном глаголом в киргизском. This is because the Kyrgyz cognate to the Tatar present means either "future" or "habitual/general". This Tatar form is "habitual/general" and "present progressive". When translating the "present progressive" reading of the Tatar "present", then we need to translate to a different form in Kyrgyz, namely the participle + жат auxiliary.
Обратите внимание, что после первой стадии переноса появляется несколько проблем. Грамматическое время правильное, но падеж существительного неверен, и обстоятельство не на месте. В киргизском языке оно должно стоять перед глаголом.
Между блоками[edit]
$ cat input | lt-proc -b tt-ky.autobil.bin | apertium-transfer -b apertium-tt-ky.tt-ky.t1x tt-ky.t1x.bin |\ apertium-interchunk apertium-tt-ky.tt-ky.t2x tt-ky.t2x.bin ^ant<SN>{^Акмат<np><ant><m><nom>$}$ ^a_a_d_n<SN><acc>{^эски<adj><pst>$ ^чоң<adj><pst>$ ^бир<det><ind>$ ^дарак<n><2>$}$ ^post<POST>{^көздөй<post>$}$ ^adv<ADV>{^катуу<adv>$ ^гана<postadv>$}$ ^чурка<V>{^чурка<v><iv><prt_perf>$ ^бар<v><iv><prt_impf>$ ^жат<vaux><aor><p3><sg>$}$^sent<SENT>{^..<sent>$}$
В модуле "между блоками" применяется одно правило:
ПРАВИЛО: ADV SN V
: Правило соответствует блоку обстоятельства (ADV
), за которым следует блок имен (SN
) а потом глагольный блок (V
). Оно содержит макроэлементconv_arg1
, который настраивает падеж блока имен и предлагает послеслог в зависимости от леммы глагольного блока. Оно также меняет местоположения субстантивного блока и блока обстоятельств, помещая второй перед глаголом.
Мы можем видеть, что в результате работы модуля "между блоками", обстоятельство было передвинуто и субстантивный блок стоит в правильном падеже с послеслогом.
После разбивания на блоки[edit]
Последний модуль переноса использует результат работы модуля "между блоками", и заменяет связанный тэг (e.g. <2>
) на значение из блока.
$ cat input | lt-proc -b tt-ky.autobil.bin | apertium-transfer -b apertium-tt-ky.tt-ky.t1x tt-ky.t1x.bin |\ apertium-interchunk apertium-tt-ky.tt-ky.t2x tt-ky.t2x.bin | apertium-postchunk apertium-tt-ky.tt-ky.t3x tt-ky.t3x.bin ^Акмат<np><ant><m><nom>$ ^эски<adj><pst>$ ^чоң<adj><pst>$ ^бир<det><ind>$ ^дарак<n><acc>$ ^көздөй<post>$ ^катуу<adv>$ ^гана<postadv>$ ^чурка<v><iv><prt_perf>$ ^бар<v><iv><prt_impf>$ ^жат<vaux><aor><p3><sg>$^..<sent>$
Теперь предложение готово к морфологическому построению. Папка tr-ky.autogen.hfst
может быть скопирована из пары apertium-tr-ky
в trunk/
.
Итог[edit]
$ cat input | lt-proc -b tt-ky.autobil.bin | apertium-transfer -b apertium-tt-ky.tt-ky.t1x tt-ky.t1x.bin |\ apertium-interchunk apertium-tt-ky.tt-ky.t2x tt-ky.t2x.bin | apertium-postchunk apertium-tt-ky.tt-ky.t3x tt-ky.t3x.bin |\ hfst-proc -g tr-ky.autogen.hfst Акмат эски чоң бир даракты көздөй катуу гана чуркап бара жатат.
Описание правила многоступенчатого переноса[edit]
При создании правила многоступенчатого переноса очень важно понять как разбить правило между разными ступенями переноса. Например, перестановки (на уровне слов 1—5) наверное следует провести на первой ступени. Блоки должны быть в какой-то степени тематическими, например, спрягаемые глаголы не должны группироваться с прилагательными и существительными.