Treebank คืออะไร ?
Treebank หรือ คลังต้นไม้ คือ คลังข้อความที่ในแต่ละประโยคได้กำกับโครงสร้างวากยสัมพันธ์สำหรับภาษาไทยปัจจุบันนี้ มีคลังข้อมูล Treebank ที่สามารถเข้าถึงได้สองแหล่ง นั้นคือ
- คลังข้อมูล Thai CG Bank - https://github.com/crishoj/thcg
- Parallel Universal Dependencies (PUD) treebanks - https://github.com/UniversalDependencies/UD_Thai-PUD
บทความนี้จะเลือกใช้คลังข้อมูลจาก Parallel Universal Dependencies
ก่อนอื่นให้ทำการโหลดไฟล์ th_pud-ud-test.conllu จาก https://github.com/UniversalDependencies/UD_Thai-PUD/blob/master/th_pud-ud-test.conllu?raw=true
และติดตั้ง NLTK,PyThaiNLP ด้วยคำสั่ง pip install nltk pythainlp
เราจะใช้ nltk.parse.DependencyGraph สำหรับดึงข้อมูลจาก PUD มาทำ Treebank โดย nltk.parse.DependencyGraph รองรับข้อมูลแบบ conll ที่ PUD แต่ nltk.parse.DependencyGraph รองรับข้อมูลแบบ conll ที่ PUD เพียงทีละหนึ่งเท่านั้น
ตัวอย่างเช่น
เราจะใช้ nltk.parse.DependencyGraph สำหรับดึงข้อมูลจาก PUD มาทำ Treebank โดย nltk.parse.DependencyGraph รองรับข้อมูลแบบ conll ที่ PUD แต่ nltk.parse.DependencyGraph รองรับข้อมูลแบบ conll ที่ PUD เพียงทีละหนึ่งเท่านั้น
ตัวอย่างเช่น
1 ผม _ PRON PRP Person=1 5 nsubj _ SpaceAfter=No 2 ก็ _ ADV RB _ 5 advmod _ SpaceAfter=No 3 เป็น _ AUX VC _ 5 cop _ SpaceAfter=No 4 แค่ _ ADV RB _ 5 advmod _ SpaceAfter=No 5 เด็ก _ NOUN NN _ 0 root _ SpaceAfter=No 6 ผู้ชาย _ NOUN NN _ 5 compound _ SpaceAfter=No 7 รองเท้า _ NOUN NN _ 5 compound _ SpaceAfter=No 8 เปื้อน _ VERB VV _ 7 acl _ SpaceAfter=No 9 โคลน _ NOUN NN _ 8 obj _ _แต่ข้อมูลใน PUD กลับมี
# sent_id = n01144041 # text = ผมก็เป็นแค่เด็กผู้ชายรองเท้าเปื้อนโคลน # english_text = I was just a boy with muddy shoes. 1 ผม _ PRON PRP Person=1 5 nsubj _ SpaceAfter=No 2 ก็ _ ADV RB _ 5 advmod _ SpaceAfter=No 3 เป็น _ AUX VC _ 5 cop _ SpaceAfter=No 4 แค่ _ ADV RB _ 5 advmod _ SpaceAfter=No 5 เด็ก _ NOUN NN _ 0 root _ SpaceAfter=No 6 ผู้ชาย _ NOUN NN _ 5 compound _ SpaceAfter=No 7 รองเท้า _ NOUN NN _ 5 compound _ SpaceAfter=No 8 เปื้อน _ VERB VV _ 7 acl _ SpaceAfter=No 9 โคลน _ NOUN NN _ 8 obj _ _ # sent_id = n01145008 # text = ปกติไม่มีงานพาเหรด และก็ไม่เคยมีมาก่อนด้วย ...
เราจึงต้องใช้ regx โดยเอา
แล้วนำ nltk.parse.ProbabilisticProjectiveDependencyParser มาลองสร้าง tree จาก treebank ที่เราสร้าง
ลองเขียนโค้ดตามนี้
\# (.*)\n
ออกแล้วใช้ regex แยก \n\n
ออกมาเป็นทีละ listแล้วนำ nltk.parse.ProbabilisticProjectiveDependencyParser มาลองสร้าง tree จาก treebank ที่เราสร้าง
ลองเขียนโค้ดตามนี้
ผลลัพธ์
text : ทำอะไรอยู่
Parsing 'ทำ อะไร อยู่'...
Parse:
Tree('ทำ', ['อะไร', 'อยู่'])
อ่านรายละเอียดเพิ่มเติมได้ที่ www.nltk.org/api/nltk.parse.html
เขียนโดย นาย วรรณพงษ์ ภัททิยไพบูลย์
นักศึกษาชั้นปีที่ 1
สาขาวิทยาการคอมพิวเตอร์และสารสนเทศ
คณะวิทยาศาสตร์ประยุกต์และวิศวกรรมศาสตร์
มหาวิทยาลัยขอนแก่น วิทยาเขตหนองคาย
0 ความคิดเห็น:
แสดงความคิดเห็น
แสดงความคิดเห็นได้ครับ :)