From 9e6da60533c1ccf6ef45f01c6001aa674ad704a1 Mon Sep 17 00:00:00 2001 From: ButterflyOfFire Date: Tue, 9 Jun 2026 10:31:29 +0000 Subject: [PATCH 1/7] kab-Latn: add missing geminates, map o to u, remove v/vv (non-native) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Added missing geminates: tt, qq, jj, cc, čč, ǧǧ, hh, ww, yy, ḥḥ, ṣṣ, ṭṭ, ḍḍ, ẓẓ, ṛṛ - Mapped `o` to `u` since Kabyle has no native /o/ phoneme; words borrowed with /o/ are nativized as /u/ - Removed v and vv since /v/ is not a native Kabyle phoneme and only appears in recent loanwords only --- epitran/data/map/kab-Latn.csv | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/epitran/data/map/kab-Latn.csv b/epitran/data/map/kab-Latn.csv index 3e113cc..c99c967 100644 --- a/epitran/data/map/kab-Latn.csv +++ b/epitran/data/map/kab-Latn.csv @@ -3,7 +3,7 @@ a,a i,i u,u e,ə -o,o +o,u y,j w,w b,b @@ -19,7 +19,6 @@ q,q r,r s,s t,t -v,v x,χ z,z ɣ,ɣ @@ -40,15 +39,30 @@ tch,t͡ʃ ts,t͡s dz,d͡z bb,bː +cc,ʃː +čč,t͡ʃː dd,dː ff,fː gg,ɡː +ǧǧ,d͡ʒː +hh,hː +jj,ʒː kk,kː ll,lː mm,mː nn,nː +qq,qː rr,rː ss,sː -zz,zː +tt,tː +ww,wː xx,χː -ɣɣ,ɣː \ No newline at end of file +yy,jː +zz,zː +ɣɣ,ɣː +ḥḥ,ħː +ṣṣ,sˤː +ṭṭ,tˤː +ḍḍ,dˤː +ẓẓ,zˤː +ṛṛ,rˤː From 3eb385e89661c39c6b1eb0f06b572e0cf6600ca6 Mon Sep 17 00:00:00 2001 From: ButterflyOfFire Date: Mon, 15 Jun 2026 11:29:15 +0100 Subject: [PATCH 2/7] Adding kabyle postprocess --- epitran/data/post/kab-Latn.txt | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 epitran/data/post/kab-Latn.txt 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. From a81b2b8a2806775333a665c0f4ed8470a86bad05 Mon Sep 17 00:00:00 2001 From: ButterflyOfFire Date: Mon, 15 Jun 2026 11:29:51 +0100 Subject: [PATCH 3/7] Adding kabyle preprocess --- epitran/data/pre/kab-Latn.txt | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 epitran/data/pre/kab-Latn.txt 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 -> ṭṭ / _ From ce50a18aa85453e1525915f5ab4f4597a433c24e Mon Sep 17 00:00:00 2001 From: ButterflyOfFire Date: Mon, 15 Jun 2026 10:31:19 +0000 Subject: [PATCH 4/7] Update kab-Latn.csv Reorganizing kabyle based on new elements. --- epitran/data/map/kab-Latn.csv | 64 ++++++++++++++++------------------- 1 file changed, 29 insertions(+), 35 deletions(-) diff --git a/epitran/data/map/kab-Latn.csv b/epitran/data/map/kab-Latn.csv index c99c967..f02f5a1 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,u y,j w,w b,b @@ -32,37 +60,3 @@ z,z ǧ,d͡ʒ j,ʒ c,ʃ -gh,ɣ -ch,ʃ -dj,d͡ʒ -tch,t͡ʃ -ts,t͡s -dz,d͡z -bb,bː -cc,ʃː -čč,t͡ʃː -dd,dː -ff,fː -gg,ɡː -ǧǧ,d͡ʒː -hh,hː -jj,ʒː -kk,kː -ll,lː -mm,mː -nn,nː -qq,qː -rr,rː -ss,sː -tt,tː -ww,wː -xx,χː -yy,jː -zz,zː -ɣɣ,ɣː -ḥḥ,ħː -ṣṣ,sˤː -ṭṭ,tˤː -ḍḍ,dˤː -ẓẓ,zˤː -ṛṛ,rˤː From 610a6f5b464d9b9e018410ad49207eca8dd8f4c9 Mon Sep 17 00:00:00 2001 From: ButterflyOfFire Date: Tue, 16 Jun 2026 11:31:28 +0000 Subject: [PATCH 5/7] Add v --- epitran/data/map/kab-Latn.csv | 1 + 1 file changed, 1 insertion(+) diff --git a/epitran/data/map/kab-Latn.csv b/epitran/data/map/kab-Latn.csv index f02f5a1..2dd3961 100644 --- a/epitran/data/map/kab-Latn.csv +++ b/epitran/data/map/kab-Latn.csv @@ -60,3 +60,4 @@ z,z ǧ,d͡ʒ j,ʒ c,ʃ +v,v From 0e270aa61ef6e9db0f924f9eee08a03d3df3ec70 Mon Sep 17 00:00:00 2001 From: ButterflyOfFire Date: Tue, 16 Jun 2026 12:28:59 +0000 Subject: [PATCH 6/7] =?UTF-8?q?Correcting=20=C9=A3=20to=20=CA=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- epitran/data/map/kab-Latn.csv | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/epitran/data/map/kab-Latn.csv b/epitran/data/map/kab-Latn.csv index 2dd3961..c760276 100644 --- a/epitran/data/map/kab-Latn.csv +++ b/epitran/data/map/kab-Latn.csv @@ -21,7 +21,7 @@ ss,sː tt,tː xx,χː zz,zː -ɣɣ,ɣː +ɣɣ,ʁː ṣṣ,sˤː ṭṭ,tˤː ḍḍ,dˤː @@ -49,7 +49,7 @@ s,s t,t x,χ z,z -ɣ,ɣ +ɣ,ʁ ḥ,ħ ṣ,sˤ ṭ,tˤ From 96ca3f71a3c6446c7329970b63b8953ab07fe3c5 Mon Sep 17 00:00:00 2001 From: ButterflyOfFire Date: Tue, 16 Jun 2026 12:42:02 +0000 Subject: [PATCH 7/7] Update test_kabyle.py MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Correcting kabyle test. The word `tuwiḍ` has no meaning. Should use `tewwiḍ` (as in : you took with you). `ɣ` to `ʁ` `b` to `β` in this specific case of `abrid` (road, street). Adding `æ` Adding `ə` --- epitran/test/test_kabyle.py | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) 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)