Skip to content

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 ในอนาคต

from nltk.corpus import wordnet 
class thaiwordnet:
	def __init__(self):
		self._wordnet = wordnet
	def synsets(self, word, pos=None, lang="tha"):
		return self._wordnet.synsets(lemma=word,pos=pos,lang=lang)
	def synset(self,name_synsets):
		return self._wordnet.synset(name_synsets)
	def all_lemma_names(self,pos=None, lang="tha"):
		return self._wordnet.all_lemma_names(pos=pos, lang=lang)
	def all_synsets(self,pos=None):
		return self._wordnet.all_synsets(pos=pos)
	def langs(self):
		return self._wordnet.langs()
	def lemmas(self,word,pos=None,lang="tha"):
		return self._wordnet.lemmas(word,pos=pos,lang=lang)
	def lemma(self,name_synsets):
		return self._wordnet.lemma(name_synsets)
	def lemma_from_key(self,key):
		return self._wordnet.lemma_from_key(key)
	def path_similarity(self,synsets1,synsets2):
		return self._wordnet.path_similarity(synsets1,synsets2)
	def lch_similarity(self,synsets1,synsets2):
		return self._wordnet.lch_similarity(synsets1,synsets2)
	def wup_similarity(self,synsets1,synsets2):
		return self._wordnet.wup_similarity(synsets1,synsets2)
	def morphy(self, form, pos=None):
		return self._wordnet.morphy(form, pos=None)
	def custom_lemmas(self, tab_file, lang):
		return self._wordnet.custom_lemmas(self, tab_file, lang)

ตัวอย่างการใช้งาน

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

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

ใส่ความเห็น

อีเมลของคุณจะไม่แสดงให้คนอื่นเห็น ช่องที่ต้องการถูกทำเครื่องหมาย *