9 มีนาคม 2558

Published มีนาคม 09, 2558 by with 0 comment

ตัดคำไทยในภาษา Python

สวัสดีผู้อ่านทุกท่านครับ บทความนี้จะพาผู้อ่านไปตัดคำไทยในภาษา Python กันครับ ในการตัดคำนั้นมีไลบรารีมากมายในภาษา Python แต่ที่สามารถตัดไทยได้นั้นมีแค่ไม่กี่ไลบรารี

PyICU


PyICU เป็น api สำหรับใช้เชื่อมต่อเข้ากับ ICU C++ API ของ IBM ทำงานเกี่ยวกับ localization & internationalization และรองรับภาษาไทยด้วยครับ รองรับทั้ง Python 2 , Python 3 และ License :: OSI Approved

สามารถโหลดไฟล์บีบอัดมาติดตั้งได้จาก https://pypi.python.org/pypi/PyICU/ แตกไฟล์แล้วใช้คำสั่ง
python setup.py build
python setup.py install

สำหรับผู้อ่านที่ใช้ Windows สามารถโหลดไฟล์ .whl มาติดตั้งได้จาก http://www.lfd.uci.edu/~gohlke/pythonlibs/#pyicu

หรือติดตั้งโดยใช้คำสั่ง pip
pip install pyicu

ผมนำโค้ดเก่าจาก http://programmingishard.com/code/211 โดยท่าน Chad Humphries ได้เขียนโค้ดตัดคำไทยด้วย PyICU ไว้เมื่อปี ค.ศ.2007 ปัจจุบันหน้าเว็บเข้าไม่ได้แล้ว ผมเข้าผ่าน https://web.archive.org/web/20081012212943/http://programmingishard.com/code/211 ครับ

ขอขอบคุณท่าน Chad Humphries  มา ณ ที่นี้ ที่ได้เขียนไว้มีประโยชน์ต่อการเขียนโปรแกรม Python ครับ
โค้ดตัดคำไทย Python 2

เดดิดท่าน Chad Humphries

[python]
import PyICU

def isThai(chr):
cVal = ord(chr)
if(cVal >= 3584 and cVal <= 3711):
return True
return False

def warp(txt):
#print txt
bd = PyICU.BreakIterator.createWordInstance(PyICU.Locale("th"))
bd.setText(txt)
lastPos = bd.first()
retTxt = ""
try:
while(1):
currentPos = bd.next()
retTxt += txt[lastPos:currentPos]
#Only thai language evaluated
if(isThai(txt[currentPos-1])):
if(currentPos < len(txt)):
if(isThai(txt[currentPos])):
#This is dummy word seperator
retTxt += "|"
lastPos = currentPos
except StopIteration:
pass
#retTxt = retTxt[:-1]
return retTxt
[/python]

ตัวโค้ดเป็นโค้ดของ Python 2 ผมนำมา Port เป็น Python 3 ได้โค้ดดังนี้ครับ

โค้ดตัดคำไทย Python 3


[python]
import PyICU

def isThai(chr):
cVal = ord(chr)
if(cVal >= 3584 and cVal <= 3711):
return True
return False
def warp(txt):
#print(txt)
bd = PyICU.BreakIterator.createWordInstance(PyICU.Locale("th"))
bd.setText(txt)
lastPos = bd.first()
retTxt = ""
try:
while(1):
currentPos = next(bd)
retTxt += txt[lastPos:currentPos]
#เฉพาะภาษาไทยเท่านั้น
if(isThai(txt[currentPos-1])):
if(currentPos < len(txt)):
if(isThai(txt[currentPos])):
#คั่นคำที่แบ่ง
retTxt += "|"
lastPos = currentPos
except StopIteration:
pass
#retTxt = retTxt[:-1]
return retTxt
[/python]

เวลาเรียกใช้งาน

[python]
>>> word = 'ทดลองระบบตัดคำไทย'
>>> print(warp(word))
ทดลอง|ระบบ|ตัด|คำ|ไทย
[/python]





pythai


เป็นไลบรารีสำหรับใช้ตัดคำไทย โดยเรียกใช้ไลบรารี libthai เป็นไลบรารีที่อยู่ในระบบปฎิบัติการลินุกซ์เท่านั้นครับ รองรับแค่ Python 2 และใช้ License: GNU

สามารถติดตั้งไลบรารี libthai ใน Debian / Ubuntu ได้ด้วยคำสั่ง
sudo apt-get install libthai-dev

สามารถโหลดโค้ดมาติดตั้งได้จาก https://pypi.python.org/pypi/pythai

หรือจะติดตั้งด้วยคำสั่ง pip :
pip install pythai

ตัวอย่างการใช้งาน pythai ตัดคำไทยในภาษา Python

[python]
>>> import pythai
>>> pythai.split(u"การที่ได้ต้องแสดงว่างานดี")
u"การ ที่ ได้ ต้อง แสดง ว่า งาน ดี"

>>> pythai.word_count(u"การที่ได้ต้องแสดงว่างานดี")
8

>>> pythai.contains_thai(u"hello")
False

>>> pythai.contains_thai(u"helloการที่ไ")
True
[/python]





libthai


เป็นไลบรารีอีกอันที่นำความสามารถของไลบรารี libthai มาใช้ในการตัดคำไทย รองรับเฉพาะ Python 2 และเฉพาะในระบบปฏิบัติการลินุกซ์ครับ และเป็น GNU GPL v3

โหลดโค้ดมาติดตั้งได้จาก https://basaasa.googlecode.com/files/python-libthai-20090310.tar.gz
ตัวอย่างการใช้งาน

[python]
import libthai
print libthai.th_brk(u"การที่ได้ต้องแสดงว่างานดี")
[/python]

ขอให้สนุกกับการเขียนโปรแกรมครับ
ติดตามบทความต่อไปนะครับ
ขอบคุณครับ

0 ความคิดเห็น:

แสดงความคิดเห็น

แสดงความคิดเห็นได้ครับ :)