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.

No comments:

Post a Comment