Thursday, May 30, 2019

Cycle2: 20K sample sentence endings


I am too lazy to check for problems with my last corpus QDC-4(x100_itN_Sen.5). I’m pretending it is fine and immediately start working.
length(x100_itN_Sen.5)
[1] 306405
set.seed(52819)
SAMP <- sample(1:306405, 20000)
x20k_itN_Sen.5 <- x100_itN_Sen.5[SAMP]
str(x20k_itN_Sen.5)
 chr [1:20000] "<U+1002><U+1030><U+1002><U+1032><U+104F> <U+101E><U+102F><U+100A><U+1005><U+102E><U+1019><U+1036><U+1000><U+102"| __truncated__ ...
cat(x20k_itN_Sen.5[c(1,2000,10000,20000)])
ဂူဂဲ၏ သုညစီမံကိန်း(Project Zero) လေ့လာရှာဖွေသူဖြစ်သည့် ဂျန်းဟွန်းက ကွတ်ကီးများသည် ကြားခံများဖြစ်သည့် ဝိုင်ဖိုင်ထောက်ပံ့သများက ဖတ်ရှုနိုင်သည်။ သို့နှင့် မဂ္ဂဇင်းမှတဆင့် သတင်းစာကိုပါ တိုးချဲ့ လိုက်သော အခါတွင် ‘ဘက်ပတစ်’ ကျောင်းသို့ မပြန်တော့ဘဲ ထိုမဂ္ဂဇင်း၊ သတင်းစာနှစ်ခုစလုံးတွင်ပင် တည်းဖြတ်သည့်ဘက်မှ ဆက်လက် လုပ်ကိုင်လေတော့သည်။ အကယ်၍ ပြည့်စုံလုံလောက်ခြင်း မဖြစ်ပါက တစ်လအတိုင်းအရှည် (ကာလပတ်လုံး) ထိုရဟန်းသည် ယုတ်လျော့သော သင်္ကန်း၏  ပြည့်စုံလုံလောက်ခြင်းငှါ မျှော်လင့်ချက်ရှိလတ်သော် ထိုသင်္ကန်းကို ထားရာသည်။ ထိုအခါ မိခင်ဖြစ်သူသည် “မိမိတို့တွင် အမွေဆက်ခံမည့် အမွေခံသား မရှိပေ။
As done before, I break up the sentences in the sample into syllables in two steps.
Breaking up into “quateda” style characters:
library(quanteda)
system.time(
  x20k.t <- tokens(x20k_itN_Sen.5, what="character")
)
   user  system elapsed 
   5.19    0.08    5.32 
Create syllables from characters for the first 10,000 sentences:
system.time({
x20k_syllA <- list()
# M <- length(x20k.t)
for (k in 1:10000) {
    x20k_syllA.k <- list()
    TEMP <- x20k.t[[k]][1]
    j <- 1
    L <- length(x20k.t[[k]])
    for(i in 2:L) {
        y <- grepl("[\u102b-\u102c\u1038-\u1039\u103a]",x20k.t[[k]][i])
        if (y == TRUE){
            TEMP <- paste0(TEMP,x20k.t[[k]][i])
        } else { 
            my.1 <- grepl("[\u1040-\u1049]", x20k.t[[k]][i])
            my.0 <- grepl("[\u1040-\u1049]", x20k.t[[k]][i-1])
            if (my.1 == TRUE){
                if (my.0 == TRUE){
                    TEMP <- paste0(TEMP,x20k.t[[k]][i])
                } else {
                    x20k_syllA.k[[j]] <- TEMP
                    j <- j+1
                    TEMP <- x20k.t[[k]][i]
                }
            } else {
                if (my.0 == TRUE){
                    x20k_syllA.k[[j]] <- TEMP
                    j <- j+1
                    TEMP <- x20k.t[[k]][i]
                } else {
                    # for stacked consonant
                    if (grepl("[\u1039]",x20k.t[[k]][i-1])==TRUE){
                        TEMP <- paste0(TEMP,x20k.t[[k]][i])
                    } else {
                        x20k_syllA.k[[j]] <- TEMP
                        j <- j+1
                        TEMP <- x20k.t[[k]][i]
                    }
                }
            }
        }
    }
    if (i == L){
        x20k_syllA.k[[j]] <- TEMP
    }
    x20k_syllA[[k]] <- paste(unlist(x20k_syllA.k))
}
})
   user  system elapsed 
3176.32    0.97 4880.07 
Before I ran the above code chunk for 10,000 sentences, I tested it with 100 and 1000 sentences. For 1000 sentences it took about 5 minutes. So I was expecting to get 50 minutes or an hour or so for 10,000. But it came out to be 1 hour and 28 minutes. It would be good to understand why it was so slow. On the other hand, I found the clue that if I use “doParallel” with “foreach” package for the same task, it could speed up the operation two times or better.
But for the time being, let’s check the results.
cat(unlist(x20k_syllA[c(1,10000)]))
ဂူ ဂဲ ၏ သု ည စီ မံ ကိန်း ( P r o j e c t Z e r o ) လေ့ လာ ရှာ ဖွေ သူ ဖြစ် သည့် ဂျန်း ဟွန်း က ကွတ် ကီး များ သည် ကြား ခံ များ ဖြစ် သည့် ဝိုင် ဖိုင် ထောက် ပံ့ သ များ က ဖတ် ရှု နိုင် သည် ။ အ ကယ် ၍ ပြည့် စုံ လုံ လောက် ခြင်း မ ဖြစ် ပါ က တစ် လ အ တိုင်း အ ရှည် ( ကာ လ ပတ် လုံး ) ထို ရ ဟန်း သည် ယုတ် လျော့ သော သင်္ကန်း ၏ ပြည့် စုံ လုံ လောက် ခြင်း ငှါ မျှော် လင့် ချက် ရှိ လတ် သော် ထို သင်္ကန်း ကို ထား ရာ သည် ။
Create dfm of sentence endings from the 10,000 sample of sentences partitioned into syllables.
library(quanteda)
# create quanteda corpus of syllables
x20k_syllAc <- corpus(t(data.frame(lapply(x20k_syllA, paste0, collapse = " ")))) 
# create tokens with syllables as words
x20k_syllAc.t <- tokens(x20k_syllAc, what = "fasterword")
# create bigrams
xx <- tokens_ngrams(x20k_syllAc.t, n = 2, concatenator = "")
# convert to dfm
dfmxx <- dfm(xx)
# retain only the sentence endings
senEnd <- dfm_select(dfmxx, "\u104b$", selection = "keep", valuetype = "regex")
First we look at the 50 sentence endings with the highest frequencies.
topf <- topfeatures(senEnd, n=50)
df.topf <- data.frame(name = names(topf), n = topf, stringsAsFactors = F)
utf8::utf8_print(do.call("paste",c(sep = " -  ", df.topf)))
 [1] "သည်။ -  7990"  "၏။ -  798"    "တယ်။ -  262"   "မည်။ -  165"   "ချေ။ -  140" 
 [6] "ပေ။ -  134"   "ပါ။ -  104"   "တည်း။ -  28"   "ပြီ။ -  27"    "မယ်။ -  24"   
[11] "ဘူး။ -  21"    "ခြင်း။ -  20"  "ရ။ -  17"     "ပဲ။ -  17"     "စေ။ -  8"    
[16] "ရှိ။ -  8"      "လေ။ -  6"     "နည်း။ -  6"    "ကြောင်း။ -  6" "ပေါ့။ -  6"   
[21] "များ။ -  5"   "လေး။ -  5"    "ကား။ -  5"    "ခဲ့။ -  5"      "ဘဲ။ -  4"     
[26] "စို့။ -  4"      "တဲ့။ -  4"      "လော့။ -  4"    "ရာ။ -  4"     "လဲ။ -  3"     
[31] "၊။ -  3"      "နိုင်။ -  3"     "ကို။ -  3"      "ထွက်။ -  3"     "သေး။ -  3"   
[36] "ဟုတ်။ -  3"     "လား။ -  3"    "ရား။ -  3"    "နှင့်။ -  3"     "ယော။ -  3"   
[41] "ပင်။ -  3"     "မြို့။ -  3"     "နော်။ -  3"    "တတ်။ -  2"     "ဘုံ။ -  2"     
[46] "ဆာ။ -  2"     "လော။ -  2"    "ပုံ။ -  2"      "ငယ်။ -  2"     "လတ္တံ့။ -  2"   
In the above list, all except the 31st, 34th, 38th, 40th, 42nd, 45th, 46th, 48th, 49th seems suspect to me. Now we look at all the 162 categories of distinct endings.
senEnd_tf <- textstat_frequency(senEnd)[,1:2]
utf8::utf8_print(do.call("paste", c(sep= " - ", senEnd_tf)))
  [1] "သည်။ - 7990"   "၏။ - 798"     "တယ်။ - 262"    "မည်။ - 165"    "ချေ။ - 140"  
  [6] "ပေ။ - 134"    "ပါ။ - 104"    "တည်း။ - 28"    "ပြီ။ - 27"     "မယ်။ - 24"    
 [11] "ဘူး။ - 21"     "ခြင်း။ - 20"   "ရ။ - 17"      "ပဲ။ - 17"      "စေ။ - 8"     
 [16] "ရှိ။ - 8"       "လေ။ - 6"      "နည်း။ - 6"     "ကြောင်း။ - 6"  "ပေါ့။ - 6"    
 [21] "များ။ - 5"    "လေး။ - 5"     "ကား။ - 5"     "ခဲ့။ - 5"       "ဘဲ။ - 4"      
 [26] "စို့။ - 4"       "တဲ့။ - 4"       "လော့။ - 4"     "ရာ။ - 4"      "လဲ။ - 3"      
 [31] "၊။ - 3"       "နိုင်။ - 3"      "ကို။ - 3"       "ထွက်။ - 3"      "သေး။ - 3"    
 [36] "ဟုတ်။ - 3"      "လား။ - 3"     "ရား။ - 3"     "နှင့်။ - 3"      "ယော။ - 3"    
 [41] "ပင်။ - 3"      "မြို့။ - 3"      "နော်။ - 3"     "တတ်။ - 2"      "ဘုံ။ - 2"      
 [46] "ဆာ။ - 2"      "လော။ - 2"     "ပုံ။ - 2"       "ငယ်။ - 2"      "လတ္တံ့။ - 2"    
 [51] "သောင်း။ - 2"   "ဦး။ - 2"      "စဉ်။ - 2"      "ဆောင်။ - 2"    "စေ့။ - 2"     
 [56] "သူ။ - 1"       "ယူ။ - 1"       "ခဲ။ - 1"       "မန္အားျ။ - 1"  "အံ့။ - 1"      
 [61] "နယ်။ - 1"      "နှာ။ - 1"      "ချက်။ - 1"     "သည့်။ - 1"      "ဘော။ - 1"    
 [66] "ဒါန်း။ - 1"    "ထိန်။ - 1"      "ထာ။ - 1"      "ပြီး။ - 1"     "ဇံ။ - 1"      
 [71] "ပ။ - 1"       "ကောင်း။ - 1"   "မှတ်။ - 1"      "့။ - 1"        "နစ်။ - 1"     
 [76] "နေ။ - 1"      "ရုဏ်း။ - 1"     "စု။ - 1"       "နိုး။ - 1"      "နှိုက်။ - 1"     
 [81] "မြင်။ - 1"     "မျိုး။ - 1"     "ခါ။ - 1"      "လို။ - 1"       "စွာ။ - 1"     
 [86] "သို့။ - 1"       "တီ။ - 1"       "တင့်။ - 1"      "တွဲ။ - 1"       "မျဉ်။ - 1"    
 [91] "ဒိုင်း။ - 1"     "ကြောဝ်။ - 1"   "စမ်း။ - 1"     "တမ်း။ - 1"     "ခတ်။ - 1"     
 [96] "တော့။ - 1"     "ခွင့်။ - 1"      "ခေါက်။ - 1"    "နား။ - 1"     "ငှေါဝ်။ - 1"   
[101] "သာ။ - 1"      "မှု။ - 1"       "ထိံ။ - 1"       "ဆယ်။ - 1"      "ကျောင်း။ - 1" 
[106] "တွေ။ - 1"      "သင့်။ - 1"      "ကွယ်။ - 1"      "ခန့်။ - 1"      "ရောက်။ - 1"   
[111] "လုံး။ - 1"      "ထား။ - 1"     "ရေး။ - 1"     "မြတ်။ - 1"     "ဝေ။ - 1"     
[116] "နန္ဒီ။ - 1"     "နံ။ - 1"       "ရူး။ - 1"      "ဖြင့်။ - 1"     "ကြိုက်။ - 1"    
[121] "တို။ - 1"       "သွင်။ - 1"      "အဗ္ဘုဂ္ဂစ္ဆိ။ - 1" "ဖျား။ - 1"    "ဖွယ်။ - 1"     
[126] "ဖိုး။ - 1"      "ဆီ။ - 1"       "ထင်။ - 1"      "လွမ်း။ - 1"     "ခု။ - 1"      
[131] "လက္ခန်။ - 1"    "လျက်။ - 1"     "မိ။ - 1"       "ဉာဏ်။ - 1"     "လှ။ - 1"      
[136] "ဘို့။ - 1"       "နိုင်း။ - 1"     "သက်။ - 1"      "ညှား။ - 1"     "ယှဉ်။ - 1"     
[141] "စွ။ - 1"       "ဗျာယ်။ - 1"    "ဖြစ်။ - 1"     "ရွား။ - 1"     "သွား။ - 1"    
[146] "ပြတ်။ - 1"     "ညျ။ - 1"      "ရည်။ - 1"      "ပါး။ - 1"     "တောင်း။ - 1"  
[151] "ယာ။ - 1"      "မင်း။ - 1"     "ဖုံး။ - 1"      "ရန်။ - 1"      "တိုင်း။ - 1"    
[156] "တော်။ - 1"     "အား။ - 1"     "ညီ။ - 1"       "ထောင်။ - 1"    "ကျပ်။ - 1"    
[161] "နစ္ပါ။ - 1"    "တော။ - 1"    
My guess is that the sentence ending that seems suspect are mostly so because they are not complete or proper sentences. It would be interesting to confirm that by inspecting the underlying sentences. As usual my easy way out would be to remove the sentences with suspect sentence endings!
In the above list, the 56th to 162nd ending would be 105/10000 or only 1.05% of the 10000 endings. That means removing sentences with lowest frequencies would involve very little risk. A more logical approach would be to determine the common or usual sentence endings and retain the sentences with such endings and remove the rest.

Monday, May 27, 2019

Cycle2: Fixing the sentence endings


By now you would have wondered: what’s this guy up to? With his never-ending, adhoc, cleanups?
I need not answer. Because that’s the only way I know how to, as you would easily have guessed! The truth is that I split the sentences into syllables and analyze the sentence endings.Then the top 50 list of sentence ending showed that I still have problems.
To see the problematic sentences, I search for sentence ending that were not Myanmar characters, and those that are numerals in Myanmar characters.
load("x10kSen4_x10kSyll.rda")
cat(x10k_itN_sen.4[grep("[^\u1000-\u104f]\u104b",x10k_itN_sen.4)][1:5])
အပြုသဘောစိတ်ကောင်းနှင့်ယှဉ်ပြီးနေ တတ်သော အလေ့အကျင့်(တူဒေး)။ လျောက်ပတ်သားနား၊ကွန့်ကွန့်လျားသော ၊ပါးတော်မြတ်နှစ်သွယ် ……………..။ ထို့ကြောင့် အိုဇုန်းကို ဓာတုဗေဒအရ မော်လီကျူး ဖွဲ့စည်းပုံ ဓာတုသင်္ကေတမှာ (O။ သခင်သန်းထွန်း၏နောက်ဆုံးနေ့များ (ပထမတွဲ စာမျက်နှာ ၇၊ ၈)။ ထို့ပြင် ဤအဘိဓာန်ကို လေ့လာခြင်းဖြင့် မြန်မာ စာသင်သားတို့အား အင်္ဂလိပ် ဘာသာစကား ကွျမ်းကျင်မှု ပေးနိုင် သကဲ့သို့ နိုင်ငံခြားသားများ အတွက်လည်း မြန်မာဘာသာ စကား ကွျမ်းကျင်မှုတွင် အကူအညီ ပေးနိုင် ပါလိမ့်မည်"။
cat(x10k_itN_sen.4[grep("[\u1040-\u1049]\u104b",x10k_itN_sen.4)][1:5])
၁၉၄၁ ခုနှစ် စာရင်းဇယားအမျိုးအစား တန်ချိန် ကျပ်ငွေတန်ဖိုး၁။ ပြည်ခရိုင်(၁)    ဗိုလ်ငြိမ်း (ခရိုင်စစ်ရေးတာဝန်ခံ)(၂)    ရဲဘော်ရွှေ (ခရိုင်ကော်မတီ)(၃)   ရဲဘော်ချစ်စရာ (သဲကုန်းမြို့နယ် ပါတီအတွင်းရေးမှူး)   ၅။ မင်္ဂလာမောင်မယ်ရုပ်စုံ၊ တွဲ ၁၃၊ မှတ် ၁ (ဇန် ၂၀၀၁) စာ ၁။ လမင်းထွန်း                          ဦးအောင်ဗိုလ်                     ၂-၇-၂၀၀၆                နောက်တန်း                    မကွေး၂၇။ လယ်၊ ယာ မြေ၏ အကျိုးအပြစ်သိသော အတတ်ဖြင့် ဟောခြင်း၊၁၂။
They don’t look like proper sentences. They seem to be notes or references. The best (easy) way to handle them will be to delete them from x100_itN_sen.4, my last QD-Corpus.
As far as I know, our sentences could have only “ပ” or “ရ” in addition to “၏” as ending and none of other consonants singly. Here I look for “ပ”. There was only one and it looks like a typographical error.
cat(x10k_itN_sen.4[grep("\u1015\u104b",x10k_itN_sen.4)])
ေနှာင်းပိုင်းကာလ၌ အခွန်ဝန်ရာထူးအေြပာင်းအလဲရှိခဲ့ေသာ်လည်း အမည်ကိုမူ မသိရေပ။
I searched Myanmar Wikipedia for this page and in the article entitled “အခွန်ဝန်” and I found the same မသိရေပ။ which should have been မသိရပေ။. Or is this a problem of my browser?
load("x100.rda")
length(x100_itN_sen.4)
[1] 309005
I am deleting sentences with non-Myanmar character ending, with Myanmar digits ending, with single character ending except for “ပ” or “ရ” or “၏”. First I identify how many “sentences” to be removed relating to Myanmar characters including Myanmar digits.
length(x100_itN_sen.4[grep("[\u1000-\u1014\u1016-\u101a\u101c-\u102a\u103f-\u1049\u104c-\u104e]\u104b",x100_itN_sen.4)])
[1] 1291
Additionally I have to remove sentence endings with non-Myanmar characters involved in these number of “sentences”.
length(x100_itN_sen.4[grep("[^\u1000-\u104f]\u104b", x100_itN_sen.4)])
[1] 1309
We delete sentences according to above plan and we now have 306,405 sentences left.
library(quanteda)
x100_itN_Sen.5 <- x100_itN_sen.4[-grep("[^\u1000-\u104f]\u104b",x100_itN_sen.4)] %>%
  .[-grep("[\u1000-\u1014\u1016-\u101a\u101c-\u102a\u103f-\u1049\u104c-\u104e]\u104b",.)]
length(x100_itN_Sen.5)
[1] 306405
We look at a random sample of 10 sentences. If you inspect more sentences, you are sure to find problems that need to be handled.
set.seed(52719)
samp <- sample(1:306405,10)
cat(x100_itN_Sen.5[samp])
တစ်နည်းဆိုရလျှင် မိမိတို့၏ လူမျိုး (သို့မဟုတ်) နယ်မြေအား ပိုင်ဆိုင်ခွင့်ရှိကြောင်း ပြသသည့် အမှတ်အသားဖြစ်သည် ဟုလည်းဆိုနိုင်ပါသည်။ ကိုဗဟုန်နှင့် ဦးသီလတို့အား နယ်နှင်သည့် အမိန့်စာကို မထုတ်ပြန်မီ နယ်နှင်ဒဏ် ပေးသည့် အမိန့်စာ မူကြမ်းကို ကြိုတင် ဖတ်ရသည့် လက်နှိပ်စက် စာရေး မစ္စတာ လားဇရိုးက ကိုဗဟုန်အား ကြိုတင် သတင်း ပေးခဲ့သည်။ ထို့ပြင် အငြင်းပွားမှုဖြစ်ပွားနေစဉ်အတွင်း အလုပ်မှ ရပ်စဲခံရသူ သို့မဟုတ် အလုပ်ထုတ်ခံရသူအလုပ်သမားလည်းပါဝင်သည်။ ခန့်မှန်းခြေ ကွာခြားချက် မှာ စလင်းမ် ( ဒေါ်လာ ၅၃.၁ ဘီလီလျှံ ) နှင့် ဘူးဖတ် ( ၅၂.၄ ဘီလီလျှံ) ဖြစ်သည်။ သုဇာတာအား မြှုပ်နှံထားသည့်နေရာတွင် စေတီတည်ရှိနေသည်ကို ပုံတွင် ပြထားသည့်အတိုင်း တွေ့မြင်နိုင်သည်။ ယူရေနီယမ်နှင့်သိုရီယမ်သတ္တုများကို အဏုမြူဓာတ် ပေါင်းဖိုများတွင် အဓိကလောင်စာအရင်းမြစ်အဖြစ်အသုံးပြုသည်။ ထိုအရောင်ပေါ်တွင် အတွင်းက ပေါ်လာသော အဖြူထက်ပင် ပဋိဘာဂနိမိတ်က အဆများစွာ သာလွန်၍ ဖြူချောနုနယ် ပြောင်လင်းသေး၏။ ထိုခေတ် လူတို့ နှစ်သက်လက်ခံသော ဝေါဟာရများကို ဦးစားပေး အသုံးပြုထားခြင်းပင် ဖြစ်သည်။ အစိုးရ အဖွဲ့အစည်းအတွက် ပြောရေးဆိုခွင့်ရှိသော အဖွဲ့များ၏ (ရဲ၊ ဘဏ္ဍာရေးဝန်ကြီးဌာန၊ အထူးရဲတပ်ဖွဲ့၊ စသည်ဖြင့်) အကြိုက်ကို လိုက်၍ ပိတ်ဆို့ထားသော ဝက်(ဘ်)ဆိုဒ်များ၏ မှတ်တမ်းကို ပြုစုရန် အဆိုပြုချက်များရှိသည်။ သူ၏တရားမကြောင်း စွဲဆိုမှုကို ရှန်ဟိုင်းရှိ ပူဒုန်တရားရုံးက လက်ခံခဲ့သည်။
I think, I have fixed most of the sentence ending problems. But note that we still need to deal with the problems I had touched earlier in my previous posts.

Wednesday, May 22, 2019

Cycle2: Syllables from 10K sentences


I am selecting a random sample of 10,000 sentences and going to create syllables in each of them.
length(x100_itN_sen.4)
[1] 309005
str(x100_itN_sen.4)
 chr [1:309005] " <U+1024><U+1014><U+1031><U+101B><U+102C><U+101E><U+100A><U+103A> <U+1021><U+1000><U+103A><U+1012><U+1019><U+10"| __truncated__ ...
Check for the presence of quote marks in the sentences. And look at some examples.
table(grepl("[\"]",x100_itN_sen.4))

 FALSE   TRUE 
305234   3771 
cat(x100_itN_sen.4[which(grepl("[\"]",x100_itN_sen.4))][c(1,3771)])
တန္တရအယူဝါဒ"(Tantrism)သည် အိန္ဒိယနိုင်ငံတွင် ရှေးက ထွန်းကားခဲ့သည့် ယုံကြည်ကိုးကွယ်မှု တစ်မျိုးဖြစ်သည်။ အလည်အပတ်သွားစဉ် မျက်စိကျမိသော ပျိုဖော်ဝင် လော်လီတာ (လို ဟု အတိုခေါ်) ရှိသည့် ချားလော့ဟေ့ (Charlotte Haze) နှင့် ဒေါလိုရက် "လောလီတာ" ဟေ့ (Dolores "Lolita" Haze) တို့ အိမ်၌ ငှားနေသည်။
Ih the above two sentences you can see that modern English-like style of writing is preserved in our corpus, except for the loss of opening quote mark in the first sentence. That correction could have been made without too much trouble, I guess. But for the kind of NLP work I’m thinking about, punctuation, stopwords, and the like may have to be removed. So that kind of correction may not be strictly necessary.
Here I am checking for the sentence that I got trouble with the inclusion of section heading in the sentence that comes after it (see my previous post: “Cycle2: QDC2 hiccup”).
ကမ်းယံလူမျိုးအာရှတိုက်အလယ်ပိုင်းတွင်နေထိုင်ကြသောမွန်ဂိုလူမျိုးတို့သည်မိမိတို့ဒေသ၌အစာရေစာရှားပါးသဖြင့်ရှေးနှစ်ပေါင်းများစွာကပင်တောင်ဖက်သို့တသုတ်ပြီးတသုတ်ပြောင်းရွှေ့လာကြရာမြန်မာနိုင်ငံသို့ရှေးဦးစွာဝင်လာသူများမှာမွန်ခမာလူမျိုးများဖြစ်၍ဒုတိယအသုတ်မှာတိဘက်မြန်မာလူမျိုးများဖြစ်ကြသည်။
grep("ရှေးဦးစွာ ဝင်လာသူများမှာ မွန်ခမာ",x100_itN_sen.4)
[1] 104112
cat(x100_itN_sen.4[104112])
အာရှတိုက် အလယ်ပိုင်းတွင် နေထိုင်ကြ သော မွန်ဂိုလူမျိုးတို့သည် မိမိတို့ဒေသ၌ အစာရေစာ ရှားပါး သဖြင့် ရှေးနှစ်ပေါင်းများစွာကပင် တောင်ဖက်သို့ တသုတ်ပြီး တသုတ် ပြောင်းရွှေ့လာကြရာ မြန်မာနိုင်ငံသို့ ရှေးဦးစွာ ဝင်လာသူများမှာ မွန်ခမာလူမျိုးများဖြစ်၍ ဒုတိယအသုတ်မှာ တိဘက်မြန်မာလူမျိုးများ ဖြစ်ကြသည်။
Well, it has been corrected.
Select a random sample of 10,000 sentences.
set.seed(52119)
m <- length(x100_itN_sen.4)
x10k_itN_sen.4 <- x100_itN_sen.4[sample(1:m, 10000)]
As done before, I break up the sentences in the sample into syllables in two steps.
Breaking up into “quateda” style characters:
library(quanteda)
system.time(
  x10k.t <- tokens(x10k_itN_sen.4, what="character")
)
   user  system elapsed 
   2.39    0.01    2.63 
Create syllables from characters:
system.time({
x10k_syll <- list()
M <- length(x10k.t)
for (k in 1:M) {
    x10k_syll.k <- list()
    TEMP <- x10k.t[[k]][1]
    j <- 1
    L <- length(x10k.t[[k]])
    for(i in 2:L) {
        y <- grepl("[\u102b-\u102c\u1038-\u1039\u103a]",x10k.t[[k]][i])
        if (y == TRUE){
            TEMP <- paste0(TEMP,x10k.t[[k]][i])
        } else { 
            my.1 <- grepl("[\u1040-\u1049]", x10k.t[[k]][i])
            my.0 <- grepl("[\u1040-\u1049]", x10k.t[[k]][i-1])
            if (my.1 == TRUE){
                if (my.0 == TRUE){
                    TEMP <- paste0(TEMP,x10k.t[[k]][i])
                } else {
                    x10k_syll.k[[j]] <- TEMP
                    j <- j+1
                    TEMP <- x10k.t[[k]][i]
                }
            } else {
                if (my.0 == TRUE){
                    x10k_syll.k[[j]] <- TEMP
                    j <- j+1
                    TEMP <- x10k.t[[k]][i]
                } else {
                    # for stacked consonant
                    if (grepl("[\u1039]",x10k.t[[k]][i-1])==TRUE){
                        TEMP <- paste0(TEMP,x10k.t[[k]][i])
                    } else {
                        x10k_syll.k[[j]] <- TEMP
                        j <- j+1
                        TEMP <- x10k.t[[k]][i]
                    }
                }
            }
        }
    }
    if (i == L){
        x10k_syll.k[[j]] <- TEMP
    }
    x10k_syll[[k]] <- paste(unlist(x10k_syll.k))
}
})
   user  system elapsed 
1226.17    7.07 1259.88 
You can see how an original sentence is transformed into syllables.
     1. The original:
cat(x10k_itN_sen.4[1876])
☆အချို့က ထို​ဆေးပြားကို ကျွဲရိုင်း(red bull) (သို့) ကိုကာကိုလာ (Coca-Cola) နှင့် ​ရော​ဖျော်၍ ​သောက်သုံးကြသည်။
  1. Characters:
utf8::utf8_print(x10k.t[[1876]])
 [1] "☆"   "အ"   "ချို့"  "က"   "ထို"   ""    "ဆေ"  "း"   "ပြ"  "ာ"   "း"   "ကို"   "ကျွဲ"  "ရို"  
[15] "င်"   "း"   "("   "r"   "e"   "d"   "b"   "u"   "l"   "l"   ")"   "("   "သို့"   ")"  
[29] "ကို"   "က"   "ာ"   "ကို"   "လ"   "ာ"   "("   "C"   "o"   "c"   "a"   "-"   "C"   "o"  
[43] "l"   "a"   ")"   "နှ"   "င့်"   ""    "ရေ"  "ာ"   ""    "ဖျေ" "ာ်"   "၍"   ""    "သေ" 
[57] "ာ"   "က်"   "သုံ"   "း"   "ကြ"  "သ"   "ည်"   "။"  
  1. Syllables (here we concentrate on Myanmar syllables):
utf8::utf8_print(x10k_syll[[1876]])
 [1] "☆"    "အ"    "ချို့"   "က"    "ထို"    ""     "ဆေး"  "ပြား" "ကို"    "ကျွဲ"   "ရိုင်း"  "("   
[13] "r"    "e"    "d"    "b"    "u"    "l"    "l"    ")"    "("    "သို့"    ")"    "ကို"   
[25] "ကာ"   "ကို"    "လာ"   "("    "C"    "o"    "c"    "a"    "-"    "C"    "o"    "l"   
[37] "a"    ")"    "နှင့်"   ""     "ရော"  ""     "ဖျော်" "၍"    ""     "သောက်" "သုံး"   "ကြ"  
[49] "သည်"   "။"   
Next, I’ll be exploring the sentence ending syllables again. I hope I will not be seeing funny results this time.