Sunday, December 17, 2023

Syllabification of Myanmar Unicode text with Regex - 3

 
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.

Wednesday, December 13, 2023

Syllabification of Myanmar Unicode text with Regex - 2


In the Ye Kyaw Thu’s post mentioned previously (
https://github.com/ye-kyaw-thu/sylbreak), he rejected a paper’s claim that his syllable segmentation method “… cannot correctly segment syllables that contain consonants, ‘်’ and ‘့’ …”. He asserted that his method works perfectly if the ‘်’ and ‘့’ are entered in correct order, that is ‘်’ first and then ‘့’.

To check this issue with our syllabification approach we created a text string t.1 containing “ရပ်တန့်” with correct order of “်” followed by “့” and t.2 with incorrect order of “့” followed by “်” in “န့်” using on-screen keyboard.

Check if our syllabification approach has issues with ‘်’ and ‘့’

# create data
t.1 <- "ရပ်တန့်" 
t.2 <- "ရပ်တန့်"
t.1
[1] "ရပ်တန့်"
t.2
[1] "ရပ်တန့်"
# Are they are exactly equal?
t.1 == t.2
[1] TRUE

They were exactly equal because the keyboard application changed the incorrect keying into correct order. We can split these two texts into characters to see that also.

strsplit(t.1, split = "")
[[1]]
[1] "ရ" "ပ" "်"  "တ" "န" "့"  "်" 
strsplit(t.2, split = "")
[[1]]
[1] "ရ" "ပ" "်"  "တ" "န" "့"  "်" 

Yes that is true. So to be able to get the second text string with incorrect order we programmetically enter the text with the Unicode codepoints. Then we again check if they are exactly equal.

tp.1 <- "ရပ်တန\u103a\u1037" 
tp.2 <- "ရပ်တန\u1037\u103a"
tp.1
[1] "ရပ်တန့်"
tp.2
[1] "ရပ်တန့်"
tp.1 == tp.2
[1] FALSE
strsplit(tp.1, split = "")
[[1]]
[1] "ရ" "ပ" "်"  "တ" "န" "်"  "့" 
strsplit(tp.2, split = "")
[[1]]
[1] "ရ" "ပ" "်"  "တ" "န" "့"  "်" 

They look the same in output. But the order of individual characters shows they really are different.

We now create a test string containing one correctly keyed text and two incorrectly keyed text.

d <- paste(tp.1,tp.2,tp.2, sep = "")
d
[1] "ရပ်တန့်ရပ်တန့်ရပ်တန့်"
# check: split into characters
strsplit(d, split = "")
[[1]]
 [1] "ရ" "ပ" "်"  "တ" "န" "်"  "့"  "ရ" "ပ" "်"  "တ" "န" "့"  "်"  "ရ" "ပ" "်"  "တ" "န"
[20] "့"  "်" 
# make syllables
tst <- str_replace_all(d, "([က-အဣ-ဧဩဪဿ၌-၏])", "-\\1") %>% str_replace_all(., "-", " ") %>% str_replace_all(., "\\s([က-အ][့်း]\\s|[က-အ][့်း])", "\\1") %>% str_replace_all(., "\\s([က-အ]္)\\s", "\\1")  %>% str_replace_all(., "(\\s[က-အ]င်္)\\s", "\\1") %>% str_remove_all(., "[a-zA-Z0-9၀-၉၊။\\[\\]\\(\\)]|^\\s") %>% str_squish(.)
tst
[1] "ရပ် တန့် ရပ် တန့် ရပ် တန့်"
# see if the original order of ‘်’ and ‘့’ retained in the syllables
strsplit(tst, split = "")
[[1]]
 [1] "ရ" "ပ" "်"  " " "တ" "န" "်"  "့"  " " "ရ" "ပ" "်"  " " "တ" "န" "့"  "်"  " " "ရ"
[20] "ပ" "်"  " " "တ" "န" "့"  "်" 

So the correct and incorrect keying orders are retained.

Any issue in using our syllables with “quanteda” R package

Here, since I have been learning to use the “quanteda” R package for quantitative text analysis, I am eager to find out if the keying order would affect it.

A simple test is to let the dfm() function of quanteda get the number of syllables created.

library(quanteda)
dfm(tokens(tst))
Document-feature matrix of: 1 document, 2 features (0.00% sparse) and 0 docvars.
       features
docs    ရပ် တန့်
  text1  3  3

The result shows that the keying order in the “တန့်” syllables is ignored.

Conclusion

  1. Our syllabification approach has no issues with ‘်’ and ‘့’.
  2. The quanteda R package seems to be insensitive to keying order in the composition of the syllables.

Tuesday, December 12, 2023

Syllabification of Myanmar Unicode text with Regex

 
My love for our classical music genre of “Yodaya songs” come out of their great melodies and beautiful lyrics. However, lurking underneath is my dream to figure out the missing authorships of some of those songs someday.

I came to know that Stylometric techniques of NLP (Natural Language Processing) could be used for solving cases of missing authorship in literature and music. But my ambition has to lie low for indefinite time before I could become more proficient with R programming in general and Stylometric techniques and related R packages in particular.

To make progress, I would need the materials in an appropriate form. With the Yodaya songs, for example, I think they would have to be segmented into syllables. However, the syllable segmentation program I had devised in R has been pitifully slow. Nevertheless, I have recently discovered Ye Kyaw Thu’s “sylbreak” post here, and Garcia’s “Syllabification with Regex” post here. These inspired me to devise a syllabification code that is short and fast. Previously I was using loops to write the code in R, and it was too slow. Processing just 10,000 sentences took 1 hour and 28 minutes with regular loops and 44 minutes at best with parallel processing (https://bayanathi.blogspot.com/2019/06/cycle2-syllable-segmentation-parallel.html).

With Garcia’s idea of using the str_replace_all() function of the stringr package I was able to reduce the time for processing of the entire corpus of 300,000+ sentences to just 21 seconds!

The new code for syllable segmentation of Myanmar Unicode text

Garcia’s code example

My trial and error test codes

To begin with, I devised a string of Myanmar text (in “Pyidaungsu” Myanmar Unicode font) with features I hoped to cover the important issues of syllable segmentation.

library(stringr)
text <- "ဝင်းဦး၏ - စတီရီယိုသီချင်းကြီး၊ဪအတ္တအနိစ္စဒုက္ခ။၎င်းသေသောသူသည်အင်္ကျီလုံချည်မပါဘဲဤသုဿန်သို့သွား၍သေသည်၊ Farewell to Arms (သွားလေရော့လက်ရုံး)၂၊ဣန္ဒာနွယ်ပါးချိုင့်ကလေးချစ်စရာပင်။"
cat(text)
ဝင်းဦး၏ - စတီရီယိုသီချင်းကြီး၊ဪအတ္တအနိစ္စဒုက္ခ။၎င်းသေသောသူသည်အင်္ကျီလုံချည်မပါဘဲဤသုဿန်သို့သွား၍သေသည်၊ Farewell to Arms (သွားလေရော့လက်ရုံး)၂၊ဣန္ဒာနွယ်ပါးချိုင့်ကလေးချစ်စရာပင်။

Writing Myanmar syllables in unicode begins with consonants so I tried searching for pattern with consonants က to  and replacing it with the found text plus a hyphen.

str_replace_all(string = text, pattern = "([က-အ])", replacement = "-\\1")
[1] "-ဝ-င်းဦး၏ - -စ-တီ-ရီ-ယို-သီ-ချ-င်း-ကြီး၊ဪ-အ-တ္-တ-အ-နိ-စ္-စ-ဒု-က္-ခ။၎-င်း-သေ-သော-သူ-သ-ည်-အ-င်္-ကျီ-လုံ-ချ-ည်-မ-ပါ-ဘဲဤ-သုဿ-န်-သို့-သွား၍-သေ-သ-ည်၊ Farewell to Arms (-သွား-လေ-ရော့-လ-က်-ရုံး)၂၊ဣ-န္-ဒာ-နွ-ယ်-ပါး-ချို-င့်-က-လေး-ချ-စ်-စ-ရာ-ပ-င်။"

Here we notice that the ဪ ဤ ၍ ဣ characters, or on the whole Independant Vowels and Symbols also need to be included in the “pattern” as seen in the chart below.

str_replace_all(text, "([က-အဣ-ဧဩဪဿ၌-၏])", "-\\1")
[1] "-ဝ-င်း-ဦး-၏ - -စ-တီ-ရီ-ယို-သီ-ချ-င်း-ကြီး၊-ဪ-အ-တ္-တ-အ-နိ-စ္-စ-ဒု-က္-ခ။-၎-င်း-သေ-သော-သူ-သ-ည်-အ-င်္-ကျီ-လုံ-ချ-ည်-မ-ပါ-ဘဲ-ဤ-သု-ဿ-န်-သို့-သွား-၍-သေ-သ-ည်၊ Farewell to Arms (-သွား-လေ-ရော့-လ-က်-ရုံး)၂၊-ဣ-န္-ဒာ-နွ-ယ်-ပါး-ချို-င့်-က-လေး-ချ-စ်-စ-ရာ-ပ-င်။"

We need to fix the athat, kinzi and stacked consonants, so:

str_replace_all(text, "([က-အဣ-ဧဩဪဿ၌-၏])", "-\\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 ( သွား လေ ရော့ လက် ရုံး)၂၊ ဣန္ဒာ နွယ် ပါး ချိုင့် က လေး ချစ် စ ရာ ပင်။"

Next we remove the English text, numerals, punctutions and the leading space for the first syllable.

# removing the English text, numerals, and punctutions
str_replace_all(text, "([က-အဣ-ဧဩဪဿ၌-၏])", "-\\1") %>% str_replace_all(., "-", " ") %>% str_replace_all(., "\\s([က-အ][့်း]\\s|[က-အ][့်း])", "\\1") %>% str_replace_all(., "\\s([က-အ]္)\\s", "\\1")  %>% str_replace_all(., "(\\s[က-အ]င်္)\\s", "\\1") %>% str_remove_all(., "[a-zA-Z0-9၀-၉၊။\\[\\]\\(\\)]|^\\s") 
[1] "ဝင်း ဦး ၏    စ တီ ရီ ယို သီ ချင်း ကြီး ဪ အတ္တ အ နိစ္စ ဒုက္ခ ၎င်း သေ သော သူ သည် အင်္ကျီ လုံ ချည် မ ပါ ဘဲ ဤ သု ဿန် သို့ သွား ၍ သေ သည်     သွား လေ ရော့ လက် ရုံး ဣန္ဒာ နွယ် ပါး ချိုင့် က လေး ချစ် စ ရာ ပင်"

The output contains some mutiple spaces separating the syllables. They could be transformed into single spaces easily using the str_squish() function of the stringr package.

str_replace_all(text, "([က-အဣ-ဧဩဪဿ၌-၏])", "-\\1") %>% str_replace_all(., "-", " ") %>% str_replace_all(., "\\s([က-အ][့်း]\\s|[က-အ][့်း])", "\\1") %>% str_replace_all(., "\\s([က-အ]္)\\s", "\\1")  %>% str_replace_all(., "(\\s[က-အ]င်္)\\s", "\\1") %>% str_remove_all(., "[a-zA-Z0-9၀-၉၊။\\[\\]\\(\\)]|^\\s") %>% str_squish(.)
[1] "ဝင်း ဦး ၏ စ တီ ရီ ယို သီ ချင်း ကြီး ဪ အတ္တ အ နိစ္စ ဒုက္ခ ၎င်း သေ သော သူ သည် အင်္ကျီ လုံ ချည် မ ပါ ဘဲ ဤ သု ဿန် သို့ သွား ၍ သေ သည် သွား လေ ရော့ လက် ရုံး ဣန္ဒာ နွယ် ပါး ချိုင့် က လေး ချစ် စ ရာ ပင်"

We may choose to separate the syllables with hyphen or other characters with:

# replace space with hyphen
str_replace_all(text, "([က-အဣ-ဧဩဪဿ၌-၏])", "-\\1") %>% str_replace_all(., "-", " ") %>% str_replace_all(., "\\s([က-အ][့်း]\\s|[က-အ][့်း])", "\\1") %>% str_replace_all(., "\\s([က-အ]္)\\s", "\\1")  %>% str_replace_all(., "(\\s[က-အ]င်္)\\s", "\\1") %>% str_remove_all(., "[a-zA-Z0-9၀-၉၊။\\[\\]\\(\\)]|^\\s") %>% str_squish(.) %>% str_replace_all(., "\\s", "\\-")
[1] "ဝင်း-ဦး-၏-စ-တီ-ရီ-ယို-သီ-ချင်း-ကြီး-ဪ-အတ္တ-အ-နိစ္စ-ဒုက္ခ-၎င်း-သေ-သော-သူ-သည်-အင်္ကျီ-လုံ-ချည်-မ-ပါ-ဘဲ-ဤ-သု-ဿန်-သို့-သွား-၍-သေ-သည်-သွား-လေ-ရော့-လက်-ရုံး-ဣန္ဒာ-နွယ်-ပါး-ချိုင့်-က-လေး-ချစ်-စ-ရာ-ပင်"

Syllabification of the Myanmar Wikipedia corpus

Finally we are set to test the program with our Myanmar Wikipedia corpus with 300,000+ sentences and see how fast it run.

# the data
load(file='x100_itN_Sen5.rda')
length(x100_itN_Sen.5)
[1] 306405
# view the last six sentences
tail(x100_itN_Sen.5)
[1] "ဉာဏ်တုဉာဏ်ရည်တု အခြေခံသတ်မှတ်ချက်များ ပေးခဲ့သည့် ကနဦးလုပ်ဆောင်သူများအနက် တစ်ဦးဖြစ်သည်။"                                                                                                                                                
[2] "ဉာဏ်ရည်တု ဟူသော ဝေါဟာရကို တီထွင်ကာ အစောပိုင်းဖန်တီးမှုများ ဦးဆောင်ခဲ့ခြင်းက လည်းကောင်း၊ LISP ကွန်ပျူတာဘာသာစကားကို ဖန်တီးခြင်းကာ ALGOL ကွန်ပျူတာဘာသာစကား၏ ဒီဇိုင်းကို လွှမ်းမိုးနိုင်ခဲ့ခြင်းက လည်းကောင်း၊ အချိန်မျှသုံးခြင်း ကို လူသိများစေခြင်းက လည်းကောင်း မက္ကာသီအား ထင်ရှားစေခဲ့သည်။"
[3] "အသက်မွေးဘဝကို စတန်းဖို့ဒ် တက္ကသိုလ်စတန်းဖို့ တက္ကသိုလ်တွင် ကုန်ဆုံးစေခဲ့သည်။"                                                                                                                                                                  
[4] "ဆုတံဆိပ် အများအပြား ရခဲ့ရာ ဉာဏ်ရည်တုတွင် ပါဝင်ဆောင်ရွက်ခြင်းကြောင့် တူရင်းဆုအား ၁၉၇၁ ခုတွင် လည်းကောင်း၊ အမေရိကန်နိုင်ငံ၏ သိပ္ပံဆိုင်ရာ အမျိုးသားဆုတံဆိပ်ကို လည်းကောင်း၊ ကျိုတိုဆုကို လည်းကောင်း ချီးမြှင့်ခံရဖူးသည်။"                                                            
[5] "ကွန်မြူနစ်အဖြစ် မြေတောင်မြှောက်ခံရသော်လည်း ဆိုဗီယက် ဝင်ရောက်မှု ဖြစ်ပြီးသည့် ၁၉၆၈ ခုတွင် ချက်ကိုဆလိုဗားကီးယားနိုင်ငံချက်ကိုစလိုဗေးကီးယားသို့ ၂ ရက်ကြာ ခရီးသွားပြီးနောက် ကွန်ဆာဗေးတစ် ရီပါဗလစ်ကန် (Conservative republican) တစ်ဦး ဖြစ်လာသည်။"                                
[6] "စတန်းဖို့ရှိ နေအိမ်၌ ၂၀၁၁ ခု၊ အောက်တိုဘာလ ၂၄ ရက်တွင် ကွယ်လွန်သည်။"                                                                                                                                                                   

Syllabification took only 20.9 seconds.

system.time(
  myWikiSyl <- str_replace_all(x100_itN_Sen.5, "([က-အဣ-ဧဩဪဿ၌-၏])", "-\\1") %>% str_replace_all(., "-", " ") %>% str_replace_all(., "\\s([က-အ][့်း]\\s|[က-အ][့်း])", "\\1") %>% str_replace_all(., "\\s([က-အ]္)\\s", "\\1")  %>% str_replace_all(., "(\\s[က-အ]င်္)\\s", "\\1") %>% str_remove_all(., "[a-zA-Z0-9၀-၉၊။\\[\\]\\(\\)]|^\\s") %>% str_squish(.)
)
   user  system elapsed 
  19.75    0.38   20.91 
tail(myWikiSyl)
[1] "ဉာဏ် တု ဉာဏ် ရည် တု အ ခြေ ခံ သတ် မှတ် ချက် များ ပေး ခဲ့ သည့် က န ဦး လုပ် ဆောင် သူ များ အ နက် တစ် ဦး ဖြစ် သည်"                                                                                                                                                                        
[2] "ဉာဏ် ရည် တု ဟူ သော ဝေါ ဟာ ရ ကို တီ ထွင် ကာ အ စော ပိုင်း ဖန် တီး မှု များ ဦး ဆောင် ခဲ့ ခြင်း က လည်း ကောင်း ကွန် ပျူ တာ ဘာ သာ စ ကား ကို ဖန် တီး ခြင်း ကာ ကွန် ပျူ တာ ဘာ သာ စ ကား ၏ ဒီ ဇိုင်း ကို လွှမ်း မိုး နိုင် ခဲ့ ခြင်း က လည်း ကောင်း အ ချိန် မျှ သုံး ခြင်း ကို လူ သိ များ စေ ခြင်း က လည်း ကောင်း မက္ကာ သီ အား ထင် ရှား စေ ခဲ့ သည်"
[3] "အ သက် မွေး ဘ ဝ ကို စ တန်း ဖို့ဒ် တက္က သိုလ် စ တန်း ဖို့ တက္က သိုလ် တွင် ကုန် ဆုံး စေ ခဲ့ သည်"                                                                                                                                                                                                
[4] "ဆု တံ ဆိပ် အ များ အ ပြား ရ ခဲ့ ရာ ဉာဏ် ရည် တု တွင် ပါ ဝင် ဆောင် ရွက် ခြင်း ကြောင့် တူ ရင်း ဆု အား ခု တွင် လည်း ကောင်း အ မေ ရိ ကန် နိုင် ငံ ၏ သိပ္ပံ ဆိုင် ရာ အ မျိုး သား ဆု တံ ဆိပ် ကို လည်း ကောင်း ကျို တို ဆု ကို လည်း ကောင်း ချီး မြှင့် ခံ ရ ဖူး သည်"                                                                      
[5] "ကွန် မြူ နစ် အ ဖြစ် မြေ တောင် မြှောက် ခံ ရ သော် လည်း ဆို ဗီ ယက် ဝင် ရောက် မှု ဖြစ် ပြီး သည့် ခု တွင် ချက် ကို ဆ လို ဗား ကီး ယား နိုင် ငံ ချက် ကို စ လို ဗေး ကီး ယား သို့ ရက် ကြာ ခ ရီး သွား ပြီး နောက် ကွန် ဆာ ဗေး တစ် ရီ ပါ ဗ လစ် ကန် တစ် ဦး ဖြစ် လာ သည်"                                                                
[6] "စ တန်း ဖို့ ရှိ နေ အိမ် ၌ ခု အောက် တို ဘာ လ ရက် တွင် ကွယ် လွန် သည်"