BURYATIA.ORG    САЙТ БУРЯТСКОГО НАРОДА



  Закрыть
Логотип buryatia.org
Обратная связь    Правила сайта    Размещение рекламы

Форум


Сингармонизм, склонение.. в общем, морфология
На страницу 1, 2  След.
 
Начать новую тему   Ответить на тему    Список форумов Сайт бурятского народа -> Буряад хөөрэлдөөн
  Предыдущая тема :: Следующая тема  
Автор Сообщение
therion
ахамад


Зарегистрирован: Dec 02, 2004
Сообщения: 817
Откуда: Ракедтэй Дээдэ Вольта
СообщениеДобавлено: 03.09.07, 23:54 +0000     Сингармонизм, склонение.. в общем, морфология Ответить с цитатой

у меня есть пара скриптов, которые склоняют произвольные фамилию имя отчество в родительный или дательный падеж по правилам русского языка. На бурятских, русских, кавказских именах работает без ошибок (кстати, пришлось сделать исключение для Павел и Любовь).
В бурятском довольно строгая грамматика, почему бы не выкладывать здесь скриптики для вот таких вещей?
Было бы неплохо выложить хотя бы простенькие синтаксические разборы выражений для бурятского.
Для русского есть очень хорошие полные синтаксические разборы предложений.
Пригодилась бы и таблица соответствий имен в русском и бурятском, например Доржи Базаров -> Доржо Базарон (или Базарай?).


Последний раз редактировалось: therion (24.10.07, 06:19 +0000), всего редактировалось 3 раз(а)
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Tsebeen
Мудур кэку


Зарегистрирован: Dec 9, 2003
Сообщения: 3030
Откуда: Yдэ голой урда бэе
СообщениеДобавлено: 04.09.07, 12:35 +0000     Ответить с цитатой

Банзарай Доржо <—> Доржи Банзаров
_________________
Отшеньдобрый hидальго Дон Цэбээн Кижингинский и Доодо-Кодунский, Улаан-Yдэнский и Улаанбаатарский и прочая, прочая... едет к сеньоре Наталее Добоской и Машзаводской
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Tsebeen
Мудур кэку


Зарегистрирован: Dec 9, 2003
Сообщения: 3030
Откуда: Yдэ голой урда бэе
СообщениеДобавлено: 05.09.07, 12:21 +0000     Ответить с цитатой

У меня есть идеи, нужны программисты. Терион, пхп и майскл знаешь?
_________________
Отшеньдобрый hидальго Дон Цэбээн Кижингинский и Доодо-Кодунский, Улаан-Yдэнский и Улаанбаатарский и прочая, прочая... едет к сеньоре Наталее Добоской и Машзаводской
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
therion
ахамад


Зарегистрирован: Dec 02, 2004
Сообщения: 817
Откуда: Ракедтэй Дээдэ Вольта
СообщениеДобавлено: 05.09.07, 21:08 +0000     Ответить с цитатой

Tsebeen писал(а):
У меня есть идеи, нужны программисты. Терион, пхп и майскл знаешь?


знаю MS SQL & C++ (хотя больше по VB)
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
therion
ахамад


Зарегистрирован: Dec 02, 2004
Сообщения: 817
Откуда: Ракедтэй Дээдэ Вольта
СообщениеДобавлено: 21.09.07, 05:30 +0000     Ответить с цитатой

Код:

устарело



Последний раз редактировалось: therion (23.09.07, 21:18 +0000), всего редактировалось 2 раз(а)
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
therion
ахамад


Зарегистрирован: Dec 02, 2004
Сообщения: 817
Откуда: Ракедтэй Дээдэ Вольта
СообщениеДобавлено: 21.09.07, 05:42 +0000     Ответить с цитатой

Пока данная функция проверки сингармонизма преобразует скажем "малгай" в грамматическое выражение CMCCM
(имеется в виду КСК-грамматика в компьютерном понимании, а не
филологическое), где

С - согласная
М - мужская гл
F - женская гл
N - нейтральная гл

выражение уже подвергается свертке к M или F

проверьте, работает в Word начиная с Word97
нажмите Alt-F11, вставить текст (только берегите бурятские буквы)
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
therion
ахамад


Зарегистрирован: Dec 02, 2004
Сообщения: 817
Откуда: Ракедтэй Дээдэ Вольта
СообщениеДобавлено: 23.09.07, 21:21 +0000     Ответить с цитатой

Код:

' Copyright Therion
' MMVII
' free for noncommercial use

' динамические строковые массивы для фонем
Dim MalVw$()
Dim FemVw$()
Dim NeuVw$()
Dim Conso$()


Sub exampl()
    FillData ' заполняем часто используемые массивы
   
    MsgBox (Syn$("ДавааСэрээн"))
End Sub

Function Syn$(A$)
    Syn$ = Deflate$(Vocalize$(LCase(A$)))
End Function

Public Sub FillData()
    ' Заполняем массивы
    ' ..(легче проверять сначала долгие фонемы, чтоб корректно отрабатывал слова типа
    ' "оюутан" = "о йуу т а н";по хорошему их следовало преобразовать в
    ' отдельные односимвольные фонетические знаки)
   
    ' ЕРЭ
    ' заднеязычные - дифтонги долгие йотированные долгие основные и краткие йотированные
    MalVw$ = Split("ай ой уй аа оо уу яа ёо а о у я ё") ' кроме юу и ю
   
    ' ЭМЭ
    ' переднеязычные
    FemVw$ = Split("эй їй ээ її єє еэ э ї е")
    ' кроме юї - вообще пока не обрабатываю
   
    ' ЭРСЭ
    ' среднеязычные
    NeuVw$ = Split("юу ии ю и ы")
   
    ' согласные, аффрикаты плюс все подряд, пока так
    Conso$ = Split("дж дз б в г д ж з к л м н п р с т ф х ћ ц ш щ ь ъ")
   
    ' Есть ли смысл отдельно выделять слова с согласными вкфцчщь?
    ' как заимствования? Не всегда только по наличию-отсутствию их можно это определить
End Sub


' ***************************************

Public Function Vocalize$(St0$)

    Dim i As Integer
    Dim St$, strLex$
    Dim IsCon As Boolean
    Dim IsMal As Boolean
    Dim IsFem As Boolean
    Dim IsNeu As Boolean

   
    IsCon = False
    IsMal = False
    IsFem = False
    IsNeu = False
    St$ = St0$
    strLex$ = ""
   
    ' экономнее было бы все четыре массива спихать в один двумерный, и отработать одним махом, но так нагляднее
Do 'н.цикла проверки фонем

    For i = 0 To UBound(Conso$)
        If Left(St$, Len(Conso$(i))) = Conso$(i) Then
            IsCon = True
            St$ = Right(St$, Len(St$) - Len(Conso$(i)))
            strLex$ = strLex$ & "C"
            Exit For
        End If
    Next
   
    For i = 0 To UBound(MalVw$)
        If Left(St$, Len(MalVw$(i))) = MalVw$(i) Then
            IsMal = True
            St$ = Right(St$, Len(St$) - Len(MalVw$(i)))
            strLex$ = strLex$ & "M"
            Exit For
        End If
    Next
   
    For i = 0 To UBound(FemVw$)
        If Left(St$, Len(FemVw$(i))) = FemVw$(i) Then
            IsFem = True
            St$ = Right(St$, Len(St$) - Len(FemVw$(i)))
            strLex$ = strLex$ & "F"
            Exit For
        End If
    Next
   
    For i = 0 To UBound(NeuVw$)
        If Left(St$, Len(NeuVw$(i))) = NeuVw$(i) Then
            IsNeu = True
            St$ = Right(St$, Len(St$) - Len(NeuVw$(i)))
            strLex$ = strLex$ & "N"
            Exit For
        End If
    Next
   
Loop Until St$ = ""    'конец цикла проверки фонем

    Vocalize$ = strLex$
    ' Debug.Print strLex$
    ' strLex$ - выражение, поддающееся грамматической свертке
   
End Function

Function Deflate$(A$)
    Dim cc$, cd$
    cc$ = A$
   
    cc$ = Replace(A$, "C", "")
    cc$ = Replace(cc$, "N", "")
    If cc$ = "" Then
        cc$ = "F"           ' правило CNCNC=F
    Else
   
        While Not Len(cc$) = Len(Replace(cc$, "MM", "M"))                ' страшно неэкономно, но компактно записывается
            cc$ = Replace(cc$, "MM", "M")
        Wend
       
        While Not Len(cc$) = Len(Replace(cc$, "FF", "F"))
            cc$ = Replace(cc$, "FF", "F")
        Wend
       
    End If
    Deflate$ = Right(cc$, 1) ' Если остается сочетание типа MFM считаем,
                            ' что это составное слово, определяемое по последнему корню
End Function


' гейм, как говорится овер. єїћ

Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
therion
ахамад


Зарегистрирован: Dec 02, 2004
Сообщения: 817
Откуда: Ракедтэй Дээдэ Вольта
СообщениеДобавлено: 23.09.07, 21:27 +0000     Ответить с цитатой

функция определяет фонетический ряд (передний, задний) слова.
Нет проверки на некорректность (лишние пробелы, символы латиницы, дефисы).

Пока не придумал что делать с лабиализацией.
Яхонтова Н.С. писал(а):
если первым гласным слова является о или &оacute;, то гласные нижнего подъема следующего слога должны быть лабиализованными, т. е. в следующем слоге не могут стоять а или е. Явление губного притяжения не наблюдается в калмыцком, ойратском и дагурском языках.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
therion
ахамад


Зарегистрирован: Dec 02, 2004
Сообщения: 817
Откуда: Ракедтэй Дээдэ Вольта
СообщениеДобавлено: 26.09.07, 00:50 +0000     Ответить с цитатой

Изменил с учетом лабилизации, функция корректно определяет
какое гласное должно быть в окончании склонения для бурятских слов. Сложные слова определяет по типу последнего гласного

Наверно, для заимствованных слов или имен типа "Игорь", "Дина" придется использовать правила русского языка определения ударения (снова здравствуй, Розенталь).

Почему то никто кроме Tsebeen-а не отписывает.
Неужели не нужно?

Код:

' Copyright www.buryadxelen.org // Dorjy
' MMVII
' free for noncommercial use
' осторожно - программа тупо зависает, если есть символы отличные от бур.кириллицы

' динамические строковые массивы для фонем
Dim MalVw$()
Dim Labyl$()
Dim FemVw$()
Dim NeuVw$()
Dim Conso$()
Dim Phoenemae$()


Sub exampl()
    FillData ' заполняем часто используемые массивы
   
    MsgBox (Syn$("ћюрєє"))
End Sub

Function Syn$(A$)
    Syn$ = Deflate$(Vocalize$(LCase(A$)))
End Function

Public Sub FillData()
    Dim i, j As Integer
    ' Заполняем массивы
    ' ..(легче проверять сначала долгие фонемы, чтоб корректно отрабатывал слова типа
    ' "оюутан" = "о йуу т а н";по хорошему их следовало преобразовать в
    ' отдельные односимвольные фонетические знаки)
   
    ' ЕРЭ
    ' заднеязычные - дифтонги долгие йотированные долгие основные и краткие йотированные
    MalVw$ = Split("ай уй аа уу яа а у я")
   
    ' лабилизированные
    Labyl$ = Split("ой оо ёо о ё") ' все фонет. разновидности "о"
   
    ' ЭМЭ
    ' переднеязычные
    FemVw$ = Split("эй їй ээ її єє еэ э ї е")
    ' кроме юї - вообще пока не обрабатываю
   
    ' ЭРСЭ
    ' среднеязычные
    NeuVw$ = Split("юу ии ю и ы")
   
    ' согласные, аффрикаты плюс все подряд, пока так
    Conso$ = Split("дж дз б в г д ж з к л м н п р с т ф х ћ ц ч ш щ ь ъ")
   
    ' Есть ли смысл отдельно выделять слова с согласными вкфцчщь?
    ' как заимствования? Не всегда только по наличию-отсутствию их можно это определить

    ' спихиваем все массивы в один двумерный, - таблица с размерностью 2, сортированная
    ' по типу, затем по длине фонемы
    ReDim Preserve Phoenemae$(1, UBound(MalVw$) + UBound(Labyl$) + UBound(FemVw$) + UBound(NeuVw$) + UBound(Conso$) + 5 - 1)
   
    j = 0
    For i = 0 To UBound(MalVw$)
        Phoenemae$(0, j) = MalVw$(i)
        Phoenemae$(1, j) = "M"
        j = j + 1
    Next
    For i = 0 To UBound(Labyl$)
        Phoenemae$(0, j) = Labyl$(i)
        Phoenemae$(1, j) = "L"
        j = j + 1
    Next
    For i = 0 To UBound(FemVw$)
        Phoenemae$(0, j) = FemVw$(i)
        Phoenemae$(1, j) = "F"
        j = j + 1
    Next
    For i = 0 To UBound(NeuVw$)
        Phoenemae$(0, j) = NeuVw$(i)
        Phoenemae$(1, j) = "N"
        j = j + 1
    Next
    For i = 0 To UBound(Conso$)
        Phoenemae$(0, j) = Conso$(i)
        Phoenemae$(1, j) = "C"
        j = j + 1
    Next
   

End Sub


' ***************************************

Public Function Vocalize$(St0$)

    Dim i As Integer
    Dim LenF%, LenSt%
    Dim St$, strLex$
    Dim IsFound As Boolean
   
    St$ = St0$
    strLex$ = ""
   
Do 'н.цикла проверки фонем

    IsFound = False
    For i = 0 To UBound(Phoenemae$, 2)
        LenSt% = Len(St$): LenF% = Len(Phoenemae$(0, i))
        If Not LenSt% < LenF% Then
        If Left(St$, LenF%) = Phoenemae$(0, i) Then
            St$ = Right(St$, LenSt% - LenF%)
            strLex$ = strLex$ & Phoenemae$(1, i)
            IsFound = True
            Exit For
        End If
        End If
    Next
    If Not IsFound Then
        strLex$ = "ERROR"   ' проверка на предмет небурятских букв
    End If
   
Loop Until St$ = "" Or Not IsFound    'конец цикла проверки фонем

    Vocalize$ = strLex$
    ' Debug.Print strLex$
    ' strLex$ - выражение, поддающееся грамматической свертке
   
End Function

Function Deflate$(A$)
    Dim cc$, cd$
    Dim i As Integer
    cc$ = A$
   
    cc$ = Replace(A$, "C", "") ' убираем все согласные фонемы
   
   
For i = 0 To 2 ' для длинных чередований нейтр и выраженной гласных

        ' ужимаем повторяющиеся вхождения одного типа гласных до одного вхождения
        While Not Len(cc$) = Len(Replace(cc$, "NN", "N"))
            cc$ = Replace(cc$, "NN", "N")
        Wend
       
        While Not Len(cc$) = Len(Replace(cc$, "MM", "M"))
            cc$ = Replace(cc$, "MM", "M")
        Wend
       
        While Not Len(cc$) = Len(Replace(cc$, "LL", "L"))
            cc$ = Replace(cc$, "LL", "L")
        Wend
       
        While Not Len(cc$) = Len(Replace(cc$, "FF", "F"))
            cc$ = Replace(cc$, "FF", "F")
        Wend
       
        While Not Len(cc$) = Len(Replace(cc$, "NM", "M"))
            cc$ = Replace(cc$, "NM", "M")
        Wend
       
        While Not Len(cc$) = Len(Replace(cc$, "MN", "M"))
            cc$ = Replace(cc$, "MN", "M")
        Wend
       
        While Not Len(cc$) = Len(Replace(cc$, "NF", "F"))
            cc$ = Replace(cc$, "NF", "F")
        Wend
       
        While Not Len(cc$) = Len(Replace(cc$, "FN", "F"))
            cc$ = Replace(cc$, "FN", "F")
        Wend
       
        While Not Len(cc$) = Len(Replace(cc$, "NL", "L"))
            cc$ = Replace(cc$, "NL", "L")
        Wend
       
        While Not Len(cc$) = Len(Replace(cc$, "LN", "M"))
            cc$ = Replace(cc$, "LN", "M")
        Wend
       
        While Not Len(cc$) = Len(Replace(cc$, "LM", "M"))
            cc$ = Replace(cc$, "LM", "M")
        Wend
        ' что то громоздко и неэкономно получилось, нужно делать конечный автомат
Next
        If cc$ = "N" Then
            cc$ = "F"           ' правило CNCNC=F
        End If
   
    cc$ = Right(cc$, 1) ' Если остается сочетание типа MFM или LF считаем,
                            ' что это составное слово, определяемое по последнему корню
    Select Case cc$
        Case "M": Deflate$ = "а"
        Case "F": Deflate$ = "э"
        Case "L": Deflate$ = "о"
    End Select
End Function


' гейм, как говорится овер. єїћ
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Tsebeen
Мудур кэку


Зарегистрирован: Dec 9, 2003
Сообщения: 3030
Откуда: Yдэ голой урда бэе
СообщениеДобавлено: 26.09.07, 01:49 +0000     Ответить с цитатой

Кстати, есть еще один неучтенный случай. В тех случаях, когда мы имеем слова с начальным кратким v (типа vгэ, hvхэ и т.п.), то в аффиксах появляется краткая э, но долгая єє. Например: датив vгэдэ, но инструменталис vгєєр, рефлексивный датив vгэдєє.
_________________
Отшеньдобрый hидальго Дон Цэбээн Кижингинский и Доодо-Кодунский, Улаан-Yдэнский и Улаанбаатарский и прочая, прочая... едет к сеньоре Наталее Добоской и Машзаводской
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
therion
ахамад


Зарегистрирован: Dec 02, 2004
Сообщения: 817
Откуда: Ракедтэй Дээдэ Вольта
СообщениеДобавлено: 26.09.07, 03:39 +0000     Ответить с цитатой

Tsebeen писал(а):
Кстати, есть еще один неучтенный случай. В тех случаях, когда мы имеем слова с начальным кратким v (типа vгэ, hvхэ и т.п.), то в аффиксах появляется краткая э, но долгая єє. Например: датив vгэдэ, но инструменталис vгєєр, рефлексивный датив vгэдєє.


Эх, так и подозревал женская θ где-нить вылезет
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
therion
ахамад


Зарегистрирован: Dec 02, 2004
Сообщения: 817
Откуда: Ракедтэй Дээдэ Вольта
СообщениеДобавлено: 30.09.07, 01:24 +0000     Ответить с цитатой

Добавил функции 2 падежей

например переделывает слово в именительном в дательно-местный или совместный


Код:
' Copyright www.buryadxelen.org // Dorjy
' MMVII
' free for noncommercial use
' осторожно - программа выдает R, если есть символы отличные от бур.кириллицы
' и пустые агументы тоже лучше не вводить :)
' сингармонизм для заимствованных слов определяется неверно,
' "самолёт" -> "самолёдта" вместо "самолёдто" (хотя где логика, зачем заимствовать слова в бурятский вместе с правилами другой фонетики)

' динамические строковые массивы для фонем
Option Explicit
Dim MalVw$()
Dim LabM$()
Dim FemVw$()
Dim LabF$()
Dim NeuVw$()
Dim Conso$()
Dim Phoenemae$()


Sub exampl()
    FillData ' заполняем часто используемые массивы
   
    MsgBox (DativeLocative$("Доржо"))
    MsgBox (Commutative$("малгай"))
   
   
End Sub

Function Commutative$(A$)
    Dim SynType$
    SynType$ = Syn$(A$)
    SynType$ = IIf(SynType$ = "є", "э", SynType$)
    Commutative$ = A$ & "т" & SynType$ & "й"
End Function

Function DativeLocative$(A$)
    Dim SynType$, Ending$
    SynType$ = Syn$(A$)
    SynType$ = IIf(SynType$ = "є", "э", SynType$)
    Ending$ = Right(A$, 1)

    If (Ending$ Like "[бвгдкпрс]") Then
        DativeLocative$ = A$ & "т" & SynType$
    ElseIf Ending$ = "т" Then
        DativeLocative$ = Left(A$, Len(A$) - 1) & "дт" & SynType$
    ElseIf Ending$ = "и" Then
        SynType$ = Syn$(Left(A$, Len(A$) - 1)) ' отрубаем "и", определяем сингармонизм без нее
        SynType$ = IIf(SynType$ = "є", "э", SynType$)
        DativeLocative$ = A$ & "д" & SynType$
    Else
        DativeLocative$ = A$ & "д" & SynType$
    End If

End Function

Function Syn$(A$)
    Syn$ = Deflate$(Vocalize$(LCase(A$)))
End Function

Public Sub FillData()
    Dim i, j As Integer
    ' Заполняем массивы
    ' ..(легче проверять сначала долгие фонемы, чтоб корректно отрабатывал слова типа
    ' "оюутан" = "о йуу т а н";по хорошему их следовало преобразовать в
    ' отдельные односимвольные фонетические знаки)
   
    ' ЕРЭ
    ' заднеязычные - дифтонги долгие йотированные долгие основные и краткие йотированные
    MalVw$ = Split("ай уй аа уу яа а у я")
   
    ' лабилизированные заднеязычные
    LabM$ = Split("ой оо ёо о ё") ' все фонет. разновидности "о"
   
    ' ЭМЭ
    ' переднеязычные
    FemVw$ = Split("эй їй ээ її єє еэ э е")
   
    ' лабилизированные переднеязычные
    LabF$ = Split("ї")
   
    ' ЭРСЭ
    ' среднеязычные
    NeuVw$ = Split("юу ии ю и ы")
   
    ' согласные, аффрикаты плюс все подряд, пока так
    Conso$ = Split("дж дз б в г д ж з к л м н п р с т ф х ћ ц ч ш щ ь ъ")
   
    ' Есть ли смысл отдельно выделять слова с согласными вкфцчщь?
    ' как заимствования? Не всегда только по наличию-отсутствию их можно это определить

    ' спихиваем все массивы в один двумерный, - таблица с размерностью 2, сортированная
    ' по типу, затем по длине фонемы
    ReDim Preserve Phoenemae$(1, UBound(MalVw$) + UBound(LabM$) + UBound(FemVw$) + UBound(LabF$) + UBound(NeuVw$) + UBound(Conso$) + 6 - 1)
   
    j = 0
    For i = 0 To UBound(MalVw$)
        Phoenemae$(0, j) = MalVw$(i)
        Phoenemae$(1, j) = "M"
        j = j + 1
    Next
    For i = 0 To UBound(LabM$)
        Phoenemae$(0, j) = LabM$(i)
        Phoenemae$(1, j) = "L"
        j = j + 1
    Next
    For i = 0 To UBound(FemVw$)
        Phoenemae$(0, j) = FemVw$(i)
        Phoenemae$(1, j) = "F"
        j = j + 1
    Next
    For i = 0 To UBound(LabF$)
        Phoenemae$(0, j) = LabF(i)
        Phoenemae$(1, j) = "Y"
        j = j + 1
    Next
    For i = 0 To UBound(NeuVw$)
        Phoenemae$(0, j) = NeuVw$(i)
        Phoenemae$(1, j) = "N"
        j = j + 1
    Next
    For i = 0 To UBound(Conso$)
        Phoenemae$(0, j) = Conso$(i)
        Phoenemae$(1, j) = "C"
        j = j + 1
    Next
   

End Sub


' ***************************************

Public Function Vocalize$(St0$)

    Dim i As Integer
    Dim LenF%, LenSt%
    Dim St$, strLex$
    Dim IsFound As Boolean
   
    St$ = St0$
    strLex$ = ""
   
Do 'н.цикла проверки фонем

    IsFound = False
    For i = 0 To UBound(Phoenemae$, 2)
        LenSt% = Len(St$): LenF% = Len(Phoenemae$(0, i))
        If Not LenSt% < LenF% Then
        If Left(St$, LenF%) = Phoenemae$(0, i) Then
            St$ = Right(St$, LenSt% - LenF%)
            strLex$ = strLex$ & Phoenemae$(1, i)
            IsFound = True
            Exit For
        End If
        End If
    Next
    If Not IsFound Then
        strLex$ = "ERROR"   ' проверка на предмет небурятских букв
    End If
   
Loop Until St$ = "" Or Not IsFound    'конец цикла проверки фонем

    Vocalize$ = strLex$
    ' Debug.Print strLex$
    ' strLex$ - выражение, поддающееся грамматической свертке
   
End Function

Function Deflate$(A$)
    Dim cc$, cd$
    Dim i As Integer
    cc$ = A$
   
    cc$ = Replace(A$, "C", "") ' убираем все согласные фонемы
   
   
For i = 0 To 2 ' для длинных чередований нейтр и выраженной гласных

        ' ужимаем повторяющиеся вхождения одного типа гласных до одного вхождения
        While Not Len(cc$) = Len(Replace(cc$, "NN", "N"))
            cc$ = Replace(cc$, "NN", "N")
        Wend
       
        While Not Len(cc$) = Len(Replace(cc$, "MM", "M"))
            cc$ = Replace(cc$, "MM", "M")
        Wend
       
        While Not Len(cc$) = Len(Replace(cc$, "LL", "L"))
            cc$ = Replace(cc$, "LL", "L")
        Wend
       
        While Not Len(cc$) = Len(Replace(cc$, "FF", "F"))
            cc$ = Replace(cc$, "FF", "F")
        Wend
       
        While Not Len(cc$) = Len(Replace(cc$, "NM", "M"))
            cc$ = Replace(cc$, "NM", "M")
        Wend
       
        While Not Len(cc$) = Len(Replace(cc$, "MN", "M"))
            cc$ = Replace(cc$, "MN", "M")
        Wend
       
        While Not Len(cc$) = Len(Replace(cc$, "NF", "F"))
            cc$ = Replace(cc$, "NF", "F")
        Wend
       
        While Not Len(cc$) = Len(Replace(cc$, "FN", "F"))
            cc$ = Replace(cc$, "FN", "F")
        Wend
       
        While Not Len(cc$) = Len(Replace(cc$, "NL", "L"))
            cc$ = Replace(cc$, "NL", "L")
        Wend
       
        While Not Len(cc$) = Len(Replace(cc$, "LN", "M"))
            cc$ = Replace(cc$, "LN", "M")
        Wend
       
        While Not Len(cc$) = Len(Replace(cc$, "LM", "M"))
            cc$ = Replace(cc$, "LM", "M")
        Wend
       
        While Not Len(cc$) = Len(Replace(cc$, "ML", "M"))
            cc$ = Replace(cc$, "ML", "M")
        Wend
       
        ' что то громоздко и неэкономно получилось, нужно делать конечный автомат
Next
        If Left(cc$, 1) = "Y" Then ' проверка только по первой гласной фонеме на "ї", никаких сверток
            cc$ = "Y"
        End If
       
        If cc$ = "N" Then
            cc$ = "F"           ' правило CNCNC=F
        End If
   
    cc$ = Right(cc$, 1) ' Если остается сочетание типа MFM или LF считаем,
                            ' что это составное слово, определяемое по последнему корню
    Select Case cc$
        Case "M": Deflate$ = "а"
        Case "F": Deflate$ = "э"
        Case "L": Deflate$ = "о"
        Case "Y": Deflate$ = "є"
    End Select
End Function


' гейм, как говорится овер. єїћ

Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Tsebeen
Мудур кэку


Зарегистрирован: Dec 9, 2003
Сообщения: 3030
Откуда: Yдэ голой урда бэе
СообщениеДобавлено: 30.09.07, 07:51 +0000     Ответить с цитатой

Доржын + Dat дает Доржында вм. Доржындо.

в остальном кажется ОК.

У меня предложение писать сразу на php. Сделаю страничку для тестов на www.buryadxelen.org.
_________________
Отшеньдобрый hидальго Дон Цэбээн Кижингинский и Доодо-Кодунский, Улаан-Yдэнский и Улаанбаатарский и прочая, прочая... едет к сеньоре Наталее Добоской и Машзаводской
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
therion
ахамад


Зарегистрирован: Dec 02, 2004
Сообщения: 817
Откуда: Ракедтэй Дээдэ Вольта
СообщениеДобавлено: 01.10.07, 03:01 +0000     Ответить с цитатой

Tsebeen писал(а):
Доржын + Dat дает Доржында вм. Доржындо.


:) ну да, так ведь функция переделывает из именительного, -
со сложными падежами не работает пока.
тут она действует по правилу
"LN" -> "M" например "дорюун" -> "дорюунда"
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
therion
ахамад


Зарегистрирован: Dec 02, 2004
Сообщения: 817
Откуда: Ракедтэй Дээдэ Вольта
СообщениеДобавлено: 12.10.07, 06:08 +0000     Ответить с цитатой

Для обработки некоторых падежей пришлось добавить словарь. Чтобы упростить перенос на другие платформы, не стал делать доступ к БД, а ввел словари неустойчивых окончаний прямо в исходнике. около сотни на Г, около 1200 на Н
Исходник теперь на форуме будет смотреться несколько громоздко.
_________________
проект "Lemmata Buriatis":
http://buryad.blogspot.com/
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Показать сообщения:   
Начать новую тему   Ответить на тему    Список форумов Сайт бурятского народа -> Буряад хөөрэлдөөн Часовой пояс: GMT - 3
На страницу 1, 2  След.
Страница 1 из 2

Поставить закладку
Версия для печати (вся тема целиком, трафик!)

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
электронный учебник бурятского языка




Рейтинг@Mail.ru