Difference between revisions of "Курсы машинного перевода для языков России/Раздел 6"
m (moved Машинный перевод для языков России/Раздел 6 to Курсы машинного перевода для языков России/Раздел 6: ... to get a better structure.) |
|||
(6 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>^</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}}) и будут заменены на них в модуле |
Эти тэги могут быть связаны с лексическими формами внутри блока: этим объясняются цифры {{tag|5}} и {{tag|7}} в лексических формах глагольного блока <code>verb</code>: они связаны с пятым и седьмым тэгами блока ({{tag|PD}} и {{tag|sg}}) и будут заменены на них в модуле "после разбивания на блоки". |
||
Модуль "между блоками" имеет правила для разных видов блоков: 'именные части речи' 'наречие' 'глагол', которые копируют лицо из первого блока "именные части речи" для имени в глагольном блоке, заменяя тэг 'PD'; в данном примере присваивая тэгу {{tag|p1}} (первое лицо) значение: |
|||
<pre> |
<pre> |
||
Line 97: | Line 98: | ||
</pre> |
</pre> |
||
Итоговый модуль работы с блоками припишет этот тэг глаголу внутри блока. |
|||
====Итоговый модуль работы с блоками (Postchunk)==== |
|||
====Постфрагментирование Postchunk==== |
|||
Модель "после разбивки на блоки" позволяет нам использовать результаты взаимодействия между блоками и еще раз поработать с контентом. |
|||
Изменения, которые блоки претерпели после прохождения модуля |
Изменения, которые блоки претерпели после прохождения модуля "между блоками" будут применены к контенту блока: тэги, содержащие число, будут заменены на значение, соответствующее тэгу вне блока. Модуль ''после разбивания на блоки'' удаляет блоки ''лемма'' и тэги, и оставляет в качестве итогового продукта ряд лексических единиц. |
||
Модуль "после разбивания на блоки" может работать одновременно с одним блоком. В добавление к элементам <tt>clip</tt>, которые соотносятся с отдельными словами, содержащимися в блоке, есть также элемент <tt>clip</tt> под номером 0 (ноль), который позволяет получать информацию из леммы, которые может использоваться для получения информации "вне" блока (измененной в модуле "между блоками") для слов внутри. Также, так как число слов в блоке может быть разным, есть элемент, <tt>lu-count</tt>, которые подсчитывает количество слов в блоке, и, соответственно влияет на наши действия. |
|||
==Практика== |
==Практика== |
||
На практической части мы посмотрим, как происходит процесс переноса в три этапа в Apertium в паре татарский —киргизский, <code>apertium-tt-ky</code>, и затем, опишем правило переноса в рамках трех и более уровней. Поэтому перейдите к |
На практической части мы посмотрим, как происходит процесс переноса в три этапа в Apertium в паре татарский —киргизский, <code>apertium-tt-ky</code>, и затем, опишем правило переноса в рамках трех и более уровней. Поэтому перейдите к папке <code>apertium-tt-ky</code> и убедитесь, что данная языковая пара создана. |
||
===Знакомство с трех-этапным переносом=== |
===Знакомство с трех-этапным переносом=== |
||
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> |
||
Существует четыре правила, |
Существует четыре правила, применяемые модулем переноса первого уровня: |
||
* <code>ПРАВИЛО: NP-ANT</code>: Данное правило соответствует антропониму (имя человека). Оно создает новый блок имен {{tag|SN}}. |
* <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>: Данное правило соответствует набору из двух прилагательных, артикля и существительного. Они помещаются внутрь блока имен {{tag|SN}} и падеж блока соответствует падежу существительного. Данное существительное имеет специальный показатель {{tag|2}} на случай, если изменяется падеж блока, он копируется внутри. |
||
* <code>ПРАВИЛО: V-PRES</code>: Это правило стандартного глагола настоящего времени, оно соответствует любому глаголу в настоящем времени. В настоящем примере оно изменяет синтетическое настоящее время в татарском на продолженное настоящее время со вспомогательном глаголом в киргизском '' |
* <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. |
||
Обратите внимание, что после первой стадии переноса появляется несколько проблем. Грамматическое время правильное, но падеж существительного неверен, и обстоятельство не на месте. В киргизском языке оно должно стоять перед глаголом. |
Обратите внимание, что после первой стадии переноса появляется несколько проблем. Грамматическое время правильное, но падеж существительного неверен, и обстоятельство не на месте. В киргизском языке оно должно стоять перед глаголом. |
||
==== |
====Между блоками==== |
||
<pre> |
<pre> |
||
Line 157: | Line 158: | ||
</pre> |
</pre> |
||
В модуле |
В модуле "между блоками" применяется одно правило: |
||
* <code>ПРАВИЛО: ADV SN V</code>: Правило соответствует блоку обстоятельства (<code>ADV</code>) за которым следует блок имен (<code>SN</code>) а потом глагольный блок (<code>V</code>). |
* <code>ПРАВИЛО: ADV SN V</code>: Правило соответствует блоку обстоятельства (<code>ADV</code>), за которым следует блок имен (<code>SN</code>) а потом глагольный блок (<code>V</code>). Оно содержит макроэлемент <code>conv_arg1</code>, который настраивает падеж блока имен и предлагает послеслог в зависимости от леммы глагольного блока. Оно также меняет местоположения субстантивного блока и блока обстоятельств, помещая второй перед глаголом. |
||
Мы можем видеть, что |
Мы можем видеть, что в результате работы модуля "между блоками", обстоятельство было передвинуто и субстантивный блок стоит в правильном падеже с послеслогом. |
||
====После разбивания на блоки==== |
|||
====Postchunk==== |
|||
Последний модуль переноса использует результат работы модуля |
Последний модуль переноса использует результат работы модуля "между блоками", и заменяет связанный тэг (e.g. {{tag|2}}) на значение из блока. |
||
<pre> |
<pre> |
||
Line 178: | Line 179: | ||
Теперь предложение готово к морфологическому построению. Папка <code>tr-ky.autogen.hfst</code> может быть скопирована из пары <code>apertium-tr-ky</code> в <code>trunk/</code>. |
Теперь предложение готово к морфологическому построению. Папка <code>tr-ky.autogen.hfst</code> может быть скопирована из пары <code>apertium-tr-ky</code> в <code>trunk/</code>. |
||
==== |
====Итог==== |
||
<pre> |
<pre> |
||
Line 190: | Line 191: | ||
===Описание правила многоступенчатого переноса=== |
===Описание правила многоступенчатого переноса=== |
||
При создании правила многоступенчатого переноса очень важно понять как разбить правило между разными ступенями переноса. Например, перестановки (на уровне слов 1—5) наверное следует провести на первой ступени. Блоки должны быть в какой-то степени тематическими, например, спрягаемые глаголы не должны группироваться с прилагательными и |
При создании правила многоступенчатого переноса очень важно понять как разбить правило между разными ступенями переноса. Например, перестановки (на уровне слов 1—5) наверное следует провести на первой ступени. Блоки должны быть в какой-то степени тематическими, например, спрягаемые глаголы не должны группироваться с прилагательными и существительными. |
||
==Для дальнейшего чтения== |
==Для дальнейшего чтения== |
||
* 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) наверное следует провести на первой ступени. Блоки должны быть в какой-то степени тематическими, например, спрягаемые глаголы не должны группироваться с прилагательными и существительными.