четверг, 13 августа 2009 г.

Buryat verb conjugation. Part 2A

СПРЯЖЕНИЕ БУРЯТСКОГО ГЛАГОЛА
продолжение см. 1 часть:

http://buryad.blogspot.com/2009/08/buryat-verb-conjugation.html

В монгольских языках при объединении морфемы с аффиксом возникают особые случаи:
• Стык согласных : последняя буква (назовем SL) и первая буква аффикса (назовем Af1):
Болод + 'до' => Болодто (Болоту);
• SL ='и', происходит йотирование:
боли + 'уужа' => болюужа;
• Af1 = 'и', в этом случае образуется дифтонг (либо долгий 'ии')
хэ + 'иш' => хeiš => хыш (сделай!)
үһэри + 'иш' => үһэрииш (придирайся)
• SL ='й', значит последняя фонема основы – дифтонг (дамбай - толстей!, шохой – высунься!) , в этом случае, (так же если последняя фонема – долгая гласная) если аффикс начинается на гласную фонему, то вставляется дополнительная согласная 'г' :
шохой + 'г' + 'ы' + 'ш' => шохойгыш



В предыдущей части с аффиксом настоящего времени: глагольных основ, оканчивающихся на 'н' не существует, поэтому я просто добавил аффикс 'на3' + аффикс притяжания.



Немного об SQL: в силу технических особенностей этой среде удобнее оперировать машинными словами, т.е. 1, 2, 3 (в двухбайтовом целочисленном представлении, Long Integer) обрабатываются быстрее, чем а, б, в. По этой же причине, логическое значение False/True хранится как 0/FFFF, отсюда логическое значение True, преобразованное в число, становится = -1; FFFF это -1 в Long Integer.

Связывание таблиц через текстовые поля – дурной тон, и удар по скорости. В первой части я связал таблицы через них только для наглядности.

Какие могут быть варианты огласовки аффиксов в бурятском языке?
Обычно обозначают так: аа4, а3, у2, я3, яа3 (для йотированных окончаний)

Пример 1, глагол в форме обращения (просьба):
V-'и' + (удалить 'и' от стеммы) + яа3ра3й,
V-d|vv => гаа4ра3й
V + а3ра3й ;
поскольку идет последним вариантом, то условия не ставлю

Пример 2, глагол в форме обращения (намерение):
V + һуу2

Создаем таблицы сингармонических чередований:



С удалением гласных не все так просто, было бы здорово, если бы конкатенацией символа BackSpace можно было удалить символ слева, вроде:
'ABC' & chr(8) & 'DEF' => 'ABDEF'
Но раз это невозможно, придется пользоваться инструкциями типа:
left('ABC', len('ABC')- iif(<Условие>,1,0) ) & 'DEF'


Можно пойти по другому пути. Здесь обнаруживается различие понятий лемма и стемма:
Лемма 'таби':
таби + ха => табиха
таби + (и?(ит)|(df?|гыт|удалить v слева + ыт) )=> табиит
таби + (и?удал.символа слева) + (и?(яа3ра3й)|(df?|гаа4ра3й|а3ра3й) ) => табяарай


Стемма «таб»:
таб + иха => табиха
таб + иит => табиит
таб + яаnраnй => табяарай


В моем понимании, стемма - это некий псевдокорень.
Минус последней схемы в том, что мы, во-первых, увеличиваем число записей в таблице аффиксов, во-вторых, вынуждены обрубать корневые морфемы.

Access не поддерживает хранимые процедуры, но имеет свой язык VBA, опять же отличающийся по синтаксису от основного VBA (продукт Access был приобретен MS у третьей фирмы).

Вопрос, зачем же я выбрал Access? Было лень разворачивать MS SQL, или MySQL. Опять же проще таскать проект туда-сюда. Почему то питаю слабость к настольным СУБД типа Access, FoxPro, Firebird.

Ну что ж, создаем таблицу фонем



В таблице выделены 5 типов конечных фонем, влияющих на модификацию аффикса:
1 - гласные;
2 - гласная 'и', а также 'зөөлэн тэмдэг’;
3 - дифтонги и долгие гласные (включая йотированные);
4 - согласные 'бгдрс'.
0 - прочие согласные (большей частью мусор для заимствованных слов и опечаток, полезный разве что 'л');

Теперь можно отобрать копию таблицы (вьюшку) с дополнительными полями :
SELECT word, syn, pho.type, right(mouse.word,2) AS a
FROM mouse INNER JOIN pho ON right(mouse.word,2)=pho.ph
WHERE pho.l=2
UNION SELECT word, syn, pho.type, right(mouse.word,1) AS a
FROM mouse INNER JOIN pho ON right(mouse.word,1)=pho.ph
WHERE pho.l=1 and not exists
(select 1 from pho B where right(mouse.word,2)=B.ph and B.l=2);


Получаем что-то в этом духе:

Комментариев нет:

Отправить комментарий