14 มิถุนายน 2560

Published มิถุนายน 14, 2560 by with 1 comment

การประมวลผลไวยากรณ์ภาษาไทยด้วย CFG ใน Python

ไวยากรณ์ไม่พึ่งบริบท (Context Free Grammars หรือ CFG) ในเทคนิคการประมวลผลไวยากรณ์ที่นิยมใช้งานกันในหมู่นักภาษาศาสตร์และนักวิจัยด้านการประมวลผลภาษาธรรมชาติ


การประมวลผลไวยากรณ์ไม่พึ่งบริบทในภาษาไทย จากการศึกษา ของ วิรัชและคณะ (Sornlertlamvanich, V., 1995) ได้ให้รายละเอียดกฎไวยากรณ์โครงสร้างวลีภาษาไทยไว้ดังนี้
S -> NP VP
VP -> V NP PP ADV
VP -> V NP S1
VP -> V NP
VP -> V
V -> LAUX V RAUX
V -> LAUX V
V -> V RAUX
NP -> N NUM CLAS DET
NP -> N VATT CLAS DET
NP -> N CLAS DET
NP -> N DET
NP -> N CLAS VATT
NP -> NP PP
NP -> NP CONJ NP
PP -> PREP NP
S1 -> S

โดย

  • LAUX คือ กริยาช่วยที่อยู่ซ้ายมือของกริยา

  • RAUX คือ กริยาช่วยที่อยู่ขวามือของกริยา

เมื่อนำกฎนี้มาใข้ใน Python โดยใช้ไลบารี NLTK



สร้างประโยค

from nltk.parse.generate import generate
for sentence in generate(thaigrammar, n=900):
  print(' '.join(sentence))

ตรวจสอบไวยากรณ์
import nltk
rd_parser = nltk.RecursiveDescentParser(thaigrammar)
sent = 'หนังสือ สาม เล่ม นี้ มี ประโยชน์'.split()
for tree in rd_parser.parse(sent):
  print(tree)

ผลลัพธ์
(S
  (NP (N หนังสือ) (NUM สาม) (CLAS เล่ม) (DET นี้))
  (VP (V (V1 มี)) (NP (N ประโยชน์))))

อ้างอิง

  • บุญเจริญ ศิริเนาวกุล. ปัญญาประดิษฐ์. ฉบับปรับปรุงครั้งที่ 2. กรุงเทพฯ : ท้อป, 2555.

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

  1. ไม่ระบุชื่อ16 เมษายน 2561 เวลา 03:00

    ขอ full cite ของ (Sornlertlamvanich, V., 1995) ได้ไหมครับ

    ตอบลบ

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