Calm Hill My Random Thoughts

ဘာတဲ့ သဝေထိုး ရယ်ရသကွာ

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

လတ်တလောအနေနဲ့ ဗမာစာတွေ Google မှာအလုပ်လုပ်နေပုံကို အကြမ်းပြောမယ်ဆိုရင် Preprocess ဘာမှမလုပ်နိုင်ဘူး Space နဲ့ Tokenize လုပ်ပြီး Index လုပ်ထားတယ် Sorting လည်း စာလုံးတွေရဲ့ Code အပေါ်မူတည်ပြီး Lexicographically ပဲစီထားတာပါပဲ။ ဒီတော့ ကိုယ့်ဝဘ်ဆိုက်မှာရေးထားတဲ့ Space ခြားထားတဲ့အပေါ် မူတည်ပြီးတော့ ရှာလို့ရမှာပါပဲ။ ဥပမာပြောရင် “မော်လမြိုင်” နဲ့ “မော်လမြိုင်သို့” ဆိုရင်မတူဘူး။ Search Engine ဆိုတာ ဂူဂဲတစ်ခုတည်းမဟုတ်ဘူး ကိုယ်ပိုင်လည်းလုပ်လို့ရတာပဲ ဗမာစာအတွက် လုပ်နိုင်တာတွေရှိပါတယ်။ ဗမာစာ Search Engine ဆိုတာ လူအမြင်ကပ်အောင်ပြောရရင် Lucene, Sphinx, Sciencenet, …. ဒါတွေကို ယူသုံးတတ်တာလား။ အဲဒါတွေက ခက်ခဲ့တဲ့အရာတွေမပါပါဘူး ဖတ်ကြည့်သုံးတတ်ပါတယ်။ အရေးကြီးတာက ဗမာစာအတွက် ဘယ်နေရာက Improve လုပ်ဖို့လိုအပ်သလဲ။ လက်ရှိအနေနဲ့က စကားလုံး ဘယ်လိုဖြတ်မလဲက အရေးအကြီးဆုံး ဖြစ်နေတယ်။ ဖြစ်နိုင်တဲ့နည်းလမ်း ၂ ခုရှိမယ်။

ပထမတစ်ခုက ဗမာစာလုံးတွေဟာ Syllabic ဖြစ်နေလို့ Consonant ကနေအစပြုပြီးတော့ Syllabic တွေကုန်သွားရင် တစ်လုံးအဖြစ် သတ်မှတ်တာက အခြေခံအကျဆုံးနည်းစနစ်ပဲ။ ဒီတော့ ဗမာစကားလုံးမှာက ပဌ်ဆင့်နဲ့ အသတ်ဆုံးတာတွေမှာက နောက်ထပ် Consonant တစ်ခုအပိုပါတယ် အဲဒါကိုပါတစ်ခုတည်းအဖြစ် စဥ်းစားလိုက်ရင် Syllabic နဲ့ဖြတ်တာလွယ်ပါတယ်။ ဒီနေရာမှာ ဇော်ဂျီနဲ့လား ယူနီကုဒ်နဲ့လား ဒါကအရေးပါတယ်။ ဒါလည်း ခက်ခက်ခဲခဲမဟုတ်သေးပါဘူး ယူနီကုဒ်ဆိုရင် Consonant တစ်ခုအစကနေ Syllabic တွေအဆုံးသတ်တဲ့အထိ သို့မဟုတ် နောက်ထပ် Consonant မှာအသတ် (သို့) ပဌ်ဆင့် Syllabic အထိဆို တစ်လုံးပေါ့။ ဇော်ဂျီနဲ့ဆို Consonant တစ်ခုတည်းမဟုတ်ပဲ သဝေထိုး (သို့) ရရစ်လိုလည်း အစပြုနိုင်သည်ပေါ့။ Index လုပ်ရင် Bigram နဲ့လုပ်ပေါ့ ပြောမယ်ဆိုရင် Bidex ပေါ့။ ဥပမာ- မော်လမြိုင် လို့ရှာမယ်ဆိုရင် “မော်လ” AND “လမြိုင်” ဆိုပြီးတော့ Phrasal Search နဲ့ရှာလို့ရတယ်။ Precision မြင့်တဲ့ Search Engine တစ်ခုဖြစ်လာနိုင်တယ်။ ဒါတွေက Technical ဖြစ်လာလို့ အသေးစိတ်မရေးတော့ဘူး။

ဒုတိယတစ်ခုကတော့ ခက်ဖို့များတယ် ဗမာစာကြောင်းတစ်ခုကို Part of Speech နဲဲ့ဖြတ်ပေးမယ့် Parser တစ်ခုလိုမယ်။ ထွက်လာမယ့် စကားလုံးတွေကိုပဲ Index လုပ်ယူလို့ရတယ်။ ဒီနေရာမှာ Preprocessing လုပ်မှာလားဆိုတာကလည်း လိုအပ်ချက်အပေါ်မူတည်တယ်။ ကိုသာသာနဲ့ တစ်ခါက ဗမာစကားလုံးတွေစုပြီးတော့ Stemming လုပ်ကြည့်ဖူးတယ်။ မဆိုးပါဘူး ရလဒ်တွေက စကားလုံးကို မူရင်းပုံစံရောက်အောင် ၉၀% လောက်ပြန်ပို့လို့ရတယ်။ တစ်ခုပဲချို့ယွင်းချက်ရှိတယ် ဗမာစာ Parser မရှိလို့ Space နဲ့ဖြတ်ထားရတယ်။ ဒီနေရာမှာ ဗမာစာ Parser တစ်ခု လုပ်ကြမယ်ဆိုပါစို့။ သတ်မှတ်ချက်အတိုင်း အစဥ်အလိုက်သိမ်းတဲ့ ယူနီကုဒ်က လုပ်လို့လွယ်မှာငြင်းစရာမလိုဘူး။ ဇော်ဂျီကတော့ ဗြောက်သောက်ရိုက်တဲ့ အက္ခရာစဥ်နဲ့ဆို သေလုအောင်လုပ်ရမယ် ဘာလို့လဲဆိုတော့ အမှန်လို့ သတ်မှတ်ထားတာမရှိတော့ ဖြစ်နိုင်သမျကို လိုက်ပြင်ကြည့်ပြီးသုံးရမလိုဖြစ်မယ်။ ပြောမယ်ဆိုရင် မူရင်းကိုပြင်တယ်ဆိုတာ တန်ဖိုးကျပါတယ် ဖြစ်နိုင်သမျပြင်ကြည့်ပြီး စဥ်းစားဖို့ဆိုတာ အဓိပ္ပာယ်မရှိဘူး။ ဒီနည်းကတော့ Bidex, Tridex လိုမသုံးပဲ Term Index နဲ့ပဲ Search Engine လုပ်လို့ရမယ်။

လတ်တလော နည်းပညာအခြေအနေအရ ပထမနည်းက အတိကျဆုံး ဗမာစာ Search Engine ဖြစ်လာနိုင်မယ်။ ဒုတိယနည်းမှာတော့ Parser တစ်ခုလိုအပ်နေလို့ သိပ်မလွယ်လှသေးဘူး Research လိုအပ်နေတယ်။ ဒီနေရာမှာ သုံးတ ဲ့လူတွေကို အနည်းငယ်ယုံကြည်လိုက်ပြီး Space and Punctuation တွေနဲ့ဖြတ်ပြီး ယာယီအစားထိုးထားနိုင်တယ်။ လက်ရှိသုံးနေတဲ့ ဂူဂဲက အဲဒီ့နည်းစနစ်လို့ ပြောလို့ရမယ် သူ့အနေနဲ့ Preprocess မလုပ်နိုင်ဘူး နောက်ပြီးတော့ စာလုံးဖြတ်တာမမှန်နိုင်ဘူးဖြစ်နေတယ်။ အဲဒါတွေ ထပ်ထည့်နိုင်ရင် လက်ရှိထက်ကောင်းတဲ့ အဖြေတွေထွက်မှာ သေချာပါတယ်။ ဟုတ်ပြီ ယူနီကုဒ်နဲ့ဇော်ဂျီစကားလုံးတွေ Index တစ်ခုထဲမှာ သိမ်းလို့ရသလားဆိုတာ စဥ်းစားစရာရှိတယ်။ သိမ်းလို့တော့ရတယ်လို့ ပြောလို့ရပါတယ် ပထမနည်းမှာကတော့ Syllabic ကိုဦးစားပေးလို့ ရှာတဲ့လူကတော့ သူဘာနဲ့ရိုက်တယ်ဆိုတာ ပြောဖို့တော့လိုလိမ့်မယ် အဲဒါဆိုရင် Query ကိုသက်ဆိုင်ရာနဲ့ Syllabic ဖြတ်လိုက်ဖို့လိုမယ်။ ဒုတိယနည်းကတော့ လက်ရှိအနေထားနဲ့ ဘာနဲ့သုံးတယ်ဆိုတာ မလိုအပ်သေးဘူး ဒါ့ကြောင့် ဂူဂဲမှာဘာနဲ့ရှာရှာ ရှာလို့ရနေတာပေါ့။ ဒါပေမယ့် Parser တစ်ခုသုံးလိုက်ရင်တော့ သူလည်းဘာသုံးတယ်ဆိုတာ သိဖို့လိုအပ်ပါတယ်။

အဲဒါကို တစ်ခါကကြားဖူးတယ် ယူနီကုတ်များ စည်းရုံးရေးဆင်းနေတုံးက ဂူဂဲကသုံးတဲ့ Database ကများ ဇော်ဂျီကို Support လုပ်လို့မရတော့ရင် အားလုံးရှာလို့မရတော့ဘူးဆိုပဲ။ ဂူဂဲက Index ကို Database သုံးတယ်လို့ ဘယ်သူကများပြောလိုက်ပါလိမ့်။ အခုလည်းလာပြန်ပြီနောက်တစ်ဖွဲ့ ဇော်ဂျီမှာ သဝေထိုးအရှေ့ထားတာ Search Engine နဲ့ဆိုင်လို့ဆိုပဲ ငါပဲဥာဏ်မမှီတာဖြစ်မယ် အပေါ်မှာပြောခဲ့တာတွေနဲ့ ဆက်စပ်ကြည့်တယ် ဘယ်လိုသက်ဆိုင်မှန်း စဥ်းစားလို့မရဘူး။ ဇော်ဂျီကို စလုပ်ကာစအခြေအနေက Microsoft Keyboard Layout Creator မှာ Input အတွက် Keystroke Order ကို Swap လုပ်မပေးနိုင်ဘူး နောက်ပြီးတော့ Shaping Engine မရှိဘူးဒါ့ကြောင့် သဝေထိုးနဲ့ ရရစ်တွေက အရှေ့မှာရောက်နေတယ် အဲဒီလိုပဲငါနားလည်ထားတာ။ အေးလေ ငါသိတာမှားနေတာပဲ ဖြစ်မယ်ထင်ပါတယ်။ ဘယ်သူဖြစ်ဖြစ် နောက်ဆုံး Search Engine အကြောင်းပြတာ ထုံးစံဖြစ်လာသလား။

ပျက်နေတာကို ပြန်မပြင်ဖြစ်တာက နားလည်လို့ရပါတယ် အခြေအနေအရပေါ့ အခုအချိန်မှာသုံးနေတဲ့ မှားနေတာတွေက အများကြီးဖြစ်နေပြီမဟုတ်လား ပြင်ဖို့မလွယ်ဘူးဆိုတာ လက်ခံပါတယ်။ လတ်တစ်လော လိုအပ်ချက်တစ်ခုအရ မှန်နေပြီးသားအရာတစ်ခုကို ငါ့လိုလိုက်မှားစေမယ်ဆိုရင်တော့ အဲဒါကိုကန့်ကွက်ရမယ်။ သိမ်းချင်သလို သိမ်းခွင့်လို့အော်မလား အဲဒါဆိုလည်း ဘာလို့အပင်ပန်းခံနေကြလဲ ဟိုးအရင်က ASCII Fonts တွေလည်း သုံးရနေသားပဲ။ ဗမာစာနဲ့ ရှမ်းစာမှာ ဘုံသုံးတဲ့ အက္ခရာတွေ ရှိနေတာငါလည်းသိတယ် ကိုယ်ကိစ္စနဲ့ကိုယ် ဘယ်နားမှာ သဝေထိုးထားထား အစကတည်းက စံကိုလိုက်နာတဲ့ ရှမ်းစာက သဝေထိုးတော့ ရှေ့ကိုပို့စရာ အကြောင်းမရှိပါဘူးလေ။ Search Engine နဲ့သဝေထိုး ဂူဂဲရဲ့ Database ဟေးဟေးဟေး ကြားဖူးသမျ ဟာသတွေထဲမှာ ဒီဟာသတွေအရယ်ရဆုံးပဲ။ ဘယ်ဘက်အဖွဲ့ကမှမနေဘူး ဒါပေမယ့် ဘယ်သူလိမ်တာမှမခံဘူး လူနားမလည်ဘူးဆိုပြီး အလုံးကြီးကြီးပြောပြီး ထင်ယောင်ထင်မှားပြောတာကို အင်မတန်သောက်မြင်ကပ်တယ်။