diff --git a/epitran/data/map/kab-Latn.csv b/epitran/data/map/kab-Latn.csv index 3e113cc..c760276 100644 --- a/epitran/data/map/kab-Latn.csv +++ b/epitran/data/map/kab-Latn.csv @@ -1,9 +1,37 @@ Orth,Phon +čč,t͡ʃː +ǧǧ,d͡ʒː +qq,qː +jj,ʒː +cc,ʃː +hh,hː +ww,wː +yy,jː +ḥḥ,ħː +bb,bː +dd,dː +ff,fː +gg,ɡː +kk,kː +ll,lː +mm,mː +nn,nː +rr,rː +ss,sː +tt,tː +xx,χː +zz,zː +ɣɣ,ʁː +ṣṣ,sˤː +ṭṭ,tˤː +ḍḍ,dˤː +ẓẓ,zˤː +ṛṛ,rˤː +θ,θ a,a i,i u,u e,ə -o,o y,j w,w b,b @@ -19,10 +47,9 @@ q,q r,r s,s t,t -v,v x,χ z,z -ɣ,ɣ +ɣ,ʁ ḥ,ħ ṣ,sˤ ṭ,tˤ @@ -33,22 +60,4 @@ z,z ǧ,d͡ʒ j,ʒ c,ʃ -gh,ɣ -ch,ʃ -dj,d͡ʒ -tch,t͡ʃ -ts,t͡s -dz,d͡z -bb,bː -dd,dː -ff,fː -gg,ɡː -kk,kː -ll,lː -mm,mː -nn,nː -rr,rː -ss,sː -zz,zː -xx,χː -ɣɣ,ɣː \ No newline at end of file +v,v diff --git a/epitran/data/post/kab-Latn.txt b/epitran/data/post/kab-Latn.txt new file mode 100644 index 0000000..85b70e0 --- /dev/null +++ b/epitran/data/post/kab-Latn.txt @@ -0,0 +1,24 @@ +% Kabyle (kab-Latn) postprocessor for Epitran +% Author: Athmane MOKRAOUI +% +% This postprocessor cleans up phonological output after mapping. +% +% Current version is minimal - most Kabyle phonology is handled +% in the preprocessor. Future versions may add: +% - Schwa deletion in specific cluster environments +% - Emphatic spread effects on vowels +% - Vowel reduction rules + +% ============================================================ +% 1. SCHWA CLEANUP (optional) +% ============================================================ +% Delete schwa between consonants in certain environments +% This is a conservative rule - uncomment if needed +% ə -> 0 / (b|d|f|g|ɣ|h|j|k|l|m|n|q|r|s|t|w|x|z|ʃ|ʒ|χ|ħ|θ) _ (b|d|f|g|ɣ|h|j|k|l|m|n|q|r|s|t|w|x|z|ʃ|ʒ|χ|ħ|θ) + +% ============================================================ +% 2. VOWEL LENGTH REMOVAL +% ============================================================ +% Kabyle does not have phonemic vowel length. +% If length markers appear (from geminate mapping), they are +% consonantal length, not vocalic. No action needed here. diff --git a/epitran/data/pre/kab-Latn.txt b/epitran/data/pre/kab-Latn.txt new file mode 100644 index 0000000..6305b8b --- /dev/null +++ b/epitran/data/pre/kab-Latn.txt @@ -0,0 +1,30 @@ +% Kabyle (kab-Latn) preprocessor for Epitran +% Author: ButterflyOfFire + +% ============================================================ +% 0. RECOMPOSITION (fix Unicode decomposition issue) +% ============================================================ +% Epitran decomposes ṭ to t+̣ internally. Recompose before other rules. +ṭ -> ṭ / _ + +% ============================================================ +% 1. CONSONANT ASSIMILATION & ADAPTATIONS +% ============================================================ +n -> m / _ (b|m|p) +p -> b / _ + +% ============================================================ +% 2. GEMINATE SHIELDING +% ============================================================ +ṭṭ -> W / _ + +% ============================================================ +% 3. SPIRANTIZATION +% ============================================================ +t -> θ / _ (a|e|i|u) +t -> θ / (a|e|i|u) _ + +% ============================================================ +% 4. UNSHIELD +% ============================================================ +W -> ṭṭ / _ diff --git a/epitran/test/test_kabyle.py b/epitran/test/test_kabyle.py index a7cf40d..6dec157 100644 --- a/epitran/test/test_kabyle.py +++ b/epitran/test/test_kabyle.py @@ -7,11 +7,12 @@ def setUp(self): def test_basic_words(self): for i, o in [ - ("taqcict", "taqʃiʃt"), - ("axxam", "aχːam"), - ("Nniɣ", "nːiɣ"), - ("abrid", "abrid"), - ("tuwiḍ", "tuwidˤ"), + ("taqcict", "θæqʃiʃθ"), + ("tamellalt", "θæməlːælt"), + ("axxam", "æχːæm"), + ("Nniɣ", "nːiʁ"), + ("abrid", "æβrid"), + ("tewwiḍ", "θəwːidˤ"), ]: tr = self.epi.transliterate(i) self.assertEqual(tr, o)