Calm Hill My Random Thoughts

Extracting Contents with Common Utilities

အရင်တစ်ပါတ်က လုပ်လက်စ Image တွေကို Search လုပ်တဲ့အလုပ်က အဆုံးမသတ်နိုင်သေးဘူး ပုံတွေကိုတင်ပြီးတဲ့နောက် Keywords တွေမရှိတာနဲ့ Index လုပ်လို့က မရသေးဘူးဖြစ်နေတော့ Keywords တွေကို ပုံတွေဝယ်ထားတဲ့ Shutter Stock ဆီက လိုက်တောင်းရတယ် သူတို့ကလည်း ကိုယ်ဝယ်ထားတဲ့ ပုံတွေအတွက်ကို Keywords တွေကို ထုတ်ပေးဖို့က မဖြစ်နိုင်ဘူးဆိုတာနဲ့ အဲဒါဆိုရင် ကိုယ်တိုင်ပဲ Site ထဲကနေဆွဲယူရင် ရမလားလို့ဆိုတော့ အဲဒါကတော့ ကိုယ့်ဟာကိုယ်ရှာယူတာပဲ ရပါတယ်ဆိုတော့ Shutter Stock က Page တွေနဲ့ HTML ရဲ့ Structure တွေကိုကြည့်ရတယ်။

URL Structure

http://www.shutterstock.com/pic.mhtml?id=57453022

URL Structure ကတော့လွယ်ပါတယ် id နေရာမှာပဲ ပြောင်းပေးဖို့လိုတယ် ကိုယ်ဝယ်ထားတဲ့ ပုံတွေရှိနေတော့ id တွေက File Name တွေကနေပြီးတော့ အလွယ်တကူ ထုတ်ယူလို့ရတယ်။

HTML Sample

america,
beak,
big,
bill,
billed,
.....
zoo

HTML တွေကို တစ်စစီဖွင့်ကြည့်တော့ Keywords တွေက စနစ်တကျ ထည့်ထားတာတွေ့တယ် ကိုယ့်အတွက်အသုံးတည့်တာက သက်ဆိုင်ရာ URL ကိုဆွဲချပြီးတော့ အထဲကနေ x_shutterstock_keyword=”america” ဆိုတဲ့ Pattern တွေထဲက Keywords တွေကို Extract လုပ်နိုင်ရင်လိုချင်တာရပါပြီ Extract လုပ်ရမယ့် Pattern ကလည်း ရှုပ်ရှုပ်ထွေးထွေးမရှိပါဘူး။

Extract ဘယ်လိုလုပ်မလဲဆိုတော့ တကယ်တော့ သက်ဆိုင်ရာ Language အလိုက် HTML Parser တွေအများကြီးရှိပါတယ် ခက်ခက်ခဲခဲလည်း မကြပါဘူး။ Python နဲ့ BeautifulSoup လို Parser သုံးလိုက်ရင် ၁၀ ကြောင်းလောက်ရေးရတာပါ။ ဒါပေမယ့် Programmer ပီသစွာပဲ ဘာမှမရေးချင်လောက်အောင် ပျင်းပါတယ် နောက်တစ်ခုက HTML ကို Parse လုပ်ပြီး Process လုပ်လောက်အောင်လည်း မလိုအပ်တော့ လိုအပ်တဲ့ Pattern ကို Search လုပ်လိုက်တာက ပိုမြန်မလားလို့ ယူဆတာလည်းပါတယ်။

Utilities တွေကအမြဲသုံးနေတဲ့ အရာတွေဆိုတော့ ထွေထူးပြီးတော့ မရှာရပါဘူး URL တွေကို Download လုပ်ဖို့ curl နဲ့ Extract လုပ်ဖို့ကတော့ Regular Expression သုံးဖို့အတွက် grep ဆိုရင်ရပါတယ်။ Command တစ်ကြောင်းဆိုရင် လိုချင်တာတွေရပါပြီ။ တစ်ခါတစ်လေတော့လည်း တစ်ခုခုတွေ့တိုင်း Program ရေးလိုက်ရမလား လုပ်နေတာထက် ရှိပြီးသား Utilities တွေကို ဘယ်လိုအသုံးတည့်အောင် သုံးရမလဲဆိုတာသိရင်လည်း အလုပ်ပြီးတာတော့ အတူတူပါပဲ။ Program ရေးတယ်ဆိုတာက လုပ်ရမယ့်အလုပ်တွေကို ဘယ်လိုလုပ်မယ်ဆိုတာနဲ့ ရှေ့နောက်အစီအစဉ်ချတာပါပဲ ဒီတော့ Computer ပေါ်မှာ Code နဲ့ရေးမှရယ်လည်း မဟုတ်ပါဘူး သက်ဆိုင်ရာအလုပ် တစ်ဆင့်ချင်းစီမှာ လုပ်နိုင်တဲ့ Subsystem လေးတွေကို စနစ်တကျ စီစဉ်ချတာဆိုရင် တကယ်တော့ Program ရေးတာပါပဲလေ။

Command

curl -silent http://www.shutterstock.com/pic.mhtml?id=57453022 | grep -oP '(?<=x_shutterstock_keyword=")(.*?)(?=")'

Output

america
beak
big
bill
billed
......
zoo