Difference between revisions of "Як створити нову мовну пару"
Line 112: | Line 112: | ||
</pre> |
</pre> |
||
Є два види розділів. Перший - стандартний розділ, він містить слова, |
Є два види розділів. .Перший - стандартний розділ, він містить слова, енклітик і и т. д. Другий - безумовний розділ, що містить знаки пунктуації і т. п. У нашому прикладі немає безумовного розділу, хоча ми покажем його пізніше |
||
Таким чином, наш файл буде виглядати так: |
Таким чином, наш файл буде виглядати так: |
||
Line 133: | Line 133: | ||
</pre> |
</pre> |
||
Тепер |
Тепер ми маємо основну частина словника, тепер ми можемо перейти до додавання іменника. Їм буде слово 'gramofon'. |
||
Так як раніше визначених парадигм у нас немає, насамперед потрібно визначити парадигму. |
Так як раніше визначених парадигм у нас немає, насамперед потрібно визначити парадигму. |
||
Line 155: | Line 155: | ||
</pardef> |
</pardef> |
||
</pre> |
</pre> |
||
Зауважте що конструкція <l/> (еквівалент <l></l>) означає, що в однині, до основи нічого не приєднується. |
|||
Все це може здатися досить багатослівним способом опису, але до цього є причини та ви швидко звикните. Ви, напевно, вже гадаєте, що означають всі ці <e>, <l> та <r>? |
|||
* e значить запись (entry). |
|||
* p значить пара (pair). |
|||
* l значить наліво (left). |
|||
* r значить направо (right). |
|||
Чому вліво та вправо? Морфологічні словники будуть пізніше скомпільовані у кінцеві автомати. Компіляція зліва направо створює аналізи слів, а справа наліво - слова з аналізів. Наприклад: |
|||
<pre> |
|||
* gramofoni (з ліва на право) gramofon<n><pl> (аналіз) |
|||
* gramofon<n><pl> (з права на ліво) gramofoni (генерація) |
|||
</pre> |
|||
Ми визначили парадигму, тепер потрібно співвіднести її з лемою - gramofon. Ця дія виконується в раніше визначеному розділі. |
|||
Запис, який потрібно додати в <section>, є: |
|||
<pre> |
|||
<e lm="gramofon"><i>gramofon</i><par n="gramofon__n"/></e> |
|||
</pre> |
|||
Короткий пояснення до скорочень: |
|||
* lm означає лема (lemma). |
|||
* i означає ідентичність (identity). (одинаковий як при аналізі так і генерації) |
|||
* par означає парадигма (paradigm). |
|||
Цей запис визначає лему слова, gramofon, корінь слова, gramofon, та парадигму відмінювання цього слова gramofon_n. Різниця між лемою та коренем є в тому, що лема це "цитована форма" слова, у той час як корінь є частина леми, до якої приєднуються суфікси та закінчення. Ця різниця стане зрозумілою, коли ми дійдимо до запису з різними лемою та коренем. |
|||
Тепер ми можемо перевірити наш словник. Збережіть його та поверніться до командного рядка. Насамперед ми повинні скомпілювати його (за допомогою lt-comp), потім ми зможемо перевірити його (за допомогою lt-proc). |
|||
<pre> |
|||
$ lt-comp lr apertium-sh-en.sh.dix sh-en.automorf.bin |
|||
</pre> |
|||
Результатом чого має бути: |
|||
<pre> |
|||
main@standard 12 12 |
|||
</pre> |
|||
Так як ми компілювали зліва направо, ми створили аналізатор. Давайте створимо і генератор. |
|||
<pre> |
|||
$ lt-comp rl apertium-sh-en.sh.dix sh-en.autogen.bin |
|||
</pre> |
|||
Команда повинна видати теж саме. |
|||
Тепер ми можемо протестувати їх. Запустіть lt-proc в аналізаторі. |
|||
<pre> |
|||
$ lt-proc sh-en.automorf.bin |
|||
</pre> |
|||
Тепер перевірте - введіть ''gramofoni'', та подивитесь на результат: |
|||
<pre> |
|||
^gramofoni/gramofon<n><pl>$ |
|||
</pre> |
|||
Тепер зробіть те ж саме для англійського словника, але замініть слово''gramofon''англійським словом ''gramophone'' і поміняйте закінчення множини (тобто''i''на''s'') А що робити, якщо ви захочете використовувати більш правильний переклад 'record player'? Це ми пояснимо пізніше. |
|||
Тепер в папці у вас повинно бути два файли: |
|||
* apertium-sh-en.sh.dix, який містить (дуже) маленький сербохорватський морфологічний словник, та |
|||
* apertium-sh-en.en.dix, який містить (дуже) маленький англіський морфологічний словник. |
Revision as of 09:55, 5 December 2010
Як створити нову мовну пару.
Цій документ пояснить вам як почати нову мовну пару для Apertium, системи машинного перекладу з нуля.
Вам не треба знати багато про лінгвистику або машинний переклад, аби ви знали як розрізняті іменники від дієслов (та прийменники і т.д)
Contents
Введення
Apertium є, як ви певно зрозуміли, система машинного перекладу. Ну, не зовсім, це платформа машинного перекладу. Вона забеспечює вас з двигуном (англ. "engine") та інструментами, з їхньою допомогою ви можете створювати ваші власні системи машинного перекладу. Ви тільки повинні записати данні. Данні скаладаються з трьох словників та кілька правил (які забезпечують перестановку слів та інші грамматичні речі).
За болі підрібною інформацією, ви можете відвідати сайт з відмінимми статтями тут: Publications
Вам знадобиться
- lttoolbox (>= 3.0.0)
- libxml utils (xmllint etc.)
- apertium (>= 3.0.0)
- текстовий редактор (або спеціальний XML редактор, якщо вам так хочеться)
Цій документ не пояснює як устанавлювати ці пакети, за болі підрібною інформацією будь ласка відвідайте документаційну секцію на сайті Aperitum.
Із чого зроблена мовна пара
Apertium являє собою систему машинного перекладу поверхнево-передачного типу. В основному він має справу зі словниками та правилами поверхневій передачі. На практиці поверхнева передача відрізняється від глибокої передачі тим, що при ній не виконується повний синтаксичний розбір речіннь, а правила, на відміну від операцій на дереві синтаксичного розбору, являють собою операції з групами лексичних одиниць. Є три таких словників:
- Морфологічний словник для мови xx: він містить правила про зміну слов у мові xx. У нашому прикладі цей словник буде називатися так: apertiumh-en.sh.dix
- Морфологічний словник для мови yy: він, у свою чергу, містить інформацію про зміну слов у мові yy. У нашому прикладі він має назву: apertium-sh-en.en.dix
- Двомовний словник: містить перекладні відповідності слів і символів двох мов. Він буде називатися так: apertium-sh-en.sh-en.dix
У мовній парі будь-яка з мов, що складають цю пару, може бути як вхідною, так і вихідною мовою, тобто ці терміни вживаються умовно.
Мовну пару складує також два файли з правилами передачі. Це правила, які керують перестановкою слів у реченнях, наприклад chat noir -> кіт чорний -> чорний кіт. Також ці правила забезпечують узгодження роду у реченні, числа і т.д. Вони также можуть використовуватися і для вставки або видалення лексичних одиниць, як це буде описано нижче. Файли:
- Правила передачі з мови xx до мови yy: ці правила описують, яким змінам піддадуться пропозиції мови xx при перекладі на мову yy. У нашому прикладі це: apertium-sh-en.sh-en.t1x
- Правила передачі з мови yy до мови xx: цей файл містить правила, що описують перетворення, які повинні бути здійснені при перекладі з мови yy на мову xx. У нашому прикладі цей файл буде називатися так: apertium-sh-en.en-sh.t1x
Багато з існуючих мовних пар містять інші файли, але ми не будемо розглядати їх в даному керівництві. Нам достатньо ціх файлів для створення функціональної системи.
Мовна Пара
Ви могли здогадатися з назв файлів, що для опису порядку створення базової системи в цьому керівництві будуть використовуватися приклади перекладу з сербохорватської на англійську мову. Зауважимо, що це не ідеальна пара, так як система працює краще зі спорідненими мовами. Однак у випадку простих прикладів, які приводяться тут, ми не зіткнемося з якими-небудь проблемами.
Коротко про терміни
Перед тим як продовжити, слід пояснити значення деяких термінів.
Першим з них є лема. Лема - це канонічна форма слова, слово без граматичної інформації. Наприклад, лемою слова коти є кіт. В англійській мові лема розглянутого іменника як правило співпадає з його формою однини. Для дієслів в англійській мові лема маєть вигляд інфінітива без to (або просто інфінітива в україньської мови). Наприклад, лемою слова was буде be, також як лемою слова був буде бути.
Другим терміном є термін символ. У контексті Apertium символ означає граматичний знак. Слово коти є іменник множини, отже, він буде мати символ іменника та символ множини. На вході та виході модулів Apertium ці символи, зазвичай, в кутові дужки, як показано нижче:
- <n>; Для іменника.
- <pl>; Для множини.
Іншими прикладами символів є <sg> (однина), <p1> (перша особа), <pri> (теперішній час дійсного способу) та інші. Треба зауважити, що в багатьох з існуючих мовних пар символи мають вигляд акронімів чи скорочень каталанською слів . Наприклад, vbhaver - від vb (дієслово) та haver ("мати" каталонською). Символи визначаються в тегах <sdef> та використовуються в тегах <s> Третім же терміном є парадигма. У контексті системи Apertium парадигма є прикладом відмінювання / дієвідміни певної групи слів. У морфологічному словнику леми (див. вище) посилаються на парадигми, що дозволяє нам показати всі словоформи цих лем без необхідності записувати всі можливі закінчення.
Прикладом використання парадигми може служити наступне. Припустимо, ми хочемо додати в словник прикметники happy (веселий) та lazy (ледачий). Замість запису однакових закінчень:
* Happy, happ (y, ier, iest) * Lazy, laz (y, ier, iest)
ми можемо записати закінчення форм слова happy, а потім написати що "lazy відмінюється як happy", або "shy відмінюється як happy", "naughty відмінюється як happy", "friendly відмінюється як happy" і т.д. У цьому прикладі happy буде парадигмою, моделлю зміни всіх інших. Точний опис визначення парадигм буде дано пізніше. Парадигми визначаються в тегах <pardef> та використовуються в тегах <par>.
Як починати
Одномовні словники
- See also: List of dictionaries and Incubator
Почнемо зі створення нашого першого словника вхідної мови. Словник є XML-файлом. Відкрийте ваш текстовий редактор та введіть:
<?xml version="1.0" encoding="UTF-8"?> <dictionary> </dictionary>
Так, тепер файл визначає, що ми хочемо почати створення словника. Щоб цей файл був більш корисним, ми повинні додати в нього ще кілька записів, першою з яких буде алфавіт. Він визначає набір букв, які можуть використовуватися в словнику для сербохорватської мови. Він виглядає як показано нижче та містить усі літери сербохорватської алфавіту:
<alphabet>ABCČĆDDžĐEFGHIJKLLjMNNjOPRSŠTUVZŽabcčćddžđefghijklljmnnjoprsštuvzž</alphabet>
Введіть алфавіт після тега <dictionary>.
Далі нам необхідно визначити деякі символи. Почнемо з простіших - іменник (n) в однині (sg) та множині (pl).
<sdefs> <sdef n="n"/> <sdef n="sg"/> <sdef n="pl"/> </sdefs>
Імена символів не обов'язково повинні бути такими короткими, ви можете писати їх повністю, але, так як робити це доведеться багато разів, краще скорочувати.
На жаль, все не так просто - іменники в сербохорватської мові мають не тільки категорію числа, а также і категорії роду та відмінка. Однак для нашого прикладу ми будемо припускати, що іменник є іменником чоловічого роду у називному відмінку (приклад можна знайти в кінці цього документа).
Тепер визначимо розділ для парадигм,
<pardefs> </pardefs>
и раздел для словаря:
<section id="main" type="standard"> </section>
Є два види розділів. .Перший - стандартний розділ, він містить слова, енклітик і и т. д. Другий - безумовний розділ, що містить знаки пунктуації і т. п. У нашому прикладі немає безумовного розділу, хоча ми покажем його пізніше
Таким чином, наш файл буде виглядати так:
<?xml version="1.0" encoding="UTF-8"?> <dictionary> <sdefs> <sdef n="n"/> <sdef n="sg"/> <sdef n="pl"/> </sdefs> <pardefs> </pardefs> <section id="main" type="standard"> </section> </dictionary>
Тепер ми маємо основну частина словника, тепер ми можемо перейти до додавання іменника. Їм буде слово 'gramofon'.
Так як раніше визначених парадигм у нас немає, насамперед потрібно визначити парадигму.
Нагадаємо, що ми маємо на увазі чоловічий рід і називному відмінку. Формою однини є 'gramofon', формою множини - 'gramofoni'. Таким чином:
<pardef n="gramofon__n"> <e> <p> <l/> <r><s n="n"/><s n="sg"/></r> </p> </e> <e> <p> <l>i</l> <r><s n="n"/><s n="pl"/></r> </p> </e> </pardef>
Зауважте що конструкція <l/> (еквівалент <l></l>) означає, що в однині, до основи нічого не приєднується.
Все це може здатися досить багатослівним способом опису, але до цього є причини та ви швидко звикните. Ви, напевно, вже гадаєте, що означають всі ці <e>, <l> та <r>?
- e значить запись (entry).
- p значить пара (pair).
- l значить наліво (left).
- r значить направо (right).
Чому вліво та вправо? Морфологічні словники будуть пізніше скомпільовані у кінцеві автомати. Компіляція зліва направо створює аналізи слів, а справа наліво - слова з аналізів. Наприклад:
* gramofoni (з ліва на право) gramofon<n><pl> (аналіз) * gramofon<n><pl> (з права на ліво) gramofoni (генерація)
Ми визначили парадигму, тепер потрібно співвіднести її з лемою - gramofon. Ця дія виконується в раніше визначеному розділі.
Запис, який потрібно додати в <section>, є:
<e lm="gramofon"><i>gramofon</i><par n="gramofon__n"/></e>
Короткий пояснення до скорочень:
- lm означає лема (lemma).
- i означає ідентичність (identity). (одинаковий як при аналізі так і генерації)
- par означає парадигма (paradigm).
Цей запис визначає лему слова, gramofon, корінь слова, gramofon, та парадигму відмінювання цього слова gramofon_n. Різниця між лемою та коренем є в тому, що лема це "цитована форма" слова, у той час як корінь є частина леми, до якої приєднуються суфікси та закінчення. Ця різниця стане зрозумілою, коли ми дійдимо до запису з різними лемою та коренем.
Тепер ми можемо перевірити наш словник. Збережіть його та поверніться до командного рядка. Насамперед ми повинні скомпілювати його (за допомогою lt-comp), потім ми зможемо перевірити його (за допомогою lt-proc).
$ lt-comp lr apertium-sh-en.sh.dix sh-en.automorf.bin
Результатом чого має бути:
main@standard 12 12
Так як ми компілювали зліва направо, ми створили аналізатор. Давайте створимо і генератор.
$ lt-comp rl apertium-sh-en.sh.dix sh-en.autogen.bin
Команда повинна видати теж саме.
Тепер ми можемо протестувати їх. Запустіть lt-proc в аналізаторі.
$ lt-proc sh-en.automorf.bin
Тепер перевірте - введіть gramofoni, та подивитесь на результат:
^gramofoni/gramofon<n><pl>$
Тепер зробіть те ж саме для англійського словника, але замініть словоgramofonанглійським словом gramophone і поміняйте закінчення множини (тобтоiнаs) А що робити, якщо ви захочете використовувати більш правильний переклад 'record player'? Це ми пояснимо пізніше.
Тепер в папці у вас повинно бути два файли:
- apertium-sh-en.sh.dix, який містить (дуже) маленький сербохорватський морфологічний словник, та
- apertium-sh-en.en.dix, який містить (дуже) маленький англіський морфологічний словник.