playing around Thai blog corpus with NLTK

อยากจะลองเล่น NLTK กับข้อมูลภาษาไทยดู คิดไปคิดมา เอาข้อมูลจาก foosci.com มาลองดูละกัน เขาเปิดให้ใช้ เป็น ครีเอทีฟคอมมอนส์ แสดงที่มา-อนุญาตแบบเดียวกัน (CC by-sa)

แต่ไม่อยากไปดึงมาเอง ขี้เกียจ เห็นว่าโครงการโรตี (อัลฟ่า) โดย Opendream ดูดบล็อกไทยจำนวนหนึ่งมาเก็บไว้ได้ระยะหนึ่งแล้ว เพื่อใช้ในการแนะนำลิงก์ (ดูตัวอย่างที่ keng.ws ที่ท้ายแต่ละโพสต์) ก็เลยเอาจากตรงนั้นมาใช้ละกัน

ข้อมูลที่มีเป็น XML ที่ dump มาจาก MySQL เราก็เขียนสคริปต์ก๊อก ๆ แก๊ก ๆ ดึงเฉพาะที่อยากได้ออกมา ด้วย xml.etree.cElementTree (ตอนแรกใช้ ElementTree แตน ๆ แต่อืดเกิน เนื่องจากแฟ้มมันใหญ่)
เอา HTML tags ออกด้วย Beautiful Soup แล้วตัดคำด้วย python-libthai ตัดประโยคแบบถึก ๆ ด้วย .split(‘\n’) จะได้ข้อมูลออกมาหน้าตาประมาณนี้ (จะเห็นว่าข้อมูลมันไม่ได้สมบูรณ์มาก มีแท็ก HTML โผล่มาด้วย-อันนี้เป็นที่ข้อมูลป้อนเข้าที่ dump มา) :

<?xml version="1.0" encoding="utf-8"?> <roti> <entry id="4947" url="http://www.foosci.com/node/401" ...> <tags> <tag>LHC</tag> <tag>quantum physics</tag> ... </tags> <title> <w>บิดา</w> <w>ของ</w> <w>อนุภาค</w> ... </title> <content> <s> <w>p</w> <w>นัก</w> <w>วิทยาศาสตร์</w> ... </s> <s> <w>pcenter</w> <w space="1"> </w> <w>ภาพ</w> ... </s> ... </content> </entry> <entry> ... </roti> read more

encode("UTF-8", "ignore") ข้าม ๆ เรื่องที่ทำไม่ได้ใน Python

หลังจากเอา python-libthai ของวีร์มาใช้กับข้อมูลที่ได้มาจากเว็บ ก็พบปัญหาเรื่อง character encoding นิดหน่อย read more

modifying setup.py for libthai Python binding in MacPorts environment

(ปรับปรุง 2009.04.21 พบท่าง่ายกว่าเดิม ดูด้านล่าง)

เอา libthai Python binding ที่วีร์ทำเอาไว้มาใช้บน Mac OS X + MacPorts ต้องดัดแปลง setup script นิดนึง

เนื่องจากผมติดตั้ง libthai ผ่านทาง MacPorts (ด้วยคำสั่ง sudo port install libthai) ดังนั้นแฟ้มไลบรารี (libthai.a) กับแฟ้ม include (*.h) ทั้งหลาย จึงไม่ได้อยู่ในตำแหน่งปกติที่ apple-gcc จะวิ่งไปหา (ผมใช้ i686-apple-darwin9-gcc-4.0.1 ลองใช้ gcc-4.2, gcc-mp-4.4 ที่อยู่ในเครื่องแล้ว มันบอกไม่รู้จัก flag โน้น flag นี้ ผมก็เซ็ตไม่เป็นด้วย เลยใช้ gcc ตัวที่เขาให้มาแต่เดิมนี่แหละ) จึงจำเป็นต้องแก้ไข setup.py นิดหน่อย เพื่อบอกตำแหน่งของ include_dirs และ library_dirs ใหม่ ตามนี้ :


from distutils.core import setup, Extension

setup(name="libthai", version="0.0.1",
      ext_modules=[ 
        Extension('libthai', 
                  include_dirs = ['/opt/local/include'],
                  libraries = ['thai'],
                  library_dirs = ['/opt/local/lib'],
                  sources = ['libthai.c']
)])

ก็จะสามารถ build และ install ได้ครับ – ของใครอยู่ที่อื่น ก็แก้ไปตามนั้นครับ –
ผมดูตัวอย่างจากเอกสารหน้านี้ : 3. Building C and C++ Extensions with distutils

หมายเหตุ: libthai ที่ใช้นี้ยังเป็นรุ่น 0.1.9 อยู่ ตอนนี้รุ่นล่าสุดคือ 0.1.11 ออกมาไล่ ๆ กับ libdatrie และ swath ตัวใหม่ ติดตามข่าวได้ที่ linux.thai.net / ขอบคุณคุณวีร์ พี่เทพ และทุกท่าน

อัปเดต 2009.04.21: เพิ่งเจอท่าที่ง่ายกว่า ไม่ต้องแก้ setup.py คือเรากำหนดไดเรกทอรีได้ที่บรรทัดคำสั่งเลย ตอน build จากนั้นค่อยสั่ง install อีกที เช่น :


$ sudo python setup.py build_ext --include-dirs=/opt/local/include --library-dirs=/opt/local/lib
$ sudo python setup.py install

หรือจะกำหนดไว้ในแฟ้ม setup.cfg ก็ได้ เผื่อใช้หลายรอบ :

[build_ext] include-dirs=/opt/local/include library-dirs=/opt/local/lib read more