Difference between revisions of "Kymorph/Remaining transducer issues/п deletion and voicing conflict"
Jump to navigation
Jump to search
Firespeaker (talk | contribs) |
Firespeaker (talk | contribs) m (moved Kyrgyz/Remaining transducer issues/п deletion and voicing conflict to Kymorph/Remaining transducer issues/п deletion and voicing conflict) |
||
(6 intermediate revisions by 2 users not shown) | |||
Line 17: | Line 17: | ||
=== The conflict === |
=== The conflict === |
||
As expected, the following conflict results from these two rules being present in the same .twol file: |
|||
<pre> |
<pre> |
||
There is a <=-rule conflict between "Intervocalic voicing of п" and "Deletion of п at end of verb stem in <cv_perf>". |
There is a <=-rule conflict between "Intervocalic voicing of п" and "Deletion of п at end of verb stem in <cv_perf>". |
||
Line 24: | Line 25: | ||
== 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 30: | 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 китепи)
- forms not getting processed: