Thursday, May 14, 2020

Reshaping the corpus to sentence level


For my last post, I’d created a corpus from the text of the COVID-19 surveillance reports for Myanmar for April 2020 using the quanteda package and tried out its kwic() function. That corpus was created at the surveillance report level, that is, the document units of the corpus is an entire surveillance report. Using the corpus_reshape() function we may change the present corpus at the “document” level to either “sentences” or “paragraphs” level.

(1) Add period mark at the end of the Myanmar language sentence

First I tried to trick quanteda by adding a period mark (full stop) after the Myanmar major section ending mark “။”, so as to become “\u104b\u002e”, that is, “။.”.Then I tried reshaping to sentences level. That didn’t work; I got 999 sentences while the correct number is just 403!

(2) Add paragraph mark “\n\n” at the end of the Myanmar language sentence

This works! This way, I was able to trick quanteda to give the corpus at the desired sentences level. But then I found that the next approach is more natural.

(3) Try reshaping without any additional mark

When I tried using the method (1) I noticed that some of the segmentation into “sentence” correctly used the Myanmar sentence ending mark “။”. So I tried reshaping the corpus of my last post directly into “sentences” without adding anything. That gave mostly correct segmentation into sentences, though there were some errors, such as: (i) considering “၊” in addition to “။” as sentence ending mark, (ii) considering the sentence number at the beginning of sentence such as “၁။” as a sentence, and (iii) considering “မှတ်ချက်။ ။” as two sentences. After appropriate modification of such texts, the reshaping succeded. I was happy and suprised, because I didn’t think quanteda would recognize the sentence ending of the Myanmar language!
Here’s how it was done.
First I removed “၊” and change sentence numbering “၁။” to “<၁>”. Then I modified “မှတ်ချက်။ ။” to “မှတ်ချက် -”.
Then there was this mysterious character “သည\u103a ။” in one sentence which gave me a lot of trouble eliminating. Finally I found the right pattern for detecting it: “သည\u103a.{1}။”, and was able to remove it!
Recall that the vector of of the texts of surveillance reports for April 2020, xMc.v had been created (see my last post).
xMc.v1.0 <- gsub("ဓာတ်ခွဲအတည်ပြု လူနာဟောင်း (old confirmed case)", "old confirmed case", xMc.v, fixed = TRUE) %>%
  gsub("ဆေးသုတေသနဦးစီးဌာန (DMR)", "DMR", . , fixed = TRUE) %>%
  gsub("အမျိုးသားကျန်းမာရေးဓာတ်ခွဲမှုဆိုင်ရာဌာန (ရန်ကုန်) (NHL)", "NHL", ., fixed = TRUE) %>%
  gsub("အမျိုးသားကျန်းမာရေးဓာတ်ခွဲမှုဆိုင်ရာဌာန\\(ရန်ကုန်\\)|အမျိုးသားကျန်းမာရေးဓာတ်ခွဲမှုဆိုင်ရာဌာန \\(ရန်ကုန်\\)", "NHL", .) %>%
  gsub("([\u1040-\u1049]?[\u1040-\u1049])\u104b", "<\\1>", .) %>%
  gsub("\u104a", " ", .) %>% gsub("(မှတ်ချက်)။ ။", "\\1 - ",. ) %>%
  sub("သည\u103a.{1}။","", .)

# create data frame
xMc.v1.0df <- data.frame(Z1 = names(xMc.v1.0),Z2 = xMc.v1.0, stringsAsFactors = FALSE)

# create corpus at document level
library(quanteda)
xsenMP0_apr <- xMc.v1.0df %>%
  corpus(.,docid_field = "Z1", text_field = "Z2", )
summary(xsenMP0_apr)
Corpus consisting of 60 documents:

                  Text Types Tokens Sentences
  (30-4-2020, 8:00 PM)   114    311         7
  (30-4-2020, 7:00 AM)    94    183         4
   (29-4-2020, 8:00PM)   133    323         8
  (29-4-2020, 7:00 AM)    88    160         3
  (28-4-2020, 8:00 PM)   105    232         5
  (28-4-2020, 7:00 AM)    67    152         4
  (27-4-2020, 8:00 PM)    84    176         5
  (27-4-2020, 7:00 AM)    82    187         3
  (26-4-2020, 8:00 pm)   110    258         6
  (26-4-2020, 7:00 AM)    83    190         4
  (25-4-2020, 8:00 pm)   127    302         6
 (25-4-2020, 10:00 am)    57     92         2
 (24-4-2020, 11:00 pm)    86    236         6
  (24-4-2020, 8:00 pm)   112    298         7
 (24-4-2020, 10:00 am)    99    272         5
  (24-4-2020, 9:00 am)    93    206         5
 (24-4-2020, 00:30 am)    50     75         2
  (23-4-2020, 8:00 pm)   119    334         8
 (23-4-2020, 10:00 am)    83    196         4
  (23-4-2020, 7:00 AM)    69    139         3
  (22-4-2020, 8:00 PM)   114    305         8
 (22-4-2020, 10:00 AM)    76    154         4
  (21-4-2020, 10:00PM)    57     94         3
   (21-4-2020, 8:00PM)    88    203         5
 (20-4-2020, 11:00 PM)    83    195         6
  (20-4-2020, 8:00 PM)   114    244         6
 (20-4-2020, 10:00 AM)    99    181         3
 (19-4-2020, 11:15 PM)    82    190         6
  (19-4-2020, 8:00 PM)   143    349         9
  (19-4-2020, 7:00 am)    76    164         5
  (18-4-2020, 9:00 PM)    70    146         4
  (18-4-2020, 8:00 pm)    88    205         4
 (18-4-2020, 10:00 am)   164    511         8
  (18-4-2020, 8:00 am)   157    439         9
  (17-4-2020, 8:00 pm)   143    534         7
 (17-4-2020, 10:00 am)   121    273         5
  (16-4-2020, 8:00 pm)   101    213         4
 (16-4-2020, 10:00 AM)   101    220         4
  (15-4-2020, 8:00 pm)   103    216         4
 (15-4-2020, 10:30 AM)   110    216         4
  (14-4-2020, 8:00 pm)   170    437         6
  (14-4-2020, 4:00 pm)    58     99         2
 (14-4-2020, 00:15 am)    97    220         6
 (13-4-2020, 10:15 pm)   102    216         6
  (13-4-2020, 8:00 pm)    78    118         4
 (13-4-2020, 00:30 am)   237    813        15
  (12-4-2020, 8:00 pm)   224    573        11
  (12-4-2020, 2:00 AM)   238   1262        22
   (11-4-2020, 8:00PM)   208    727        13
  (10-4-2020, 10:15PM)   192    564         9
   (10-4-2020, 8:00PM)   186    490         7
   (10-4-2020, 3:00AM)   256   1016        14
   (9-4-2020, 8:00 PM)   321   1191        17
   (8-4-2020, 8:00 PM)   223    693         9
    (6-4-2020, 8:00PM)   241    712        11
   (5-4-2020, 8:00 PM)   188    491         7
   (4-4-2020, 8:00 PM)   261    748        11
   (3-4-2020, 8:00 PM)   192    493         7
    (2-4-2020, 8:00PM)   214    590        10
    (1-4-2020, 8:00PM)   226    636        11

Source: C:/DATA/GITA_EX/* on x86-64 by mtnn
Created: Thu May 14 23:12:40 2020
Notes: 
# Reshape corpus to sentence level
xsenMP_apr <- corpus_reshape(xsenMP0_apr, "sentences")
View first two and last two sentences of (12-4-2020, 2:00 AM) report. Note that they have been truncated. Compare it with the whole report of that date.
utf8::utf8_print(texts(xsenMP_apr)[which(grepl("(12-4-2020, 8:00 pm)", names(texts(xsenMP_apr))))][c(1:2,10:11)])
(12-4-2020, 8:00 pm).1                                                                    
"<၁> NHL မှ ယနေ့ COVID-19 ရောဂါအတွက်ဓာတ်ခွဲစစ်ဆေးမှု ပထမအသုတ်အား စစ်ဆေးမှုတွင် စောင့်ကြည့်လူနာများ  ဆေးရုံများနှင့်…"
(12-4-2020, 8:00 pm).2                                                                    
"(COVID-19 ရောဂါပိုး တွေ့ရှိ (တွေ့ရှိ) မှု သတင်းကို ယနေ့  ညနေ (၆:၃၀) တွင် သတင်းအကျဉ်း ထုတ်ပြန်ပြီးဖြစ်ပါသည်။)"      
(12-4-2020, 8:00 pm).10                                                                   
"<၅> အဆိုပါ ဓာတ်ခွဲအတည်ပြုလူနာများနှင့် ထိတွေ့ခဲ့သူများအားလုံးကို စုံစမ်းဖော်ထုတ်၍ အသွားအလာကန့်သတ်ကာ စောင့်ကြပ်ကြည့်ရှုသွားမည်ဖြ…"
(12-4-2020, 8:00 pm).11                                                                   
"သို့ဖြစ်ပါ၍ အဆိုပါ ဓာတ်ခွဲအတည်ပြုလူနာများနှင့် အနီးကပ်ထိတွေ့ခဲ့သည့် ပြည်သူလူထုအနေဖြင့် နီးစပ်ရာ ကျန်းမာရေးဌာနသို့ ဆက်သွယ်အကြော…"
cat(texts(xsenMP_apr)[which(grepl("(12-4-2020, 8:00 pm)", names(texts(xsenMP_apr))))])
<၁> NHL မှ ယနေ့ COVID-19 ရောဂါအတွက်ဓာတ်ခွဲစစ်ဆေးမှု ပထမအသုတ်အား စစ်ဆေးမှုတွင် စောင့်ကြည့်လူနာများ  ဆေးရုံများနှင့် သက်ဆိုင်ရာ နေရာများ၌ အသွားအလာကန့်သတ်၍ စောင့်ကြပ်ကြည့်ရှုခံနေသူများ စုစုပေါင်း (၉၃) ဦး ၏ ဓာတ်ခွဲ နမူနာများအား စစ်ဆေးခဲ့ရာ (ဇယား-၁) ၌ ဖော်ပြထားရှိသော လူနာ (၁) ဦး၏ ဓာတ်ခွဲအဖြေတွင် COVID-19 ရောဂါပိုး တွေ့ရှိ (တွေ့ရှိ) ရပြီး ကျန်လူနာများနှင့် စောင့်ကြပ် ကြည့်ရှုမှုခံနေသူ (၉၂)ဦး၏ ဓာတ်ခွဲအဖြေများတွင် COVID-19 ရောဂါပိုးမရှိကြောင်း တွေ့ရှိရပါ သည်။ (COVID-19 ရောဂါပိုး တွေ့ရှိ (တွေ့ရှိ) မှု သတင်းကို ယနေ့  ညနေ (၆:၃၀) တွင် သတင်းအကျဉ်း ထုတ်ပြန်ပြီးဖြစ်ပါသည်။) <၂> ဓာတ်ခွဲအတည်ပြုလူနာ (Case-039) သည် ရန်ကုန်တိုင်းဒေသကြီး  ပန်းဘဲတန်းမြိို့နယ် တွင်နေထိုင်သူ အသက် (၈၅) နှစ်အရွယ် အမျိုးသားတစ်ဦးသည် (၉-၄-၂၀၂၀) ရက်နေ့တွင် ဖျားခြင်း  ချောင်းဆိုးခြင်းလက္ခဏာများစတင်ခံစားခဲ့ရသဖြင့် ရန်ကုန်ပြည်သူ့ဆေးရုံကြီးသို့ (၁၁-၄-၂၀၂၀) ရက်နေ့တွင် သွားရောက်ပြသခဲ့ရာစောင့်ကြည့်လူနာအဖြစ် သတ်မှတ်၍ ဓာတ်ခွဲ နမူနာရယူစစ်ဆေးခဲ့ခြင်းဖြစ်ပါသည်။ အဆိုပါလူနာသည် လွန်ခဲ့သော (၁၄)ရက်အတွင်း ပြည်ပ နိုင်ငံများသို့ ခရီးသွားလာသော ရာဇဝင်မရှိခဲ့ကြောင်း သိရှိရပြီး ဆီးချိုရောဂါနှင့် နှလုံးသွေး ကြောကျဉ်းရောဂါအခံရှိကြောင်း သိရှိရပါသည်။ လူနာမှာ ဆေးရုံ စတင်တက်ရောက်သည့် အချိန်တွင် အလွန်မောပန်းလျက်ရှိပြီး သွေးတွင်း အောက်စီဂျင်ဓာတ်များ ကျဆင်းလျက် ရှိရာ လိုအပ်သော ကုသမှုများပေးခဲ့သော်လည်း (၁၂-၄-၂၀၂၀)ရက်နေ့  နံနက် (၆:၀၀) နာရီအချိန်ခန့် တွင် သေဆုံးသွားခဲ့ကြောင်း သိရှိရပါသည်။ သေဆုံးရသည့် အကြောင်းအရင်းမှာ ပြင်းထန် အဆုတ်ရောင်ရောဂါ  ဆီးချိုရောဂါ  သွေးတိုးရောဂါနှင့် နှလုံးသွေးကြောကျဉ်းရောဂါအခံ ရှိခြင်းတို့ကြောင့် ဖြစ်ပါသည်။ <၃> ယခုအခါ (၂၃-၃-၂၀၂၀)ရက်နေ့မှ (၁၂-၄-၂၀၂၀)ရက်နေ့  ည (၈:၀၀)နာရီအချိန်အထိ မြန်မာနိုင်ငံတွင် COVID-19 ရောဂါ ဓာတ်ခွဲအတည်ပြုလူနာ (၃၉)ဦး တွေ့ရှိခဲ့ပြီး ဖြစ်ပါသည်။ <၄> သို့ဖြစ်ရာ COVID-19 ရောဂါ ဓာတ်ခွဲအတည်ပြုလူနာများမှာ ချင်းပြည်နယ်  တီးတိန် ပြည်သူ့ဆေးရုံတွင် (၃)ဦး  ရန်ကုန်မြို့  ဝေဘာဂီအထူးကုဆေးရုံကြီးတွင် လူနာ (၂၆)ဦး  ရှမ်း ပြည်နယ် (မြောက်ပိုင်း)  လားရှိုးပြည်သူ့ဆေးရုံကြီးတွင် (၁)ဦး  မော်လမြိုင်ပြည်သူ့ဆေးရုံကြီး တွင် လူနာ (၁)ဦး  စဝ်စံထွန်းပြည်သူ့ဆေးရုံကြီးတွင် လူနာ (၁)ဦး  စုစုပေါင်း (၃၂)ဦးတို့ဖြစ်ပြီး ၎င်းတို့၏ ကျန်းမာရေးအခြေအနေမှာ တည်ငြိမ်လျက်ရှိပါသည်။ ဝေဘာဂီအထူးကုဆေးရုံကြီး ရှိ လူနာ (၁) ဦးအား အထူးကြပ်မတ်ခန်း၌ သီးခြားထားရှိ ဆေးကုသမှုပေးလျက်ရှိပါသည်။ <၅> အဆိုပါ ဓာတ်ခွဲအတည်ပြုလူနာများနှင့် ထိတွေ့ခဲ့သူများအားလုံးကို စုံစမ်းဖော်ထုတ်၍ အသွားအလာကန့်သတ်ကာ စောင့်ကြပ်ကြည့်ရှုသွားမည်ဖြစ်ပါသည်။ သို့ဖြစ်ပါ၍ အဆိုပါ ဓာတ်ခွဲအတည်ပြုလူနာများနှင့် အနီးကပ်ထိတွေ့ခဲ့သည့် ပြည်သူလူထုအနေဖြင့် နီးစပ်ရာ ကျန်းမာရေးဌာနသို့ ဆက်သွယ်အကြောင်းကြားစေလိုကြောင်း တိုက်တွန်းအပ်ပါသည်။

Now we know that leaving only the major section mark (“။”) WORKS!!!!

It was done, but I don’t know if that was due to quanteda or the Unicode system. Anyway that’s wonderful for sure.

No comments:

Post a Comment