Difference between revisions of "Kymorph/Remaining transducer issues/п deletion and voicing conflict"

From Apertium
Jump to navigation Jump to search
 
(9 intermediate revisions by 2 users not shown)
Line 1: Line 1:
  +
__NOTOC__
 
== The problem ==
 
== The problem ==
 
=== The environment ===
 
=== The environment ===
Line 16: Line 17:
   
 
=== The conflict ===
 
=== The conflict ===
  +
As expected, the following conflict results from these two rules being present in the same .twol file:
: There is a <=-rule conflict between "Intervocalic voicing of п everywhere except in <cv_perf>" and "Deletion of п at end of verb stem in <cv_perf>".
 
  +
<pre>
: E.g. in context {I}:и >: ё:ё _ >: {I}:и п:п
 
  +
There is a <=-rule conflict between "Intervocalic voicing of п" and "Deletion of п at end of verb stem in <cv_perf>".
: WARNING! The conflict is unresolvable.
 
  +
E.g. in context {I}:и >: ё:ё _ >: {I}:и п:п
  +
WARNING! The conflict is unresolvable.
  +
</pre>
   
 
== What needs to be done ==
 
== What needs to be done ==
Somehow, the voicing rule needs to exclude the entire environment of the deletion rule.
+
Somehow, the voicing rule's environment needs to exclude the entire environment of the deletion rule.
   
 
=== How to do it ===
 
=== How to do it ===
Line 27: Line 31:
   
 
=== How not to do it ===
 
=== How not to do it ===
  +
* Simply subtracting the deletion rule's environment from the voicing rule's environment is impossible because _ cannot be contained in such subtractions.
  +
* Subtracting the more restrictive rule's left (x) and right (y) environments from the more general rule's left (a) and right (b) environments (respectively, resulting in [ a - x ] _ [ b - y ]) doesn't work either, because then it fails to apply the more general [voicing] rule after e.g., any x environment, not just when any y follows.
 
* Using <= and => instead of <=> does not seem to be a possible solution.
 
* Using <= and => instead of <=> does not seem to be a possible solution.
  +
* Subtracting the more restrictive rule's left (x) and right (y) environments from the more general rule's left (a) and right (b) environments (respectively, resulting in [ a - x ] _ [ b - y ]) doesn't work, because then it fails to apply the more general rule after e.g., any x environment, not just when any y follows.
 
  +
== Possible solutions ==
  +
  +
=== Multiple context subtraction example ===
  +
  +
<pre>
  +
$ svn diff apertium-tr-ky.ky.twol
  +
Index: apertium-tr-ky.ky.twol
  +
===================================================================
  +
--- apertium-tr-ky.ky.twol (revision 32117)
  +
+++ apertium-tr-ky.ky.twol (arbetskopia)
  +
@@ -50,6 +50,8 @@
  +
BackLowRndVow = О о Ё ё ;
  +
LowVow = Е е Э э Ө ө А а Я я О о Ё ё ; ! АА аа ЭЭ ээ ӨӨ өө ОО оо ;
  +
YotVow = Я я Е е Ё ё Ю ю ;
  +
+UnlowVow = И У Ү Ы Ю
  +
+ и у ү ы ю ;
  +
  +
NasalCns = м н ң
  +
М Н Ң ;
  +
@@ -136,7 +138,11 @@
  +
!п:б <=> :SurVow _ %>: [ [ (:0) :SurVow ] - $[ %{I%}: п ] ] ;
  +
!п:б <=> :SurVow _ %>: [ [ (:0) :SurVow ] - [ %{I%}: п ] ] ;
  +
!п:б <=> :SurVow (:0) _ %>: (:0) [ :SurVow - %{I%}:LowVow ] ;
  +
-п:б <=> :SurVow (:0) _ %>: (:0) :SurVow ;
  +
+
  +
+п:б <=> :UnlowVow (:0) _ %>: (:0) [ [:SurVow - %{I%}:] [:* - п]* | %{I%}: ] .#. ;
  +
+ :UnlowVow (:0) _ %>: (:0) :SurVow ;
  +
+ :SurVow (:0) _ %>: (:0) [ [:SurVow - %{I%}:] [:* - п]* | %{I%}: ] .#. ;
  +
+
  +
!п:б => :SurVow (:0) _ %>: (:0) :SurVow ;
  +
!п:б <= :SurVow (:0) _ %>: (:0) :SurVow ;
  +
!п:б <=> [ [ :SurVow :* ] - [ :LowVow :* ] ] (:0) _ %>: (:0) [ [ :* :SurVow ] - [ :* %{I%}: п [ :Cns | .#. ] ] ] ;
  +
@@ -310,15 +316,15 @@
  +
LastVowel in ( и ү е э ө я а ё о ы ю у )
  +
matched ;
  +
  +
-"Deletion of all the other {I}s in {I}п <cv_perf>"
  +
-%{I%}:0 <=> [ :SurVow - м:SurVow ] %>: _ п ;
  +
+!"Deletion of all the other {I}s in {I}п <cv_perf>"
  +
+!%{I%}:0 <=> [ :SurVow - м:SurVow ] %>: _ п ;
  +
  +
!!"Deletion of п at end of verb stem before {I}п <cv_perf>"
  +
!!п:0 <=> :LowVow _ %>: %{I%}: п ;
  +
  +
-!"Deletion of п at end of verb stem in <cv_perf>"
  +
+"Deletion of п at end of verb stem in <cv_perf>"
  +
!!п:0 <=> _ %>: %{I%}:0 п ;
  +
-!п:0 <=> :LowVow _ %>: %{I%}: п ;
  +
+п:0 <=> :LowVow _ %>: %{I%}: п ;
  +
!!п:0 <= :LowVow _ %>: %{I%}: п ;
  +
!!п:0 <=> :LowVow _ %>: %{I%}: п [ :Cns | .#. ] ;
  +
  +
</pre>
  +
  +
=== Implementation with above and problems ===
  +
* Relevant rules:
  +
<pre>
  +
"Intervocalic voicing of п everywhere except in <cv_perf>"
  +
п:б <=> :HighVow _ %>: [ [:SurVow - %{I%}:] [:* - п]* | %{I%}: ]/[ :0 ] .#. ;
  +
:HighVow _ %>: :SurVow/:0 ;
  +
:SurVow _ %>: [ [:SurVow - %{I%}:] [:* - п]* | %{I%}: ]/[ :0 ] .#. ;
  +
  +
"Vowel deletion for archiphoneme {I}"
  +
%{I%}:0 <=> [ :SurVow ]/[ [ :0 - й:0 ] | %>: ] _ \[ п | р:0 ] ;
  +
  +
"Vowel harmony for archiphoneme {I}"
  +
%{I%}:Vy <=> [ :LastVowel Cns* [ :Cns - [ й: | %{I%}:LabialCns | %{n%}: ] ] ]/[ %>: | :0 ] _ \[ р:0 | п: ] ;
  +
where Vy in ( и ү и и ү ы ы у у ы у у )
  +
LastVowel in ( и ү е э ө я а ё о ы ю у )
  +
matched ;
  +
  +
  +
"Vowel harmony for archiphoneme {I} before п in <cv_perf>"
  +
%{I%}:Vy <=> [ [ :LastVowel ] Cns* [ Cns - [ й: | LabialCns ] ] ]/[ :0 | %>: ] _ п ;
  +
where Vy in ( и ү и и ү ы ы у у ы у у )
  +
LastVowel in ( и ү е э ө я а ё о ы ю у )
  +
matched ;
  +
  +
"Deletion of all the other {I}s in {I}п <cv_perf>"
  +
%{I%}:0 <=> [ :SurVow - м:SurVow ] %>: _ п ;
  +
  +
"Deletion of п at end of verb stem in <cv_perf>"
  +
п:0 <=> :LowVow _ %>: %{I%}: п ;
  +
</pre>
  +
  +
* Current issues:
  +
** Conflict (albeit "resolved"):
  +
<pre>
  +
There is a <=-rule conflict between "Intervocalic voicing of п everywhere except in <cv_perf>" and "Deletion of п at end of verb stem in <cv_perf>".
  +
E.g. in context {I}:и ё:ё _ >: {I}: п:п
  +
Resolving the conflict by restricting the context of "Intervocalic voicing of п everywhere except in <cv_perf>".
  +
</pre>
  +
** forms not getting processed:
  +
*** т а р а п > {S} {I} {n} > {D} {A} н : тарабынан (instead тарапынан)
  +
*** к и т е п > {S} {I} {n} : китеби (instead китепи)

Latest revision as of 21:32, 27 March 2012

The problem[edit]

The environment[edit]

  • п should delete between a low vowel and a morpheme boundary followed by {I}п
    • e.g., тап>{I}п : таап, теп>{I}п : тээп (everything else needed for these rules works)
  • п should voice (to б) in all other intervocalic positions
    • e.g., тап>{A} : таба, теп>{A} : тебе
    • also: кап>{I} : кабы, кеп>{I} : кеби

The basic rules[edit]

  • "Intervocalic voicing of п"
п:б <=> :SurVow (:0) _ %>: (:0) :SurVow ;
  • "Deletion of п at end of verb stem in <cv_perf>"
п:0 <=> :LowVow _ %>: %{I%}: п ;

The conflict[edit]

As expected, the following conflict results from these two rules being present in the same .twol file:

There is a <=-rule conflict between "Intervocalic voicing of п" and "Deletion of п at end of verb stem in <cv_perf>".
E.g. in context {I}:и >: ё:ё _ >: {I}:и п:п 
WARNING! The conflict is unresolvable.

What needs to be done[edit]

Somehow, the voicing rule's environment needs to exclude the entire environment of the deletion rule.

How to do it[edit]

It might be possible with what's suggested in the twolc book on pp. 49-54.

How not to do it[edit]

  • Simply subtracting the deletion rule's environment from the voicing rule's environment is impossible because _ cannot be contained in such subtractions.
  • Subtracting the more restrictive rule's left (x) and right (y) environments from the more general rule's left (a) and right (b) environments (respectively, resulting in [ a - x ] _ [ b - y ]) doesn't work either, because then it fails to apply the more general [voicing] rule after e.g., any x environment, not just when any y follows.
  • Using <= and => instead of <=> does not seem to be a possible solution.

Possible solutions[edit]

Multiple context subtraction example[edit]

$ svn diff apertium-tr-ky.ky.twol
Index: apertium-tr-ky.ky.twol
===================================================================
--- apertium-tr-ky.ky.twol      (revision 32117)
+++ apertium-tr-ky.ky.twol      (arbetskopia)
@@ -50,6 +50,8 @@
 BackLowRndVow = О о Ё ё ;
 LowVow = Е е Э э Ө ө А а Я я О о Ё ё ; ! АА аа ЭЭ ээ ӨӨ өө ОО оо ;
 YotVow = Я я Е е Ё ё Ю ю ;
+UnlowVow = И У Ү Ы Ю
+           и у ү ы ю ;

 NasalCns = м н ң
            М Н Ң ;
@@ -136,7 +138,11 @@
 !п:б <=> :SurVow _ %>: [ [ (:0) :SurVow ] - $[ %{I%}: п ] ] ;
 !п:б <=> :SurVow _ %>: [ [ (:0) :SurVow ] - [ %{I%}: п ] ] ;
 !п:б <=> :SurVow (:0) _ %>: (:0) [ :SurVow - %{I%}:LowVow ] ;
-п:б <=> :SurVow (:0) _ %>: (:0) :SurVow ;
+
+п:б <=> :UnlowVow (:0) _ %>: (:0) [ [:SurVow - %{I%}:] [:* - п]* | %{I%}: ] .#. ;
+        :UnlowVow (:0) _ %>: (:0) :SurVow ;
+        :SurVow (:0)   _ %>: (:0) [ [:SurVow - %{I%}:] [:* - п]* | %{I%}: ] .#. ;
+
 !п:б => :SurVow (:0) _ %>: (:0) :SurVow ;
 !п:б <= :SurVow (:0) _ %>: (:0) :SurVow ;
 !п:б <=> [ [ :SurVow :* ] - [ :LowVow :* ] ] (:0) _ %>: (:0) [ [ :* :SurVow ] - [ :* %{I%}: п [ :Cns | .#. ] ] ] ;
@@ -310,15 +316,15 @@
   LastVowel  in  (  и  ү  е  э  ө  я  а  ё  о  ы  ю  у )
            matched ;

-"Deletion of all the other {I}s in {I}п <cv_perf>"
-%{I%}:0 <=> [ :SurVow - м:SurVow ] %>: _ п ;
+!"Deletion of all the other {I}s in {I}п <cv_perf>"
+!%{I%}:0 <=> [ :SurVow - м:SurVow ] %>: _ п ;

 !!"Deletion of п at end of verb stem before {I}п <cv_perf>"
 !!п:0 <=> :LowVow _ %>: %{I%}: п ;

-!"Deletion of п at end of verb stem in <cv_perf>"
+"Deletion of п at end of verb stem in <cv_perf>"
 !!п:0 <=> _ %>: %{I%}:0 п ;
-!п:0 <=> :LowVow _ %>: %{I%}: п ;
+п:0 <=> :LowVow _ %>: %{I%}: п ;
 !!п:0 <= :LowVow _ %>: %{I%}: п ;
 !!п:0 <=> :LowVow _ %>: %{I%}: п [ :Cns | .#. ] ;

Implementation with above and problems[edit]

  • Relevant rules:
"Intervocalic voicing of п everywhere except in <cv_perf>"
п:б <=> :HighVow _ %>: [ [:SurVow - %{I%}:] [:* - п]* | %{I%}: ]/[ :0 ] .#. ;
        :HighVow _ %>: :SurVow/:0 ;
        :SurVow  _ %>: [ [:SurVow - %{I%}:] [:* - п]* | %{I%}: ]/[ :0 ] .#. ;

"Vowel deletion for archiphoneme {I}"
%{I%}:0 <=> [ :SurVow ]/[ [ :0 - й:0 ] | %>: ] _ \[ п | р:0 ] ;

"Vowel harmony for archiphoneme {I}"
%{I%}:Vy <=> [ :LastVowel Cns* [ :Cns - [ й: | %{I%}:LabialCns | %{n%}: ] ] ]/[ %>: | :0 ] _ \[ р:0 | п: ] ;
  where  Vy  in  (  и  ү  и  и  ү  ы  ы  у  у  ы  у  у )
  LastVowel  in  (  и  ү  е  э  ө  я  а  ё  о  ы  ю  у )
           matched ;


"Vowel harmony for archiphoneme {I} before п in <cv_perf>"
%{I%}:Vy <=> [ [ :LastVowel ] Cns* [ Cns - [ й: | LabialCns ] ] ]/[ :0 | %>: ]  _ п ;
  where  Vy  in  (  и  ү  и  и  ү  ы  ы  у  у  ы  у  у )
  LastVowel  in  (  и  ү  е  э  ө  я  а  ё  о  ы  ю  у )
           matched ;

"Deletion of all the other {I}s in {I}п <cv_perf>"
%{I%}:0 <=> [ :SurVow - м:SurVow ] %>: _ п ;

"Deletion of п at end of verb stem in <cv_perf>"
п:0 <=> :LowVow _ %>: %{I%}: п ;
  • Current issues:
    • Conflict (albeit "resolved"):
There is a <=-rule conflict between "Intervocalic voicing of п everywhere except in <cv_perf>" and "Deletion of п at end of verb stem in <cv_perf>".
E.g. in context {I}:и ё:ё _ >: {I}: п:п 
Resolving the conflict by restricting the context of "Intervocalic voicing of п everywhere except in <cv_perf>".
    • forms not getting processed:
      • т а р а п > {S} {I} {n} > {D} {A} н : тарабынан (instead тарапынан)
      • к и т е п > {S} {I} {n} : китеби (instead китепи)