Sunday, April 7, 2019

Syllable segmentation on a sample of 10,000 texts


For me the easiest way To play with my QD Myanmar Wikipedia corpus will be to create a wordcloud from syllable segmentation data produced from it. Since I have no idea of how much time it will take to extract syllables from this huge collection of 87,405 sentences/paragraphs of Myanmar language text, I choosed to work with a random sample of 10,000 sentences/paragraphs. For this exercise, I am using the textMyNbl.s1 vector which is the R-format text data of the myWiki-QDcorpus.txt file as the source data.
For syllabe segmentation I am using the same code as in my earlier post “Citizen coding for syllable segmentation of Myanmar text”. First, a sample of 10,000 elements is randomly selected.

Creating a sample of 10,000 sentences/paragraphs

set.seed(10000)
n <- length(textMyNbl.s1)
xs <- textMyNbl.s1[sample(1:n, 10000)]
View the 9999th element of the sample:
cat(xs[9999])
ထို့နောက်အိုဟီရာသည်ယိုကိုဟားမားအကောက်ခွန်ရုံးအုပ်အဖြစ်၎င်း၊ဆင်ဒိုင်အကောက်ခွန်ကြီးကြပ်ရေးဗျူရိုနှင့်တိုကျိုဘဏ္ဍာရေးဗျူရိုညွှန်ကြားရေးမှူးအဖြစ်၎င်း၊ဂျပန်စီးပွားရေးတည်ငြိမ်မှုဘုတ်အဖွဲ့၏ပြည်သူ့လုပ်ငန်းဌာနခွဲညွှန်ကြားရေးမှူးအဖြစ်၎င်း၊ဂျပန်ဘဏ္ဍာရေးဝန်ကြီး၏အတွင်းရေးအတွင်းဝန်အဖြစ်၎င်းဆောင်ရွက်ခဲ့လေသည်။
Syllable segmentation is done on the text in the sample.
library(quanteda)
xit <- tokens(xs, what = "character")
View the tokenized characters of 9999th text:
cat(xit[[9999]])   # or cat(xit$text9999)
ထို့ နေ ာ က် အို ဟီ ရ ာ သ ည် ယို ကို ဟ ာ း မ ာ း အ ကေ ာ က် ခွ န် ရုံ း အု ပ် အ ဖြ စ် ၎ င် း ၊ ဆ င် ဒို င် အ ကေ ာ က် ခွ န် ကြီ း ကြ ပ် ရေ း ဗျူ ရို နှ င့် တို ကျို ဘ ဏ္ ဍ ာ ရေ း ဗျူ ရို ညွှ န် ကြ ာ း ရေ း မှူ း အ ဖြ စ် ၎ င် း ၊ ဂျ ပ န် စီ း ပွ ာ း ရေ း တ ည် ငြိ မ် မှု ဘု တ် အ ဖွဲ့ ၏ ပြ ည် သူ့ လု ပ် င န် း ဌ ာ န ခွဲ ညွှ န် ကြ ာ း ရေ း မှူ း အ ဖြ စ် ၎ င် း ၊ ဂျ ပ န် ဘ ဏ္ ဍ ာ ရေ း ဝ န် ကြီ း ၏ အ တွ င် း ရေ း အ တွ င် း ဝ န် အ ဖြ စ် ၎ င် း ဆေ ာ င် ရွ က် ခဲ့ လေ သ ည် ။

Syllable segmentation script

The segmentation of syllables from the sample of 10,000 sentences/paragraphs, each of which has been tokenized as above, took 1 hour and 38 minutes. I was running the following R-script on my Windows-7 laptop with Intel Core i5 CPU at 2.67GHz, and 8GB RAM.
syll <- list()
for (k in 1:10000) {
    syll.k <- list()
    TEMP <- xit[[k]][1]
    j <- 1
    L <- length(xit[[k]])
    for(i in 2:L) {
        y <- grepl("[\u102b-\u102c\u1038-\u1039\u103a]",xit[[k]][i])
        if (y == TRUE){
            TEMP <- paste0(TEMP,xit[[k]][i])
        } else { 
            my.1 <- grepl("[\u1040-\u1049]", xit[[k]][i])
            my.0 <- grepl("[\u1040-\u1049]", xit[[k]][i-1])
            if (my.1 == TRUE){
                if (my.0 == TRUE){
                    TEMP <- paste0(TEMP,xit[[k]][i])
                } else {
                    syll.k[[j]] <- TEMP
                    j <- j+1
                    TEMP <- xit[[k]][i]
                }
            } else {
                if (my.0 == TRUE){
                    syll.k[[j]] <- TEMP
                    j <- j+1
                    TEMP <- xit[[k]][i]
                } else {
                    # for stacked consonant
                    if (grepl("[\u1039]",xit[[k]][i-1])==TRUE){
                        TEMP <- paste0(TEMP,xit[[k]][i])
                    } else {
                        syll.k[[j]] <- TEMP
                        j <- j+1
                        TEMP <- xit[[k]][i]
                    }
                }
            }
        }
    }
    if (i == L){
        syll.k[[j]] <- TEMP
    }
    syll[[k]] <- paste(unlist(syll.k))
}
})

The output

View the output of 93 syllables produced from 9999th tokenized text:
length(syll[[9999]])
[1] 93
utf8::utf8_print(syll[[9999]])
 [1] "ထို့"    "နောက်" "အို"    "ဟီ"    "ရာ"   "သည်"   "ယို"    "ကို"    "ဟား"  "မား"  "အ"    "ကောက်"
[13] "ခွန်"   "ရုံး"   "အုပ်"   "အ"    "ဖြစ်"  "၎င်း"  "၊"    "ဆင်"   "ဒိုင်"   "အ"    "ကောက်" "ခွန်"  
[25] "ကြီး"  "ကြပ်"  "ရေး"  "ဗျူ"   "ရို"    "နှင့်"   "တို"    "ကျို"   "ဘဏ္ဍာ" "ရေး"  "ဗျူ"   "ရို"   
[37] "ညွှန်"   "ကြား" "ရေး"  "မှူး"   "အ"    "ဖြစ်"  "၎င်း"  "၊"    "ဂျ"   "ပန်"   "စီး"   "ပွား" 
[49] "ရေး"  "တည်"   "ငြိမ်"  "မှု"    "ဘုတ်"   "အ"    "ဖွဲ့"    "၏"    "ပြည်"  "သူ့"    "လုပ်"   "ငန်း" 
[61] "ဌာ"   "န"    "ခွဲ"    "ညွှန်"   "ကြား" "ရေး"  "မှူး"   "အ"    "ဖြစ်"  "၎င်း"  "၊"    "ဂျ"  
[73] "ပန်"   "ဘဏ္ဍာ" "ရေး"  "ဝန်"   "ကြီး"  "၏"    "အ"    "တွင်း"  "ရေး"  "အ"    "တွင်း"  "ဝန်"  
[85] "အ"    "ဖြစ်"  "၎င်း"  "ဆောင်" "ရွက်"   "ခဲ့"    "လေ"   "သည်"   "။"   
The total number of syllables obtained from the sampled 10000 texts is 1.2 million.
length(unlist(syll))
[1] 1218112

No comments:

Post a Comment