4 มิถุนายน 2560

Published 6/04/2560 by with 0 comment

WordNet ภาษาไทยกับ NLTK

หลังจากบทความที่แล้ว ผมพาผู้อ่านไปทำ WordNet ภาษาไทยกับ Python บทความนี้เราจะนำ NLTK มาใช้งานกับ WordNet ภาษาไทยกันครับ


NLTK เป็นชุดเครื่องมือประมวลผลภาษาธรรมชาติยอดนิยมในภาษาไพทอน โดยสนับสนุน WordNet 3

อ่านเกี่ยวกับ WordNet ภาษาไทย ได้ที่ http://lexitron.nectec.or.th/2009_1/presentation/WordNet.pdf

สำหรับภาษาไทย ทาง Open Multilingual Wordnet (compling.hss.ntu.edu.sg/omw/) ได้ทำ Corpus สำหรับ NLTK ที่ใส่ภาษาไทยจาก www.asianwordnet.org มาไว้แล้ว ในชื่อ 'omw'

โดยภาษาไทยชื่อว่า 'tha'

ในการติดตั้ง Corpus ชื่อ omw ต้องใช้โค้ดไพทอนดังนี้ (ต้องการการเชื่อมต่อเครือข่ายอินเทอร์เน็ต)
import nltk
nltk.download('omw')

การนำไปใช้งานกับ WordNet ของ NLTK ทำได้โดยเติม lang='tha' ใน API ที่รองรับ
เช่น
>>> from nltk.corpus import wordnet as wn
>>> wn.synsets('ศูนย์',lang='tha')
[Synset('zero.s.01'), Synset('zero.s.03'), Synset('center.n.03'), Synset('zero.a.04'), Synset('zero.n.04'), Synset('zero.n.03'), Synset('zero.n.02')]
>>> wn.synsets('0')[0].lemma_names('tha')
['๐', 'ศูนย์', 'ไข่เป็ด', 'เลขศูนย์', '0']

อ่านเอกสารการใช้งาน NLTK WordNet ได้ที่ www.nltk.org/howto/wordnet.html
เพื่อให้ง่ายต่อการใช้งาน ผมจึงเขียนโมดูลมาช่วยเหลือ WordNet ภาษาไทย และ โมดูลตัวนี้เตรียมเอาไปใส่ใน PyThaiNLP 1.4 ในอนาคต

ตัวอย่างการใช้งาน
a=thaiwordnet()
print(a.synsets('หนึ่ง'))
print(a.synsets('หนึ่ง')[0].lemma_names('tha'))
print(a.synset('one.s.05'))
print(a.langs())
print(a.synset('spy.n.01').lemmas())
print(a.synset('spy.n.01').lemma_names('tha'))
w1 = a.synset('ship.n.01')
w2 = a.synset('boat.n.01')
print(w1.wup_similarity(w2))

ผลลัพธ์
[Synset('one.s.05'), Synset('one.s.04'), Synset('one.s.01'), Synset('one.n.01')]
[]
Synset('one.s.05')
['eng', 'als', 'arb', 'bul', 'cat', 'cmn', 'dan', 'ell', 'eus', 'fas', 'fin', 'fra', 'glg', 'heb', 'hrv', 'ind', 'ita', 'jpn', 'nno', 'nob', 'pol', 'por', 'qcn', 'slv', 'spa', 'swe', 'tha', 'zsm']
[Lemma('spy.n.01.spy'), Lemma('spy.n.01.undercover_agent')]
['สปาย', 'สายลับ']
0.9090909090909091

ติดตามบทความต่อไปนะครับ
ขอบคุณครับ

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

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

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