Wednesday, November 23, 2022

“သည်” ကိုဝါကျတွေရဲ့အတွင်းပိုင်းမှာဘယ်လိုသုံးသလဲ


အရေးစာတွေမှာ၊တိတိကျကျပြောရင်အခန့်ရေးစာ (formal writing) တွေမှာ၊ “သည်” ကိုဝါကျအဆုံးသတ်အဖြစ်တွင်တွင်ကျယ်ကျယ်သုံးတာကိုမြန်မာတွေအလိုလိုသိကြပါတယ်။ ဝါကျအတွင်းပိုင်းမှာသုံးပုံငါးမျိုးကိုမြန်မာအဘိဓါန်အကျဉ်းချုပ်ကဒီလိုပြထားပါတယ် -


ဒါနဲ့ပတ်သက်ပြီးလက်တွေ့ရေးပုံကို ကျနော့ရဲ့ ဝါကျ ၃၀၆,၄၀၅ ခုပါတဲ့မြန်မာဝီကီပီးဒီးယားစာစု (Myanmar Wikipedia corpus) ကထုတ်ကြည့်ပါမယ်။ “သည်” ကိုရှေ့ကတွဲတဲ့စကားလုံး (ဥပမာ “မှ”၊ “ဈေး”)၊ နောက်ကတွဲတဲ့စကားလုံး (ဥပမာ “လယ်”) တွေကို “သည်” နဲ့တွဲလျက်ထုတ်ကြည့်ဖို့လိုမယ်။ ပြဿနာကမြန်မာဘာသာစကားမှာ စကားလုံး (word) တွေကိုအင်္ဂလိပ်မှာလို ကွက်လပ်ခြားပြီးမရေးဘူး၊ ဒီလိုရေးဖို့လဲမလိုဘူး။ ဒါပေမယ့်မြန်မာစာကို ကွန်ပျူတာသုံးပြီး NLP ပရိုဂရမ်တခုခုနဲ့ကိုင်တွယ်မယ်ဆိုရင် (word) တွေကိုမလွဲမသွေအခြေပြုရမယ်။ ဒီဟာကိုအတိအကျဖြစ်စေဖို့ဆိုရင် မြန်မာစာစုကို ဝဏ္ဏ (syllable) တွေဖြစ်အောင်ခွဲထုတ်ပြီးပုံစံပြောင်းပေးရမယ်။ ဒီလိုလုပ်ဖို့ကျနော်ရေးထားတဲ့ပရိုဂရမ်ရှိပေမဲ့ နှေးလှတယ်။ မြနမာလူမျိုးပညာရှင်တွေရေးထားတဲ့ပရိုဂရမ်ကောင်းကောင်းတွေရှိနိုင်ပေမဲ့ ကျနော်မလေ့လာမိသေးဘူး။ တဖက်မှာလဲ NLP နယ်ပယ်မှာအသင့်ရှိပြီးဆော့ဝဲကိုအလိုက်သင့်သုံးလို့ရနိုင်ပါတယ်။ ကျနော်လုပ်ကြည့်မှာက quanteda ဆို R ဆော့ဝဲကိုသုံးပြီး -

  1. မြန်မာဝီကီပီးဒီးယားစာစုမှာ အဆုံးသတ်စကားလုံးတွေဖြစ်တဲ့ “သည်၊” နဲ့ “သည်။” တို့ကိုဖယ်ထုတ်
  2. quanteda မှာပါပြီးနည်းအတိုင်း word ‌တွေခွဲ
  3. ထွက်လာတဲ့ word ‌တွေကို နှစ်လုံးတွဲ (bigrams) တွေလုပ်ခိုင်း
  4. “သည်” မပါတဲ့စကားလုံးမှန်သမျှဖယ်ထုတ်
  5. ကျန်နေတဲ့ “သည်” ပါတဲ့စကားလုံးတွေကိုတူရာစုပြီးရေတွက်ကြည့်။

(၁) “သည်၊” နဲ့ “သည်။” တို့ကိုဖယ်ထုတ်

# view first three and last three sentences
yy[c(1:3, 306403:306405)]   
[1] " ဤနေရာသည် အက်ဒမင်များ (စီမံခန့်ခွဲသူများ)အား မေးခွန်းများ မေးမြန်းရန် နေရာ မဟုတ်သလို Wikipedia:Requests for adminshipအက်ဒမင်အဖြစ် လျောက်ထားရန် နေရာ လည်း မဟုတ်ပါ။"                                      
[2] "အက်ဒမင်ဖြစ်ချင်ပါလျှင် ဤနေရာတွင်  လာရောက်တောင်းဆိုနိုင်ပါ"                                                                                                                                   
[3] "ဝီကီသူကြီး (sysop) သည် ဝီကီ အသုံးပြုသူများကို ကူညီပြီး နှောက်ယှက်ရန်များမှ ကာကွယ်ပေး"                                                                                                                 
[4] "ဆုတံဆိပ် အများအပြား ရခဲ့ရာ ဉာဏ်ရည်တုတွင် ပါဝင်ဆောင်ရွက်ခြင်းကြောင့် တူရင်းဆုအား ၁၉၇၁ ခုတွင် လည်းကောင်း၊ အမေရိကန်နိုင်ငံ၏ သိပ္ပံဆိုင်ရာ အမျိုးသားဆုတံဆိပ်ကို လည်းကောင်း၊ ကျိုတိုဆုကို လည်းကောင်း ချီးမြှင့်ခံရဖူး"                            
[5] "ကွန်မြူနစ်အဖြစ် မြေတောင်မြှောက်ခံရသော်လည်း ဆိုဗီယက် ဝင်ရောက်မှု ဖြစ်ပြီးသည့် ၁၉၆၈ ခုတွင် ချက်ကိုဆလိုဗားကီးယားနိုင်ငံချက်ကိုစလိုဗေးကီးယားသို့ ၂ ရက်ကြာ ခရီးသွားပြီးနောက် ကွန်ဆာဗေးတစ် ရီပါဗလစ်ကန် (Conservative republican) တစ်ဦး ဖြစ်လာ"
[6] "စတန်းဖို့ရှိ နေအိမ်၌ ၂၀၁၁ ခု၊ အောက်တိုဘာလ ၂၄ ရက်တွင် ကွယ်လွန်"                                                                                                                                   

(၂) word ‌တွေခွဲ

yyt <- tokens(yy, what = "word", remove_punct = TRUE,
  remove_symbols = TRUE)
# view first and last sentences
yyt[c(1, 306405)]
Tokens consisting of 2 documents.
text1 :
 [1] "ဤ"      "နေရာ"   "သည်"     "အက်"     "ဒ"      "မင်"     "များ"  
 [8] "စီမံ"     "ခန့်ခွဲ"    "သူများ"  "အား"    "မေးခွန်း"
[ ... and 19 more ]

text306405 :
 [1] "စ"        "တန်း"      "ဖို့"        "ရှိ"        "နေအိမ်"    
 [6] "၂၀၁၁"     "ခု"        "အောက်တိုဘာလ" "၂၄"       "ရက်"      
[11] "တွင်"       "ကွယ်လွန်"    

(၃) နှစ်လုံးတွဲ (bigrams) တွေလုပ်ခိုင်း

ybb <- tokens_ngrams(yyt, n = 2)
# view bigrams in first sentence
ybb[1]
Tokens consisting of 1 document.
text1 :
 [1] "ဤ_နေရာ"      "နေရာ_သည်"     "သည်_အက်"       "အက်_ဒ"       
 [5] "ဒ_မင်"        "မင်_များ"     "များ_စီမံ"     "စီမံ_ခန့်ခွဲ"     
 [9] "ခန့်ခွဲ_သူများ"   "သူများ_အား"   "အား_မေးခွန်း"  "မေးခွန်း_များ"
[ ... and 18 more ]

(၄) “သည်” မပါတဲ့စကားလုံးမှန်သမျှဖယ်ထုတ်

ycc <-tokens_select(ybb, "\u101e\u100a\u103a", selection = "keep", valuetype = "regex")
ycc[1:5]
Tokens consisting of 5 documents.
text1 :
[1] "နေရာ_သည်" "သည်_အက်"  

text2 :
character(0)

text3 :
[1] "sysop_သည်" "သည်_ဝီ"    

text4 :
[1] "သူကြီး_များသည်" "များသည်_ဝီ"   

text5 :
character(0)

(၅) ကျန်နေတဲ့ “သည်” ပါတဲ့စကားလုံးတွဲ (bigrams) တွေကိုရေတွက်

ဒီအတွက် document feature matrix (dfm) လုပ်လိုက်ရုံပါဘဲ။ လုပ်ကြည့်တော့ကွဲပြားတဲ့ bigrams လုံးရေ ၅၇,၃၀၄-လုံးထွက်လာတယ်။

ycc_dmat <- dfm(ycc)

“သည်” ပါတဲ့စကားလုံးတွဲ (bigrams) တွေကိုနမူနာရိုက်ထုတ်ကြည့်

ပထမအလုံး ၁၀၀ ကိုကြည့်

topf_ycc_dmat_F <- topfeatures(ycc_dmat, n=100)
df_topf_ycc_dmat_F <- data.frame(name = names(topf_ycc_dmat_F), n = topf_ycc_dmat_F, stringsAsFactors = F)
utf8::utf8_print(do.call("paste",c(sep = " -  ", df_topf_ycc_dmat_F)))
  [1] "သည်_ဟု -  5261"        "သူ_သည် -  3136"        "သည်_ကို -  2946"       
  [4] "စသည်_တို့ -  2824"       "ခြင်း_သည် -  2238"     "ခဲ့_သည် -  2229"       
  [7] "သည်_လည်း -  1991"      "ရှိ_သည် -  1786"        "ကြီး_သည် -  1624"     
 [10] "ဆိုသည်_မှာ -  1589"      "ဖြစ်သည်_ဟု -  1568"     "မြို့_သည် -  1448"      
 [13] "ရ_သည် -  1396"        "ကြ_သည် -  1393"       "သည်_အ -  1107"       
 [16] "သည်_ထို -  1058"        "လာ_သည် -  1046"       "နိုင်ငံ_သည် -  1006"     
 [19] "သည်_က -  808"         "သည်_မိမိ -  788"        "သူ_တို့သည် -  771"       
 [22] "မင်း_သည် -  752"       "သည်_သူ -  729"         "သူများ_သည် -  703"    
 [25] "သည်_ဖြစ် -  703"       "သည်_မြန်မာနိုင်ငံ -  686"  "အဖွဲ့_သည် -  685"       
 [28] "အစိုးရ_သည် -  684"      "င်း_သည် -  673"        "သည်_မ -  668"        
 [31] "သည်_ဆို -  655"         "သည်_အထိ -  617"        "သည်_တစ် -  610"       
 [34] "မျိုး_သည် -  601"       "ဦး_သည် -  589"        "မြတ်စွာဘုရား_သည် -  585"
 [37] "လူမျိုး_တို့သည် -  570"     "နေသည်_ကို -  560"       "ပါတီ_သည် -  555"      
 [40] "များ_သည် -  554"      "ဘုရင်_သည် -  534"       "များသည်_လည်း -  523"  
 [43] "သည်_ကမ္ဘာ -  510"      "သည်_မြန်မာ -  496"     "တို့သည်_လည်း -  466"     
 [46] "ခု_သည် -  459"         "သည်_များ -  458"      "ဆရာတော်_သည် -  456"   
 [49] "သည်_အလွန် -  444"       "မြစ်_သည် -  421"       "ထားသည်_ကို -  409"     
 [52] "သည်_င်း -  405"        "စု_သည် -  404"         "သည်_သာ -  403"       
 [55] "ခြင်း_စသည် -  389"     "သည်_အခြား -  386"     "မင်းကြီး_သည် -  386"   
 [58] "သည်_လူ -  385"         "သည်_တို့ -  382"         "လုပ်ငန်း_သည် -  382"    
 [61] "နိုင်သည်_ဟု -  380"       "ကြီး_များသည် -  379"   "လူမျိုး_များသည် -  378" 
 [64] "စ်_သည် -  369"         "သွား_သည် -  369"       "ခဲ့_သည်မှာ -  367"      
 [67] "လူ_တို့သည် -  361"        "သည်_ဟူ -  351"         "မှ_သည် -  343"        
 [70] "သည်_အာ -  341"        "ဟူသည်_မှာ -  336"       "ရီ_သည် -  335"        
 [73] "ယင်း_သည် -  326"       "ထေရ်_သည် -  326"       "ခြင်း_ဖြစ်သည် -  322"  
 [76] "သည်_မြတ်စွာဘုရား -  322" "သည်_အီ -  320"         "ယောက်_သည် -  315"     
 [79] "သည်_ရန် -  313"        "သည်_လည်းကောင်း -  310"  "လာ_သည်နှင့် -  306"     
 [82] "သည်_ပထမ -  304"       "မှု_များသည် -  302"     "တို့_သည် -  301"        
 [85] "ဒေသ_သည် -  300"       "ထွန်း_သည် -  299"       "နေသည်_ဟု -  298"      
 [88] "ရေး_သည် -  298"       "သည်နှင့်_အမျှ -  296"     "သည်_အိန္ဒိယ -  296"     
 [91] "ယင်း_တို့သည် -  295"      "သည်_တရုတ် -  287"       "သည်_စ -  287"        
 [94] "သည်_အသက် -  286"       "အချို့_သည် -  280"       "င်း_တို့သည် -  278"      
 [97] "တို့သည်_မိမိ -  276"       "သည်_တောင် -  276"      "လေ_သည် -  276"       
[100] "စနစ်_သည် -  271"      

နောက်ဆုံးအလုံး ၁၀၀ ကိုကြည့်

topf_ycc_dmat_L <- topfeatures(ycc_dmat, n=100, decreasing = FALSE)
df_topf_ycc_dmat_L <- data.frame(name = names(topf_ycc_dmat_L), n = topf_ycc_dmat_L, stringsAsFactors = F)
utf8::utf8_print(do.call("paste",c(sep = " -  ", df_topf_ycc_dmat_L)))
  [1] "sysop_သည် -  1"          "များသည်_၁၉၀၆ -  1"      
  [3] "သည်_ပကတိမျက်စိ -  1"        "များသည်_အလင်းတန်း -  1"   
  [5] "ဖုန်_များသည် -  1"         "သည်မှာ_ဝိုင် -  1"          
  [7] "အလင်း_ဖြစ်ပေါ်သည် -  1"     "ဖြစ်ပေါ်သည်_မှာ -  1"      
  [9] "ကုပ်သည်_အလင်းတန်း -  1"      "သည်_ရပ်နေ -  1"          
 [11] "စရိတ်_တို့သည် -  1"           "တို့သည်_အံ့ -  1"            
 [13] "ပြောင်းလဲ_ဖြစ်ပေါ်သည် -  1"  "ဖြစ်ပေါ်သည်_တို့ -  1"       
 [15] "ပထဝီဝင်_ဟူသည် -  1"         "သော်_ငါးသည် -  1"        
 [17] "ငါးသည်_သက်ရှိ -  1"         "များသည်_တောင်ပေါ်သား -  1"
 [19] "တို့သည်_ဆိပ်ကမ်း -  1"         "တို့သည်_အသိပညာ -  1"        
 [21] "သည်_အဝန်း -  1"           "တို့သည်_မြေပုံ -  1"         
 [23] "ဗဟုသုတ_များသည် -  1"       "ပိုလို_သည် -  1"            
 [25] "ဗဟုသုတ_သည် -  1"           "မသည်_၁၄၈၉ -  1"         
 [27] "သည်_ကုလားထိုင် -  1"         "ဗို့_သည် -  1"             
 [29] "သည်_ကျယ်ဝန်းသော -  1"      "စသည်ဖြင့်_အစိတ် -  1"       
 [31] "မိုးလေဝသ_စသည် -  1"        "ပညာသည်_ကုန်းမြေ -  1"     
 [33] "ပညာသည်_တောင် -  1"        "ရေခဲမြစ်_စသည် -  1"       
 [35] "စပ်_မှုသည် -  1"            "မှုသည်_မြေ -  1"          
 [37] "တိုက်သည်_သက်တမ်း -  1"        "တောင်ကြော_များသည် -  1"  
 [39] "၄၀၀_တို့သည် -  1"           "ပိုင်းသည်_အာ -  1"         
 [41] "မှူ_သည် -  1"              "ခနောက်စိမ်း_တို့သည် -  1"     
 [43] "ခံ_သည်းခံ -  1"            "တိုက်သည်_ဥရောပတိုက်သား -  1"  
 [45] "တို့_ကြီးစိုးသည် -  1"         "ကြီးစိုးသည်_ကို -  1"        
 [47] "စစ်ကြေညာ_ပြီးသည် -  1"     "တိုက်သည်_အရှေ့ -  1"         
 [49] "တိုက်သည်_အလွန် -  1"          "တောင်ကြားလမ်း_သည်ပင် -  1" 
 [51] "တောင်တန်း_သည်ကား -  1"     "သည်ကား_တီ -  1"          
 [53] "တိုက်သည်_ရေ -  1"           "ကုန်းပြင်မြင့်_တို့သည် -  1"    
 [55] "သည်ကား_စင်စစ် -  1"        "ခံ_နေသည် -  1"           
 [57] "ပုံသည်_သမပိုင်း -  1"         "မုတ်သုံလေ_သည် -  1"         
 [59] "တို့သည်_စွံ -  1"             "ယမ်း_တို့သည် -  1"          
 [61] "တိုက်သည်_လယ်ယာ -  1"         "တိုက်သည်_ကုန် -  1"          
 [63] "ပူသည်_မ -  1"             "physics_သည် -  1"       
 [65] "သည်_သွက်သွက် -  1"           "ဓာတုဗေဒ_ဆိုသည် -  1"       
 [67] "သူများ_စကားများသည် -  1"  "စကားများသည်_ကွဲပြား -  1" 
 [69] "အဘယ်ကြောင့်_ဖြစ်ပေါ်သည် -  1" "ဒြပ်ထု_သည်ကား -  1"       
 [71] "သည်ကား_အတူတူ -  1"         "ထင်မြင်ချက်_သည် -  1"      
 [73] "များသည်_တစ်ခုခု -  1"       "သည်_မီးရှို့ -  1"           
 [75] "သည်_အဟုန် -  1"            "ရပ်တန့်_သည် -  1"          
 [77] "သည်_အသုံးကျ -  1"          "ပါဝါ_တို့သည် -  1"         
 [79] "ပါဝါ_ဆိုသည် -  1"          "သိမြင်_မှုသည် -  1"         
 [81] "မှ_စကားပြောသည် -  1"      "စကားပြောသည်_ကို -  1"     
 [83] "မက်_ဆွဲသည် -  1"            "ဆွဲသည်_ယခု -  1"           
 [85] "သည်_ဆဲ့ -  1"              "မှုသည်_သွန် -  1"           
 [87] "တို့သည်_အနုမြူ -  1"          "ထူး_စသည် -  1"           
 [89] "သည်_သံပိုင်း -  1"           "အရာ_စသည်ဖြင့် -  1"       
 [91] "စသည်ဖြင့်_သမိုင်း -  1"       "ထည့်သွင်း_စပ်ဆိုသည် -  1"      
 [93] "စပ်ဆိုသည်_လည်း -  1"         "tantrism_သည် -  1"      
 [95] "အပြင်လူ_တို့သည် -  1"         "မင်း_နန်းကျသည် -  1"      
 [97] "နန်းကျသည်_အထိ -  1"        "ကြီး_အသည်ဝန် -  1"        
 [99] "အသည်ဝန်_အသည် -  1"         "ခံ_ကသည်း -  1"           

ဝါကျ ၃၀၆,၄၀၅ ခုပါတဲ့စာစုကို အထက်မှာပြခဲ့တဲ့အဆင့် ၁ က ၅ အထိအလုပ်ကို လူအများကြီးသုံးပြီး ဖတ်လိုက်မှတ်လိုက်လုပ်ရင်တောင် ဘယ်လိုမှပြီးဖို့မလွယ်ဘူး။ အမှားတွေလဲပါဦးမယ်။ NLP ဆော့ဝဲနဲ့လုပ်တော့ ၂၇ စက္ကန့်ခွဲပဲကြာတယ်။ အောက်မှာကြည့်ပါ။

# create *document-feature matrix*
system.time(
  {
  cc_dmat <- gsub("\u101e\u100a\u103a\u104a|\u101e\u100a\u103a\u104b", "", x100_itN_Sen.5) %>%
    tokens(., what = "word", remove_punct = TRUE, remove_symbols = TRUE) %>%
    tokens_ngrams(., n = 2) %>%
    tokens_select(., "\u101e\u100a\u103a", selection = "keep", valuetype = "regex") %>%
    dfm(.)
  }
)
   user  system elapsed 
  41.14    0.72   27.40 

နိဂုံး

မြန်မာအဘိဓါန်မှာပြထားတဲ့ “သည်” ဆိုတဲ့စကားလုံးအသုံး ၅-မျိုးထဲကဘယ်ဟာတွေ အသုံးများတယ်ဆိုတာကိုမြန်မာဝိကီပီးဒီးယားစာစုကနေ စိစစ်ခဲ့တာမှာ သုံးပုံအသေးစိတ်တွေကိုတွေ့ ခဲ့ရပါပြီ။ အဘိဓါန်ထဲမှာပြထားသလိုတူရာခွဲပြီးသုံးသပ်ဖို့ကိုတော့စိတ်ဝင်စားသူတွေအတွက် ချန်လှပ်ခဲ့ပါရစေ။

1 comment:

  1. (၁၃ ဒီဇင်ဘာ၂၀၂၃)။ အဘိဓါန်ထဲက "သည်" စကားလုံးပြထားပုံကျန်နေတာခုမှတွေ့လို့ဖြည့်လိုက်ပါတယ်။

    ReplyDelete