My syllabification code so far
In my last test text string, I spelled သုသာန် wrongly with ဿ. So I have to create the test string with correct instances of the latter.
ttt <- "ဝင်းဦး၏ - စတီရီယိုသီချင်းကြီး၊ဪအတ္တအနိစ္စဒုက္ခ။ကျွန်ုပ်၏ရွှေတပဲသားကြောင့်ပြဿနာတက်သည့်မနုဿ၏ဒဿနနှင့်၎င်းသည်အင်္ကျီလုံချည်မပါဘဲသွား၍ဤသုသာန်၌သေလတ္တံ့၊ Farewell to Arms (သွားလေရော့လက်ရုံး)၂၊ဣန္ဒာနွယ်ပါးချိုင့်ကလေးချစ်စရာပင်။"
ttt
[1] "ဝင်းဦး၏ - စတီရီယိုသီချင်းကြီး၊ဪအတ္တအနိစ္စဒုက္ခ။ကျွန်ုပ်၏ရွှေတပဲသားကြောင့်ပြဿနာတက်သည့်မနုဿ၏ဒဿနနှင့်၎င်းသည်အင်္ကျီလုံချည်မပါဘဲသွား၍ဤသုသာန်၌သေလတ္တံ့၊ Farewell to Arms (သွားလေရော့လက်ရုံး)၂၊ဣန္ဒာနွယ်ပါးချိုင့်ကလေးချစ်စရာပင်။"
My syllabification code is in R. It is modular with features that could be modified or added as necessary. The following shows how the different features were added successively.
library(stringr)
# segment consonants, independant vowels, symbols
str_replace_all(ttt, "([က-အဣ-ဧဩဪဿ၌-၏])", "-\\1") %>%
str_replace_all(., "-", " ")
[1] " ဝ င်း ဦး ၏ စ တီ ရီ ယို သီ ချ င်း ကြီး၊ ဪ အ တ္ တ အ နိ စ္ စ ဒု က္ ခ။ ကျွ န်ု ပ် ၏ ရွှေ တ ပဲ သား ကြော င့် ပြ ဿ နာ တ က် သ ည့် မ နု ဿ ၏ ဒ ဿ န နှ င့် ၎ င်း သ ည် အ င်္ ကျီ လုံ ချ ည် မ ပါ ဘဲ သွား ၍ ဤ သု သာ န် ၌ သေ လ တ္ တံ့၊ Farewell to Arms ( သွား လေ ရော့ လ က် ရုံး)၂၊ ဣ န္ ဒာ နွ ယ် ပါး ချို င့် က လေး ချ စ် စ ရာ ပ င်။"
# + fix athat, aukkamyin, wutsapauk with final consonant
str_replace_all(ttt, "([က-အဣ-ဧဩဪဿ၌-၏])", "-\\1") %>%
str_replace_all(., "-", " ") %>%
str_replace_all(., "\\s([က-အ][့်း]\\s|[က-အ][့်း])", "\\1")
[1] " ဝင်း ဦး ၏ စ တီ ရီ ယို သီ ချင်း ကြီး၊ ဪ အ တ္ တ အ နိ စ္ စ ဒု က္ ခ။ ကျွန်ုပ် ၏ ရွှေ တ ပဲ သား ကြောင့် ပြ ဿ နာ တက် သည့် မ နု ဿ ၏ ဒ ဿ န နှင့် ၎င်း သည် အင်္ ကျီ လုံ ချည် မ ပါ ဘဲ သွား ၍ ဤ သု သာန် ၌ သေ လ တ္ တံ့၊ Farewell to Arms ( သွား လေ ရော့ လက် ရုံး)၂၊ ဣ န္ ဒာ နွယ် ပါး ချိုင့် က လေး ချစ် စ ရာ ပင်။"
# + fix patsint (virama)
str_replace_all(ttt, "([က-အဣ-ဧဩဪဿ၌-၏])", "-\\1") %>%
str_replace_all(., "-", " ") %>%
str_replace_all(., "\\s([က-အ][့်း]\\s|[က-အ][့်း])", "\\1") %>%
str_replace_all(., "\\s([က-အ]္)\\s", "\\1")
[1] " ဝင်း ဦး ၏ စ တီ ရီ ယို သီ ချင်း ကြီး၊ ဪ အတ္တ အ နိစ္စ ဒုက္ခ။ ကျွန်ုပ် ၏ ရွှေ တ ပဲ သား ကြောင့် ပြ ဿ နာ တက် သည့် မ နု ဿ ၏ ဒ ဿ န နှင့် ၎င်း သည် အင်္ ကျီ လုံ ချည် မ ပါ ဘဲ သွား ၍ ဤ သု သာန် ၌ သေ လတ္တံ့၊ Farewell to Arms ( သွား လေ ရော့ လက် ရုံး)၂၊ ဣန္ဒာ နွယ် ပါး ချိုင့် က လေး ချစ် စ ရာ ပင်။"
# + fix kinzi
str_replace_all(ttt, "([က-အဣ-ဧဩဪဿ၌-၏])", "-\\1") %>%
str_replace_all(., "-", " ") %>%
str_replace_all(., "\\s([က-အ][့်း]\\s|[က-အ][့်း])", "\\1") %>%
str_replace_all(., "\\s([က-အ]္)\\s", "\\1") %>%
str_replace_all(., "(\\s[က-အ]င်္|\\င်္)\\s", "\\1")
[1] " ဝင်း ဦး ၏ စ တီ ရီ ယို သီ ချင်း ကြီး၊ ဪ အတ္တ အ နိစ္စ ဒုက္ခ။ ကျွန်ုပ် ၏ ရွှေ တ ပဲ သား ကြောင့် ပြ ဿ နာ တက် သည့် မ နု ဿ ၏ ဒ ဿ န နှင့် ၎င်း သည် အင်္ကျီ လုံ ချည် မ ပါ ဘဲ သွား ၍ ဤ သု သာန် ၌ သေ လတ္တံ့၊ Farewell to Arms ( သွား လေ ရော့ လက် ရုံး)၂၊ ဣန္ဒာ နွယ် ပါး ချိုင့် က လေး ချစ် စ ရာ ပင်။"
# + fix ဿ
str_replace_all(ttt, "([က-အဣ-ဧဩဪဿ၌-၏])", "-\\1") %>%
str_replace_all(., "-", " ") %>%
str_replace_all(., "\\s([က-အ][့်း]\\s|[က-အ][့်း])", "\\1") %>%
str_replace_all(., "\\s([က-အ]္)\\s", "\\1") %>%
str_replace_all(., "(\\s[က-အ]င်္|\\င်္)\\s", "\\1") %>%
str_replace_all(., "\\s(ဿ)", "\\1")
[1] " ဝင်း ဦး ၏ စ တီ ရီ ယို သီ ချင်း ကြီး၊ ဪ အတ္တ အ နိစ္စ ဒုက္ခ။ ကျွန်ုပ် ၏ ရွှေ တ ပဲ သား ကြောင့် ပြဿ နာ တက် သည့် မ နုဿ ၏ ဒဿ န နှင့် ၎င်း သည် အင်္ကျီ လုံ ချည် မ ပါ ဘဲ သွား ၍ ဤ သု သာန် ၌ သေ လတ္တံ့၊ Farewell to Arms ( သွား လေ ရော့ လက် ရုံး)၂၊ ဣန္ဒာ နွယ် ပါး ချိုင့် က လေး ချစ် စ ရာ ပင်။"
# + remove English text, numerals, punctuations, and space at the begining of the string
str_replace_all(ttt, "([က-အဣ-ဧဩဪဿ၌-၏])", "-\\1") %>%
str_replace_all(., "-", " ") %>%
str_replace_all(., "\\s([က-အ][့်း]\\s|[က-အ][့်း])", "\\1") %>%
str_replace_all(., "\\s([က-အ]္)\\s", "\\1") %>%
str_replace_all(., "(\\s[က-အ]င်္|\\င်္)\\s", "\\1") %>%
str_replace_all(., "\\s(ဿ)", "\\1") %>%
str_remove_all(., "[a-zA-Z0-9၀-၉၊။\\[\\]\\(\\)]|^\\s")
[1] "ဝင်း ဦး ၏ စ တီ ရီ ယို သီ ချင်း ကြီး ဪ အတ္တ အ နိစ္စ ဒုက္ခ ကျွန်ုပ် ၏ ရွှေ တ ပဲ သား ကြောင့် ပြဿ နာ တက် သည့် မ နုဿ ၏ ဒဿ န နှင့် ၎င်း သည် အင်္ကျီ လုံ ချည် မ ပါ ဘဲ သွား ၍ ဤ သု သာန် ၌ သေ လတ္တံ့ သွား လေ ရော့ လက် ရုံး ဣန္ဒာ နွယ် ပါး ချိုင့် က လေး ချစ် စ ရာ ပင်"
# + reduce multiple space to single str_replace_all(ttt, "([က-အဣ-ဧဩဪဿ၌-၏])", "-\\1") %>% str_replace_all(., "-", " ") %>% str_replace_all(., "\\s([က-အ][့်း]\\s|[က-အ][့်း])", "\\1") %>% str_replace_all(., "\\s([က-အ]္)\\s", "\\1") %>% str_replace_all(., "(\\s[က-အ]င်္|\\င်္)\\s", "\\1") %>% str_replace_all(., "\\s(ဿ)", "\\1") %>% str_remove_all(., "[a-zA-Z0-9၀-၉၊။\\[\\]\\(\\)]|^\\s") %>% str_squish(.)
[1] "ဝင်း ဦး ၏ စ တီ ရီ ယို သီ ချင်း ကြီး ဪ အတ္တ အ နိစ္စ ဒုက္ခ ကျွန်ုပ် ၏ ရွှေ တ ပဲ သား ကြောင့် ပြဿ နာ တက် သည့် မ နုဿ ၏ ဒဿ န နှင့် ၎င်း သည် အင်္ကျီ လုံ ချည် မ ပါ ဘဲ သွား ၍ ဤ သု သာန် ၌ သေ လတ္တံ့ သွား လေ ရော့ လက် ရုံး ဣန္ဒာ နွယ် ပါး ချိုင့် က လေး ချစ် စ ရာ ပင်"
The problem with “၊ ။ ၌ ၍ ၎ ၏” in Regex
When I tried using [:punct:] in removing all the English punctuation characters as well as ၊ and ။ for Myanmar language, I found that all of the “၊ ။ ၌ ၍ ၎ ၏” were also removed! Is that a bug in R? So I have to specify each of the punctuation in the Regex syntax.
# + remove English text, numerals, punctuations (using [:punct:]), and space at the begining of the string
str_replace_all(ttt, "([က-အဣ-ဧဩဪဿ၌-၏])", "-\\1") %>%
str_replace_all(., "-", " ") %>%
str_replace_all(., "\\s([က-အ][့်း]\\s|[က-အ][့်း])", "\\1") %>%
str_replace_all(., "\\s([က-အ]္)\\s", "\\1") %>%
str_replace_all(., "(\\s[က-အ]င်္)\\s", "\\1") %>%
str_replace_all(., "\\s(ဿ)", "\\1") %>%
str_remove_all(., "[a-zA-Z0-9၀-၉[:punct:]]|^\\s") # using[:punct:]
[1] "ဝင်း ဦး စ တီ ရီ ယို သီ ချင်း ကြီး ဪ အတ္တ အ နိစ္စ ဒုက္ခ ကျွန်ုပ် ရွှေ တ ပဲ သား ကြောင့် ပြဿ နာ တက် သည့် မ နုဿ ဒဿ န နှင့် င်း သည် အင်္ကျီ လုံ ချည် မ ပါ ဘဲ သွား ဤ သု သာန် သေ လတ္တံ့ သွား လေ ရော့ လက် ရုံး ဣန္ဒာ နွယ် ပါး ချိုင့် က လေး ချစ် စ ရာ ပင်"
Earlier when I compiled the Myanmar Wikipedia corpus I didn’t know about this effect. Luckily I did not use [:punct:] at that time. How frequently ၎င်း occurs in that corpus? How much damage would have been done using [:punct:]?
I tried to find out.
length(grep("၎င်း", x100_itN_Sen.5)) %>% paste("No. of sentences with complete syllable '၎င်း' =", .)
[1] "No. of sentences with complete syllable '၎င်း' = 8470"
length(grep("၎", x100_itN_Sen.5)) %>% paste("No. of sentences with complete/incomplete syllable '၎င်း' =", .)
[1] "No. of sentences with complete/incomplete syllable '၎င်း' = 8485"
length(grep("၎", x100_itN_Sen.5, invert = TRUE)) %>% paste("No. of sentences without complete/incomplete syllable '၎င်း' =", .)
[1] "No. of sentences without complete/incomplete syllable '၎င်း' = 297920"
length(x100_itN_Sen.5) %>% paste("Total No. of sentences = ", .)
[1] "Total No. of sentences = 306405"
Additionally there would surely be a lot of “၊ ။ ၌ ၍ ၏” in the corpus and all of them removed as well from the corpus if [:punct:] were used in the regex syntax.