Difference between revisions of "Курсы машинного перевода для языков России/Раздел 5"
m (moved Машинный перевод для языков России/Раздел 5 to Курсы машинного перевода для языков России/Раздел 5: ... to get a better structure.) |
|||
(16 intermediate revisions by 2 users not shown) | |||
Line 1: | Line 1: | ||
{{TOCD}} |
{{TOCD}} |
||
Цель данного раздела познакомить с понятием сопоставительного морфологического и синтаксического анализов, и показать как основные (т.е. |
Цель данного раздела познакомить с понятием сопоставительного морфологического и синтаксического анализов, и показать как основные (т.е. одноуровневые) правила морфологической и синтаксической передачи могут создаваться в Apertium. |
||
==Теория== |
==Теория== |
||
Line 7: | Line 7: | ||
===Сопоставительный анализ=== |
===Сопоставительный анализ=== |
||
Сопоставительный анализ подразумевает анализ и сравнение двух языков с целью обнаружения |
Сопоставительный анализ подразумевает анализ и сравнение двух языков с целью обнаружения их общих и отличительных характеристик. При работе над неглубоким машинным переводом мы можем рассмотреть, например, как морфологические так и синтаксические различия. |
||
====Морфологические различия |
====Морфологические различия==== |
||
Морфологические различия - это различия между морфологическими характеристикам двух языков. Например, если в одном языке категория определенности |
Морфологические различия - это различия между морфологическими характеристикам двух языков. Например, если в одном языке категория определенности выражена морфологически, а в другом нет, или одни язык имеет категорию падежа и рода, а другой нет. Или когда инструменты выражения падежа/рода отличаются между языками. Примеры: |
||
Morphological contrasts are differences in which morphological features are expressed in each language, and how they differ. For example, if one language expresses definiteness morphologically, and another doesn't, or one language has case or gender while the other doesn't. Or if the case/gender inventories differ between the languages. Examples: |
|||
* В казахском языке нет грамматического рода, а в русском их три (мужской, женский, средний). Род в русском языке играет роль при согласовании внутри словосочетания с существительным |
* В казахском языке нет грамматического рода, а в русском их три (мужской, женский, средний). Род в русском языке играет роль при согласовании внутри словосочетания с существительным |
||
Line 20: | Line 19: | ||
** ''Я читаю эти две книги''{{slc|ru}} → ''Ам ти книгаг ловиньтиягум''{{slc|mns}} |
** ''Я читаю эти две книги''{{slc|ru}} → ''Ам ти книгаг ловиньтиягум''{{slc|mns}} |
||
** ''Я читаю эти книги''{{slc|ru}} → ''Ам ти книгат ловиньтиянум''{{slc|mns}} |
** ''Я читаю эти книги''{{slc|ru}} → ''Ам ти книгат ловиньтиянум''{{slc|mns}} |
||
* Венгерский содержит огромное количество падежей, которых нет в финском (например, временный падеж ''-kor'', который на финский может быть переведен творительным аблативом, адессивом или |
* Венгерский содержит огромное количество падежей, которых нет в финском (например, временный падеж ''-kor'', который на финский может быть переведен творительным аблативом, адессивом или эссивом изобразительный палеж ablative, adessive, or essive). В венгерском и финском языках падеж не играет роли при согласовании в словосочетании с существительным. |
||
** ''Ötkor''{{slc|hu}} → ''Viideltä''{{slc|fi}} <!-- "at five", Abl --> |
** ''Ötkor''{{slc|hu}} → ''Viideltä''{{slc|fi}} <!-- "at five", Abl --> |
||
** ''Éjfélkor''{{slc|hu}} → ''Keskiyöllä''{{slc|fi}} <!-- "at midnight", Ade --> |
** ''Éjfélkor''{{slc|hu}} → ''Keskiyöllä''{{slc|fi}} <!-- "at midnight", Ade --> |
||
** ''Karácsonykor''{{slc|hu}} → ''Jouluna''{{slc|fi}} <!-- "at christmas", Ess --> |
** ''Karácsonykor''{{slc|hu}} → ''Jouluna''{{slc|fi}} <!-- "at christmas", Ess --> |
||
====Синтаксические различия |
====Синтаксические различия==== |
||
Синтаксические различия |
Синтаксические различия наблюдаются в том, как устроена синтаксическая система разных языков, например, наличие или отсутствие артиклей, порядок слабых местоимений (clitic), количество падежей, аналитические временные формы глаголов, употребление личных местоимений и тд. |
||
* Например в абхазском языке есть |
* Например в абхазском языке есть примыкающий сзади (postfixed) неопределенный артикль, и прикрепленный спереди (prefixed) определенный артикль, а в русском нет. |
||
** ''Сара кьыла'''к''' акәац аасхәоит''{{slc|ab}} → ''Я покупаю килограмм мяса''{{slc|ru}} |
** ''Сара кьыла'''к''' акәац аасхәоит''{{slc|ab}} → ''Я покупаю килограмм мяса''{{slc|ru}} |
||
** ''Иара '''а'''мшын ахь дцоит.''{{slc|ab}} → ''Он идёт в море.''{{slc|ru}} <!-- he is going to the sea --> |
** ''Иара '''а'''мшын ахь дцоит.''{{slc|ab}} → ''Он идёт в море.''{{slc|ru}} <!-- he is going to the sea --> |
||
* В русском языке обязательно употребление личного местоимения в качестве подлежащего, а в венгерском нет, |
* В русском языке обязательно употребление личного местоимения в качестве подлежащего, а в венгерском нет, |
||
** ''Я сплю.''{{slc|ru}} → ''Alszom.''{{slc|hu}} |
** ''Я сплю.''{{slc|ru}} → ''Alszom.''{{slc|hu}} |
||
* В чувашском используется аблятив |
* В чувашском используется аблятив, а в русском используется предлог и другой падеж. |
||
** ''Я получил письмо от друга.''{{slc|ru}} → ''Юлташран ҫыру илтӗм.''{{slc|cv}} |
** ''Я получил письмо от друга.''{{slc|ru}} → ''Юлташран ҫыру илтӗм.''{{slc|cv}} |
||
<!-- * В испанском |
<!-- * В испанском слабые местоимения (clitic) употребляются после инфинитива, а во французском перед ним. |
||
** ''Voy a enviárselos.''{{slc|es}} → ''Je vais lui les envoyer.''{{slc|fr}} --> |
** ''Voy a enviárselos.''{{slc|es}} → ''Je vais lui les envoyer.''{{slc|fr}} --> |
||
===Перенос=== |
|||
===Передача Transfer=== |
|||
Перенос - это процесс преобразования промежуточной репрезентации языка-источника в язык перевода. В системе Apertium, перенос воздействует на промежуточную репрезентацию лемм и тэгов, определяющих морфологические характеристики (лексические формы). |
|||
Transfer is the process of altering the intermediate representation of a source language into that of the target language. In Apertium, transfer works on an intermediate representation of lemmas and tags specifying morphological features (lexical forms). |
|||
====Базовые операции==== |
====Базовые операции==== |
||
Когда вы начинаете |
Когда вы начинаете применять правила переноса, стоит разложить их на самые базовые действия. |
||
;A) Вставка |
;A) Вставка |
||
Вставка - это добавление нового |
Вставка - это добавление нового тэга или слова, например, при переводе существительного с дунганского на русский язык, необходимо вставить тэг, указывающий на падеж (именительный, винительный, ...), так как в дунганском языке отсутствует категория падежа. Очень часто в переводе требуется вставить слово. Например при переводе повелительного наклонения с турецкого на чувашский, необходимо вначале добавить наречие ''ан'': ''Yeme!'' → ''Ан çи!''. |
||
;B) Удаление |
;B) Удаление |
||
Удаление - это операция, противоположная вставке, когда необходимо удалить слово или |
Удаление - это операция, противоположная вставке, когда необходимо удалить слово или тэг, например, как в предыдущем примере, как только мы добавили наречие, необходимо убрать отрицание от последующего глагола, так как наречие передает отрицательное значение. |
||
;C) Замена |
;C) Замена |
||
Замена происходит, когда один |
Замена происходит, когда один тэг заменяется другим, например, когда изменяется род слова. Это часто применяется при лексическом переносе, о чем мы читали в первом разделе, но также часто происходит при передаче. Например, при переводе с русского на башкирский, ''мои брюки'', слово ''брюки'' будет помечено специальным тэгом <code>ND</code> (которое указывает в каком числе употребляется существительное) при лексическом переносе, и потом, согласно правилам переноса, при переводе число будет изменено. |
||
;D) Изменение порядка слов |
;D) Изменение порядка слов |
||
Изменение порядка слов или |
Изменение порядка слов или тэгов. Например, изменение порядка следования категорий числа и принадлежности при переводе с турецкого на чувашский ''kitap·lar·ım'' → ''кӗнеке·м·сем''. |
||
;E) Комбинированные операции |
;E) Комбинированные операции |
||
Очень часто, для создания правила переноса требуется набор из всех вышеуказанных операций, например, при переводе с одного |
Очень часто, для создания правила переноса требуется набор из всех вышеуказанных операций, например, при переводе с одного языка слова, стоящего в определенном падеже на язык, в котором, для передачи такого же значения требуется употребления предлога и падежа, необходимо провести две операции, во-первых, слово,выражающее предлог должно быть вставлено перед существительным, и затем необходимо изменить характеристику, определяющую падеж. |
||
for example when translating from language with a case for a given meaning into a language with a preposition and a case for the same meaning, two operations are required, first the word for preposition needs to be inserted before the noun, and secondly the feature denoting case on the noun needs to be changed. |
|||
===Left-to-right longest match (LRLM)=== |
===Cамое длинное соответствие с лева направо Left-to-right longest match (LRLM)=== |
||
==Структурный перенос== |
|||
==Структура переноса Transfer structure== |
|||
Файлы, которые содержат правила переноса в Apertium выглядят следующим образом: |
|||
<pre> |
<pre> |
||
Line 100: | Line 98: | ||
</pre> |
</pre> |
||
Это минимальный |
Это минимальный расклад. Вот четыре секции: |
||
* {{tag|section-def-cats}}: Содержит одну или более {{tag|def-cat}} записей. Они определяют шаблоны, которые могут сопоставляться по правилами переноса, и могут соответствовать ряду тэгов или лемм. {{tag|def-cat}} Запись, приведенная выше для <code>adj_or_pp</code> соответствует любой лексической единице, где тэги начинаются с {{tag|adj}} или {{tag|vblex><pp}}. Это может быть полезно в случае, когда две части речи выглядят похоже (например, прилагательные и причастия прошедшего времени в испанском). |
|||
* {{tag|section-def-cats}}: Contains one or more {{tag|def-cat}} entries. These specify patterns that can be matched by the transfer rules, and may match either tag sequences, or lemmas. The {{tag|def-cat}} entry above for <code>adj_or_pp</code> matches any lexical unit in which the tags start with {{tag|adj}} or {{tag|vblex><pp}}. This might be useful where two categories behave similarly (for example adjectives and past particiles in Spanish). |
|||
* {{tag|section-def-attrs}}: |
* {{tag|section-def-attrs}}: Содержит одну или более {{tag|def-attr}} записей. Здесь перечислены возможные тэги, относящиеся к данной характеристике. В данном случае, такая характеристика как <code>nbr</code> "число" может быть выражено одним из двух тэгов {{tag|sg}} "единственное число" или {{tag|pl}} "множественное число". Когда мы используем тэг {{tag|clip}}, для извлечения <code>part</code>, это позволяет нам определить искомые установки (части), вдобавок к стандартным частям (установкам). |
||
* {{tag|section-def-vars}}: Содержит переменные определения. Они используются для передачи информации между правилами. Например, возможно мы хотим сохранить запись о роде или числе, которыми мы пользовались в последний раз, или о лемме последнего спрягаемого глагола. |
|||
* {{tag|section-def-vars}}: Contains variable definitions. Variables are used to pass information between rules. For example we might want to keep track of the last gender or number that we have seen, or the lemma of the last finite verb. |
|||
* {{tag|section-rules}}: |
* {{tag|section-rules}}: Содержит правила. |
||
===Заранее заданные образцы=== |
|||
===Стандартные части Default parts=== |
|||
В добавление к частям, которые определены в <code>section-def-attrs</code>, модуль переноса определяет заранее заданный шаблон каждой лексической единицы. |
|||
In addition to the parts that are defined in <code>section-def-attrs</code>, the transfer module predefines a number of default parts of each lexical unit. |
|||
Для того чтобы понятнее продемонстрировать имеющиеся стандартные установки (части), давайте возьмем следующий пример: |
|||
To more easily demonstrate the default parts that are available, we'll use the follow example: |
|||
<pre> |
<pre> |
||
Line 117: | Line 115: | ||
</pre> |
</pre> |
||
* <code>whole</code>: |
* <code>whole</code>: как видно из названия, оно дает полное содержание лексической единицы. |
||
* <code>lem</code>: |
* <code>lem</code>: лемма: в данном примере, <tt>правило# по безопасности</tt> |
||
* <code>tags</code>: |
* <code>tags</code>: все тэги в одном месте: <tt><nowiki><n><nt><nn><pl></nowiki></tt> |
||
* <code>lemh</code>: |
* <code>lemh</code>: лемма ''главное слово''; часть словосочетания, которая изменяется: <tt>правило</tt> |
||
* <code>lemq</code>: |
* <code>lemq</code>: лемма ''очередь''; остальная часть словосочетания (the <code><nowiki><g></g></nowiki></code> part в словарях): <tt># по безопасности</tt> |
||
==Практика |
==Практика== |
||
Для данной практической части, мы будем использовать языковую пару турецкий-чувашский в Apertium, мы можете выбрать другую пару с одно-уровневой передачей single-level transfer (например, татарский-башкирский). Итак, перейдите в директорию <code>apertium-cv-tr</code> и откройте папку с правилами передачи из турецкого языка на чувашский <code>apertium-cv-tr.tr-cv.t1x</code>, для других пар это может быть папка <code>.t1x</code>. |
|||
===Описание |
===Описание правил переноса=== |
||
Цель данного упражнения - описать как работает правило переноса на примере ввода предложения на турецком: ''Yeme!''. Сначала мы хотели бы дать предварительную информацию как структурируются правила переноса, затем посмотрим на реально существующее правило и опишем его. |
|||
The objective of this exercise is to describe the behaviour of an existing transfer rule given the input sentence in Turkish: ''Yeme!''. First we're going to give some preliminaries for how transfer rules are structured, then we're going to look at an actual rule and describe it. |
|||
Правила переноса в системе Apertium сделаны из двух главных частей. Шаблон ''pattern'' — это ряд категорий, которые будут сопоставляться, и действие''action'', которое содержит операции, которые выполняются в сопоставленных образцах. Итоговая схема для правила может выглядеть соответственно: |
|||
Transfer rules in Apertium are made up of two principle parts. A ''pattern'' — that is a sequence of categories which will be matched, and an ''action'', which contains operations that are carried out on the patterns matched. An overall schema for a rule might look like the following: |
|||
<pre> |
<pre> |
||
Line 144: | Line 142: | ||
</pre> |
</pre> |
||
Значения тэгов, которые были использованы в вышеприведенных примерах, даны здесь, а также приведены ссылки на документацию с полным описанием. |
|||
An overview of the meanings of the tags which are used in the example below are given here, along with references to the page of the documentation where a full description can be found. |
|||
{|class=wikitable |
{|class=wikitable |
||
! |
! Наименование !! Doc. ref. !! Описание |
||
|- |
|- |
||
| {{tag|rule}} || §3.5.4.18 || |
| {{tag|rule}} || §3.5.4.18 || Задает новое правило, оно содержит на высшем уровне образец и действие. |
||
|- |
|- |
||
| {{tag|pattern}} || §3.5.4.19 || |
| {{tag|pattern}} || §3.5.4.19 || Содержит один или более <code>pattern-item</code> тэгов, которые определяют образцы лексических форм, которые должны быть сопоставлены. |
||
|- |
|- |
||
| {{tag|pattern-item}} || §3.5.4.20 || |
| {{tag|pattern-item}} || §3.5.4.20 || Содержит ссылки на шаблоны лексических форм, определенных в части <code>section-def-cats</code> файла с правилами. |
||
|- |
|- |
||
| {{tag|action}} || §3.5.4.21 || Содержит тэги, определяющие действия, которые должны быть после завершения сопоставления ряда лексических единиц. |
|||
| {{tag|action}} || §3.5.4.21 || Contains tags defining the actions that should take place when a sequence of lexical units matching <code>pattern</code> is matched. |
|||
|- |
|- |
||
| {{tag|choose}} || §3.5.4.24 || |
| {{tag|choose}} || §3.5.4.24 || Содержит одно или более <code>when</code> утверждений, которые определяют дальнейшие действия в зависимости от различных условий, и иногда <code>otherwise</code> утверждение, которое определяет стандартную процедуру, если ни одно из условий <code>when</code>s не подошло. |
||
|- |
|- |
||
| {{tag|when}} || §3.5.4.25 || |
| {{tag|when}} || §3.5.4.25 || Определяет условие и операцию, которая должна быть выполнена при выполнении данного условия. Условие в тэге <code>test</code>, а операция идет за ним. |
||
|- |
|- |
||
| {{tag|otherwise}} || §3.5.4.26 || |
| {{tag|otherwise}} || §3.5.4.26 || Стандартное условие, подразумевающее действия, которые будут предприняты, если ни одно из условий <code>when</code> в блоке <code>choose</code> не подойдет. |
||
|- |
|- |
||
| {{tag|test}} || §3.5.4.27 || |
| {{tag|test}} || §3.5.4.27 || Описывает условие. Например "проверьте, в единственном ли числе стоит первый сопоставляемый образец". |
||
|- |
|- |
||
| {{tag|or}} || §3.5.4.28 || |
| {{tag|or}} || §3.5.4.28 || Тэг, разрешающий соответствие более, чем одному условию. Этот тэг [http://en.wikipedia.org/wiki/Logical_operator Boolean operator], другие доступные тэги логического значения: {{tag|and}} и {{tag|not}} |
||
|- |
|- |
||
| {{tag|equal}} || §3.5.4.28 || |
| {{tag|equal}} || §3.5.4.28 || Проверяет, являются ли два условия или тэга аналогичными. |
||
|- |
|- |
||
| {{tag|clip}} || §3.5.4.29 || |
| {{tag|clip}} || §3.5.4.29 || Выделяет часть лексической единицы, которая соответствует признаку, указанному в разделе <code>section-def-attrs</code> файла переноса. Часть, которая должна быть извлечена, указана определением <code>part</code>. |
||
|- |
|- |
||
| {{tag|lit-tag}} || §3.5.4.31 || |
| {{tag|lit-tag}} || §3.5.4.31 || Генерирует условие, входящее в {{tag| }}, то есть тэг. |
||
|- |
|- |
||
| {{tag|lit}} || §3.5.4.30 || |
| {{tag|lit}} || §3.5.4.30 || Генерирует условие. |
||
|- |
|- |
||
| {{tag|out}} || §3.5.4.40 || |
| {{tag|out}} || §3.5.4.40 || Содержит всю информацию по итогам применения правила. |
||
|- |
|- |
||
| {{tag|lu}} || §3.5.4.41 || |
| {{tag|lu}} || §3.5.4.41 || Включает контент в <code>^</code> и <code>$</code>, то есть определяет является ли контент лексической единицей. |
||
|- |
|- |
||
| {{tag|b}} || §3.5.4.46 || |
| {{tag|b}} || §3.5.4.46 || Выдает итог форматирования, содержащегося на данном этапе |
||
|- |
|- |
||
| {{tag|get-case-from}} || §3.5.4.34 || |
| {{tag|get-case-from}} || §3.5.4.34 || Преобразует падеж любого слова, включенного в него, в падеж слова, отмеченного признаком <code>pos</code>. |
||
|- |
|- |
||
|} |
|} |
||
Правило, которое мы хотели бы описать это <code>regla: v_neg_imp</code>, поэтому найдите его в файле. Вот как выглядит правило: |
|||
<pre> |
<pre> |
||
Line 213: | Line 211: | ||
</pre> |
</pre> |
||
Образец для сопоставления определяется как: |
|||
For reference, the pattern being matched are defined as: |
|||
<pre> |
<pre> |
||
Line 226: | Line 224: | ||
</pre> |
</pre> |
||
==== |
====Описание==== |
||
Итак, описав тэги и правила, мы можем сказать что правило это: |
|||
So, given the description of the tags, and the contents of the rule, we could describe the rule as follows: |
|||
* |
* Данное правило соответствует ряду "vb_neg_imp" |
||
* |
* Определен шаблон лексической формы "vb_neg_imp", в файле {{tag|section-def-cats}}, так как после тэга {{tag|v}} идет любой тэг (например {{tag|iv}} или {{tag|tv}}, после которого идут тэги {{tag|neg><imp}} и потом любые другие тэги. |
||
* Затем правило определяет, подходит ли часть лексической единицы заданному признаку <code>a_neg</code> или нет (если нет, то удаляет ее) |
|||
* The rule then sets the value of the part of the lexical unit which matches the attribute <code>a_neg</code> to nothing (meaning it "deletes" it) |
|||
* |
* Правило выдает лемму "ан", после которой идет тэг {{tag|adv}} в единственной лексической единице (между <code>^</code> и <code>$</code>). |
||
* Затем правило оставляет пустое пространство |
|||
* The rule then outputs a blank space |
|||
* Затем правило выдает лексическую единицу с информацией от глагола, соответствующего изначальному шаблону. |
|||
* The rule then outputs the a lexical unit with the information from the verb matched by the original pattern. |
|||
====Пример итога==== |
|||
;Ввод текста |
|||
====Example output==== |
|||
;Input text |
|||
<pre> |
<pre> |
||
Line 247: | Line 244: | ||
</pre> |
</pre> |
||
;Результат после переноса |
|||
;Output from transfer |
|||
<pre> |
<pre> |
||
Line 257: | Line 254: | ||
</pre> |
</pre> |
||
Если вы хотите отслеживать, какие правила сопоставляются, добавьте -t опцию к apertium-transfer: |
|||
If you want to trace which rules are matched, add the -t option to the apertium-transfer: |
|||
;Результат после переноса |
|||
;Output from transfer |
|||
<pre> |
<pre> |
||
Line 272: | Line 269: | ||
===Описание нового правила переноса=== |
===Описание нового правила переноса=== |
||
Цель данной части практики - показать создание нового правила переноса. Переведите какой-нибудь текст при помощи выбранного вами переводчика и опишите новое правило на языке, как было сделано в предыдущем разделе. Если у вас останется время после описания правил на русском языке, попробуйте перевести его в формат XML. |
|||
The objective of this part of the practical is to describe a new transfer rule. Run some text through the translator of your choice, and describe a new rule in natural language, as was done in the previous subsection. If you have time after defining the rule, try and write it out in XML format. |
|||
==Для дальнейшего чтения== |
==Для дальнейшего чтения== |
||
* 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
Цель данного раздела познакомить с понятием сопоставительного морфологического и синтаксического анализов, и показать как основные (т.е. одноуровневые) правила морфологической и синтаксической передачи могут создаваться в Apertium.
Теория[edit]
Сопоставительный анализ[edit]
Сопоставительный анализ подразумевает анализ и сравнение двух языков с целью обнаружения их общих и отличительных характеристик. При работе над неглубоким машинным переводом мы можем рассмотреть, например, как морфологические так и синтаксические различия.
Морфологические различия[edit]
Морфологические различия - это различия между морфологическими характеристикам двух языков. Например, если в одном языке категория определенности выражена морфологически, а в другом нет, или одни язык имеет категорию падежа и рода, а другой нет. Или когда инструменты выражения падежа/рода отличаются между языками. Примеры:
- В казахском языке нет грамматического рода, а в русском их три (мужской, женский, средний). Род в русском языке играет роль при согласовании внутри словосочетания с существительным
- В русском языке два вида числа (единственное и множественное), а в мансийском три (единственное, двойственное и множественное).
- Венгерский содержит огромное количество падежей, которых нет в финском (например, временный падеж -kor, который на финский может быть переведен творительным аблативом, адессивом или эссивом изобразительный палеж ablative, adessive, or essive). В венгерском и финском языках падеж не играет роли при согласовании в словосочетании с существительным.
Синтаксические различия[edit]
Синтаксические различия наблюдаются в том, как устроена синтаксическая система разных языков, например, наличие или отсутствие артиклей, порядок слабых местоимений (clitic), количество падежей, аналитические временные формы глаголов, употребление личных местоимений и тд.
- Например в абхазском языке есть примыкающий сзади (postfixed) неопределенный артикль, и прикрепленный спереди (prefixed) определенный артикль, а в русском нет.
- В русском языке обязательно употребление личного местоимения в качестве подлежащего, а в венгерском нет,
- В чувашском используется аблятив, а в русском используется предлог и другой падеж.
Перенос[edit]
Перенос - это процесс преобразования промежуточной репрезентации языка-источника в язык перевода. В системе Apertium, перенос воздействует на промежуточную репрезентацию лемм и тэгов, определяющих морфологические характеристики (лексические формы).
Базовые операции[edit]
Когда вы начинаете применять правила переноса, стоит разложить их на самые базовые действия.
- A) Вставка
Вставка - это добавление нового тэга или слова, например, при переводе существительного с дунганского на русский язык, необходимо вставить тэг, указывающий на падеж (именительный, винительный, ...), так как в дунганском языке отсутствует категория падежа. Очень часто в переводе требуется вставить слово. Например при переводе повелительного наклонения с турецкого на чувашский, необходимо вначале добавить наречие ан: Yeme! → Ан çи!.
- B) Удаление
Удаление - это операция, противоположная вставке, когда необходимо удалить слово или тэг, например, как в предыдущем примере, как только мы добавили наречие, необходимо убрать отрицание от последующего глагола, так как наречие передает отрицательное значение.
- C) Замена
Замена происходит, когда один тэг заменяется другим, например, когда изменяется род слова. Это часто применяется при лексическом переносе, о чем мы читали в первом разделе, но также часто происходит при передаче. Например, при переводе с русского на башкирский, мои брюки, слово брюки будет помечено специальным тэгом ND
(которое указывает в каком числе употребляется существительное) при лексическом переносе, и потом, согласно правилам переноса, при переводе число будет изменено.
- D) Изменение порядка слов
Изменение порядка слов или тэгов. Например, изменение порядка следования категорий числа и принадлежности при переводе с турецкого на чувашский kitap·lar·ım → кӗнеке·м·сем.
- E) Комбинированные операции
Очень часто, для создания правила переноса требуется набор из всех вышеуказанных операций, например, при переводе с одного языка слова, стоящего в определенном падеже на язык, в котором, для передачи такого же значения требуется употребления предлога и падежа, необходимо провести две операции, во-первых, слово,выражающее предлог должно быть вставлено перед существительным, и затем необходимо изменить характеристику, определяющую падеж.
Cамое длинное соответствие с лева направо Left-to-right longest match (LRLM)[edit]
Структурный перенос[edit]
Файлы, которые содержат правила переноса в Apertium выглядят следующим образом:
<transfer default="chunk"> <section-def-cats> <def-cat n="adj_or_pp"> <cat-item tags="adj.*"> <cat-item tags="vblex.pp.*"> </def-cat> ... </section-def-cats> <section-def-attrs> <def-attr n="nbr"> <attr-item n="sg"/> <attr-item n="pl"/> </def-attr> ... </section-def-attrs> <section-def-vars> <def-var n="number"/> ... </section-def-vars> <section-rules> ... </section-rules> </transfer>
Это минимальный расклад. Вот четыре секции:
<section-def-cats>
: Содержит одну или более<def-cat>
записей. Они определяют шаблоны, которые могут сопоставляться по правилами переноса, и могут соответствовать ряду тэгов или лемм.<def-cat>
Запись, приведенная выше дляadj_or_pp
соответствует любой лексической единице, где тэги начинаются с<adj>
или<vblex><pp>
. Это может быть полезно в случае, когда две части речи выглядят похоже (например, прилагательные и причастия прошедшего времени в испанском).<section-def-attrs>
: Содержит одну или более<def-attr>
записей. Здесь перечислены возможные тэги, относящиеся к данной характеристике. В данном случае, такая характеристика какnbr
"число" может быть выражено одним из двух тэгов<sg>
"единственное число" или<pl>
"множественное число". Когда мы используем тэг<clip>
, для извлеченияpart
, это позволяет нам определить искомые установки (части), вдобавок к стандартным частям (установкам).<section-def-vars>
: Содержит переменные определения. Они используются для передачи информации между правилами. Например, возможно мы хотим сохранить запись о роде или числе, которыми мы пользовались в последний раз, или о лемме последнего спрягаемого глагола.<section-rules>
: Содержит правила.
Заранее заданные образцы[edit]
В добавление к частям, которые определены в section-def-attrs
, модуль переноса определяет заранее заданный шаблон каждой лексической единицы.
Для того чтобы понятнее продемонстрировать имеющиеся стандартные установки (части), давайте возьмем следующий пример:
^правило# по безопасности<n><nt><nn><pl>$
whole
: как видно из названия, оно дает полное содержание лексической единицы.lem
: лемма: в данном примере, правило# по безопасностиtags
: все тэги в одном месте: <n><nt><nn><pl>lemh
: лемма главное слово; часть словосочетания, которая изменяется: правилоlemq
: лемма очередь; остальная часть словосочетания (the<g></g>
part в словарях): # по безопасности
Практика[edit]
Для данной практической части, мы будем использовать языковую пару турецкий-чувашский в Apertium, мы можете выбрать другую пару с одно-уровневой передачей single-level transfer (например, татарский-башкирский). Итак, перейдите в директорию apertium-cv-tr
и откройте папку с правилами передачи из турецкого языка на чувашский apertium-cv-tr.tr-cv.t1x
, для других пар это может быть папка .t1x
.
Описание правил переноса[edit]
Цель данного упражнения - описать как работает правило переноса на примере ввода предложения на турецком: Yeme!. Сначала мы хотели бы дать предварительную информацию как структурируются правила переноса, затем посмотрим на реально существующее правило и опишем его.
Правила переноса в системе Apertium сделаны из двух главных частей. Шаблон pattern — это ряд категорий, которые будут сопоставляться, и действиеaction, которое содержит операции, которые выполняются в сопоставленных образцах. Итоговая схема для правила может выглядеть соответственно:
<rule> <pattern> ... </pattern> <action> ... </action> </rule>
Значения тэгов, которые были использованы в вышеприведенных примерах, даны здесь, а также приведены ссылки на документацию с полным описанием.
Наименование | Doc. ref. | Описание |
---|---|---|
<rule> |
§3.5.4.18 | Задает новое правило, оно содержит на высшем уровне образец и действие. |
<pattern> |
§3.5.4.19 | Содержит один или более pattern-item тэгов, которые определяют образцы лексических форм, которые должны быть сопоставлены.
|
<pattern-item> |
§3.5.4.20 | Содержит ссылки на шаблоны лексических форм, определенных в части section-def-cats файла с правилами.
|
<action> |
§3.5.4.21 | Содержит тэги, определяющие действия, которые должны быть после завершения сопоставления ряда лексических единиц. |
<choose> |
§3.5.4.24 | Содержит одно или более when утверждений, которые определяют дальнейшие действия в зависимости от различных условий, и иногда otherwise утверждение, которое определяет стандартную процедуру, если ни одно из условий when s не подошло.
|
<when> |
§3.5.4.25 | Определяет условие и операцию, которая должна быть выполнена при выполнении данного условия. Условие в тэге test , а операция идет за ним.
|
<otherwise> |
§3.5.4.26 | Стандартное условие, подразумевающее действия, которые будут предприняты, если ни одно из условий when в блоке choose не подойдет.
|
<test> |
§3.5.4.27 | Описывает условие. Например "проверьте, в единственном ли числе стоит первый сопоставляемый образец". |
<or> |
§3.5.4.28 | Тэг, разрешающий соответствие более, чем одному условию. Этот тэг Boolean operator, другие доступные тэги логического значения: <and> и <not>
|
<equal> |
§3.5.4.28 | Проверяет, являются ли два условия или тэга аналогичными. |
<clip> |
§3.5.4.29 | Выделяет часть лексической единицы, которая соответствует признаку, указанному в разделе section-def-attrs файла переноса. Часть, которая должна быть извлечена, указана определением part .
|
<lit-tag> |
§3.5.4.31 | Генерирует условие, входящее в < > , то есть тэг.
|
<lit> |
§3.5.4.30 | Генерирует условие. |
<out> |
§3.5.4.40 | Содержит всю информацию по итогам применения правила. |
<lu> |
§3.5.4.41 | Включает контент в ^ и $ , то есть определяет является ли контент лексической единицей.
|
<b> |
§3.5.4.46 | Выдает итог форматирования, содержащегося на данном этапе |
<get-case-from> |
§3.5.4.34 | Преобразует падеж любого слова, включенного в него, в падеж слова, отмеченного признаком pos .
|
Правило, которое мы хотели бы описать это regla: v_neg_imp
, поэтому найдите его в файле. Вот как выглядит правило:
<rule comment="regla: v_neg_imp (yeme! → ан ҫи!)"> <pattern> <pattern-item n="v_neg_imp"/> </pattern> <action> <let> <clip pos="1" side="tl" part="a_neg"/> <lit v=""/> </let> <out> <lu> <lit v="ан"/> <lit-tag v="adv"/> </lu> <b/> <lu> <clip pos="1" side="tl" part="whole"/> </lu> </out> </action> </rule>
Образец для сопоставления определяется как:
<section-def-cats> ... <def-cat n="v_neg_imp"> <cat-item tags="v.*.neg.imp.*"/> </def-cat> ... </section-def-cats>
Описание[edit]
Итак, описав тэги и правила, мы можем сказать что правило это:
- Данное правило соответствует ряду "vb_neg_imp"
- Определен шаблон лексической формы "vb_neg_imp", в файле
<section-def-cats>
, так как после тэга<v>
идет любой тэг (например<iv>
или<tv>
, после которого идут тэги<neg><imp>
и потом любые другие тэги. - Затем правило определяет, подходит ли часть лексической единицы заданному признаку
a_neg
или нет (если нет, то удаляет ее) - Правило выдает лемму "ан", после которой идет тэг
<adv>
в единственной лексической единице (между^
и$
). - Затем правило оставляет пустое пространство
- Затем правило выдает лексическую единицу с информацией от глагола, соответствующего изначальному шаблону.
Пример итога[edit]
- Ввод текста
$ echo 'yeme!' | hfst-proc tr-cv.automorf.hfst | cg-proc tr-cv.rlx.bin | apertium-tagger -g tr-cv.prob ^ye<v><tv><neg><imp><p2><sg>$^!<sent>$^.<sent>$
- Результат после переноса
$ echo 'yeme!' | hfst-proc tr-cv.automorf.hfst | cg-proc tr-cv.rlx.bin | apertium-tagger -g tr-cv.prob |\ apertium-pretransfer | lt-proc -b tr-cv.autobil.bin | apertium-lrx-proc tr-cv.lrx.bin |\ apertium-transfer -b apertium-cv-tr.tr-cv.t1x tr-cv.t1x.bin ^ан<adv>$ ^ҫи<v><tv><imp><p2><sg>$^!<sent>$
Если вы хотите отслеживать, какие правила сопоставляются, добавьте -t опцию к apertium-transfer:
- Результат после переноса
$ echo 'yeme!' | hfst-proc tr-cv.automorf.hfst | cg-proc tr-cv.rlx.bin | apertium-tagger -g tr-cv.prob |\ apertium-pretransfer | lt-proc -b tr-cv.autobil.bin | apertium-lrx-proc tr-cv.lrx.bin |\ apertium-transfer -t -b apertium-cv-tr.tr-cv.t1x tr-cv.t1x.bin apertium-transfer: Rule 3 ye<v><tv><neg><imp><p2><sg>/ҫи<v><tv><neg><imp><p2><sg> ^ан<adv>$ ^ҫи<v><tv><imp><p2><sg>$^!<sent>$
Описание нового правила переноса[edit]
Цель данной части практики - показать создание нового правила переноса. Переведите какой-нибудь текст при помощи выбранного вами переводчика и опишите новое правило на языке, как было сделано в предыдущем разделе. Если у вас останется время после описания правил на русском языке, попробуйте перевести его в формат XML.