Apertium has moved from SourceForge to GitHub.
If you have any questions, please come and talk to us on #apertium on irc.freenode.net or contact the GitHub migration team.

Morphology of Khalkha/АА vowel harmony issue

From Apertium
Jump to: navigation, search

There is a rule (or set of rules?) that's acting up in the Khalkha transducer.

The main rule involved is that which turns the second {А} archiphoneme in {А}{А} to one of a series of vowels that isn't the default {А}. There is another series of rules which then adjust the first {А} based on the second {А} and are sensitive to segments which may precede the {А}s as well.

[edit] Expected behaviour

  • нүд<code><n><abl>нүд>{Н}{А}{А}снүднээс
  • i.e., н:н ү:ү д:д >:0 {Н}:н {А}:э {А}:э с:с

By "the rule doesn't work", I mean that the transducer outputs the defaults of {А}: нүднаас.

[edit] The main rule

In this form, the rule "works" for the example above. See below for variants that do and don't work, as well as some assumptions and other potentially relevant rules.

"{A} vowel harmony for second {А} in {А}{А}"
%{А%}:Vy <=> [ :Vx - %{А%}: ] [ :NonVow* %>: :NonVow ]/[ %>: | :0* | :%  ] [ %{А%}: - :0 ] _ ;
         except
             _ %{А%}: ;  ! if {A}{A}, only do second {A}
         where Vx in ( ү э ө о )
               Vy in ( э э ө о )
         matched ;

[edit] Variants of the crucial line

[edit] That work

Specifically with the example above.

  • %{А%}:Vy <=> [ :Vx - %{А%}: ] [ :NonVow* %>: :NonVow ]/[ :0* | :% ] [ %{А%}: - :0 ] _ ;
  • %{А%}:Vy <=> [ :Vx - %{А%}: ] [ :NonVow* %>:* :NonVow ]/[ %>: | :0* | :% ] [ %{А%}: - :0 ] _ ;

[edit] That don't work

Specifically with the example above.

  • %{А%}:Vy <=> [ :Vx - %{А%}: ] [ :NonVow* :NonVow ]/[ %>: | :0* | :% ] [ %{А%}: - :0 ] _ ;
  • %{А%}:Vy <=> [ :Vx - %{А%}: ] [ :NonVow* :NonVow ]/[ %>:* | :0* | :% ] [ %{А%}: - :0 ] _ ;
  • %{А%}:Vy <=> [ :Vx - %{А%}: ] [ :NonVow* %>: :NonVow ]/[ :0 | :% ] [ %{А%}: - :0 ] _ ;
  • %{А%}:Vy <=> [ :Vx - %{А%}: ] [ :NonVow* :NonVow ]/[ [ :0 - %{А%}: ]* | :% ] [ %{А%}: - :0 ] _ ;

[edit] Some assumptions

  • By using /[ :0 | :% ], I should have any number of %>:0 interspersed in all locations in [ :NonVow* :NonVow ], though this doesn't seem to be the case, since [ :NonVow* %>: :NonVow ] behaves differently from [ :NonVow* :NonVow ]/[ :0 ]. It doesn't seem to matter whether the things after / have * after them or not.
  • The point of the rule is to change the second {А} (when there are two {А}s in a row) to a certain vowel based on the last vowel seen before the series of {А}s. That previous vowel, by the language's phonotactics, must occur with at least one non-vowel (up to 4 or so) intervening between the previous vowel and the {А}. However, when I make the rule as %{А%}:Vy <=> :Vx [ :NonVow* :NonVow ]/[ [ :0 - %{А%}: ] | :% ] %{А%}:Vow _ ;, I get conflicts like/including the following:
There is a <=-rule conflict between "{A} vowel harmony for second {А} in {А}{А} SUBCASE: Vx=ү Vy=э" and "{A} vowel harmony for second {А} in {А}{А} SUBCASE: Vx=э Vy=э".
E.g. in context {У}:ү г:г {I}: {А}:э г:г _ 

There is a <=-rule conflict between "{A} vowel harmony for second {А} in {А}{А} SUBCASE: Vx=ү Vy=э" and "{A} vowel harmony for second {А} in {А}{А} SUBCASE: Vx=ө Vy=ө".
E.g. in context {У}:ү г:г {I}: {А}:ө г:г _ 
In these cases, the {А} should harmonise to the previous {А} (which surfaces as a vowel). But what's weirder is that the context does not require that an {А}: precede _ .

[edit] Other potentially relevant rules


"{А} vowel harmony for first {А} in {A}{A}"
%{А%}:Vy <=> _ %{А%}:Vx ;
         except
             ь:/:0 _ %{А%}: ;
             :и/:0 _ %{А%}: ;
         where Vx in ( э ө о )
               Vy in ( э ө о )
         matched ;

!! ёс>{А}{А}c:ёсоос, жил>{А}{А}c:жилээс
"{А} vowel harmony for Y ''vowels''"
%{А%}:Vy <=> .#. (:NonVow) [ :Vx - %{А%}: ] [ [ :NonVow - Y: ] ( [ :NonVow - Y: ]*) ]/[ :0 | :% ] %{А%}: _ ;
         except
             _ %{А%}: ;  ! if {A}{A}, only do second {A}
         where Vx in ( е ё и )
               Vy in ( э о э )
         matched ;

!! анги>{А}{А}с:ангиас, морь>{А}{А}с:мориос
"first {А} deletes after и or ь:и"
%{А%}:0 <=> [ :и | ь:и ]/:0 _ %{А%}: ;

[edit] Some defaults

 %{ң%}:н %{В%}:в %{Т%}:т %{Д%}:д %{Н%}:н ! consonants
 %{г%}:0 %{й%}:0 %{а%}:0 %{ь%}:0 %{н%}:0 ! disappearing stuff
 %{ъ%}:0                                 ! "
 %{А%}:а %{I%}:ы %{У%}:у                 ! Vowels
 ° %% %, %. %- %>:0 %          

NonVow = Б В Г Д Е Ж З Й К Л М Н П Р С Т Ф Х Ц Ч Ш Ь Ъ Я
         б в г д е ж з й к л м н п р с т ф х ц ч ш ь ъ я ; 

Y = е я ё ;
Personal tools