ติดตั้งและใช้งาน PyThaiNLP: ไลบรารี Python สำหรับภาษาไทย
จากบทที่แล้ว เราได้ทำความเข้าใจพื้นฐานเกี่ยวกับ Chatbot และความสำคัญของการประมวลผลภาษาธรรมชาติ (NLP) สำหรับภาษาไทยไปแล้ว ในบทนี้ เราจะมาเรียนรู้วิธีการติดตั้งและใช้งานไลบรารี PyThaiNLP ซึ่งเป็นเครื่องมือสำคัญที่จะช่วยให้ Chatbot ของเราสามารถเข้าใจและตอบสนองต่อภาษาไทยได้อย่างมีประสิทธิภาพ
PyThaiNLP เป็นไลบรารี Python ที่ถูกพัฒนาขึ้นเพื่อรองรับการประมวลผลภาษาไทยโดยเฉพาะ มีฟังก์ชันหลากหลายที่จำเป็นสำหรับการสร้าง Chatbot เช่น การตัดคำ, การถอดเสียง, การตรวจสอบคำผิด, และอื่นๆ อีกมากมาย
การติดตั้ง PyThaiNLP ผ่าน pip
การติดตั้ง PyThaiNLP สามารถทำได้ง่ายๆ ผ่าน pip ซึ่งเป็น package installer สำหรับ Python โดยเปิด Command Prompt (Windows) หรือ Terminal (macOS/Linux) แล้วพิมพ์คำสั่งต่อไปนี้:
pip install pythainlp
หลังจากติดตั้งเสร็จเรียบร้อยแล้ว เราสามารถตรวจสอบได้ว่า PyThaiNLP ถูกติดตั้งอย่างถูกต้องหรือไม่ โดยเปิด Python interpreter แล้วลอง import ไลบรารี:
import pythainlp
print(pythainlp.__version__)
ถ้าไม่มีข้อผิดพลาดใดๆ แสดงว่า PyThaiNLP ถูกติดตั้งเรียบร้อยแล้ว และพร้อมใช้งาน
ข้อผิดพลาดที่พบบ่อย:
- "ModuleNotFoundError: No module named 'pythainlp'": ข้อผิดพลาดนี้มักเกิดจากการที่ pip ไม่ได้ถูกตั้งค่าให้ใช้ Python version ที่ถูกต้อง หรือ PyThaiNLP ถูกติดตั้งใน environment ที่แตกต่างจากที่ Python interpreter กำลังใช้งานอยู่ ลองตรวจสอบ Python version และ environment ที่ใช้งาน
- "Permission denied": ข้อผิดพลาดนี้มักเกิดจากการที่ pip พยายามติดตั้ง PyThaiNLP ใน directory ที่ต้องการสิทธิ์ administrator ในการเข้าถึง ลองรัน Command Prompt หรือ Terminal ในฐานะ administrator
การตัดคำภาษาไทยด้วย PyThaiNLP
การตัดคำ (Word Tokenization) คือกระบวนการแบ่งประโยคหรือข้อความออกเป็นคำๆ ซึ่งเป็นขั้นตอนสำคัญในการประมวลผลภาษาธรรมชาติ เนื่องจากคอมพิวเตอร์ไม่สามารถเข้าใจความหมายของประโยคได้โดยตรง จำเป็นต้องแบ่งประโยคออกเป็นส่วนย่อยๆ เพื่อวิเคราะห์ความหมาย
PyThaiNLP มีฟังก์ชันหลากหลายสำหรับการตัดคำภาษาไทย แต่ฟังก์ชันที่นิยมใช้กันมากที่สุดคือ word_tokenize:
from pythainlp.tokenize import word_tokenize
text = "สวัสดีครับ วันนี้อากาศดีมากๆ เลยครับ"
tokens = word_tokenize(text)
print(tokens)
ผลลัพธ์ที่ได้:
['สวัสดี', 'ครับ', ' ', 'วัน', 'นี้', 'อากาศ', 'ดี', 'มากๆ', ' ', 'เลย', 'ครับ']
จากตัวอย่างข้างต้น จะเห็นได้ว่า word_tokenize ได้ทำการตัดคำในประโยค "สวัสดีครับ วันนี้อากาศดีมากๆ เลยครับ" ออกเป็นคำๆ โดยมีช่องว่าง (' ') แทรกอยู่ระหว่างคำด้วย
word_tokenize มี parameter ที่สำคัญคือ engine ซึ่งกำหนดวิธีการตัดคำที่ใช้ โดยมี engine ให้เลือกหลายแบบ เช่น:
- "newmm" (default): ใช้ Maximum Matching algorithm ซึ่งเป็น algorithm ที่นิยมใช้กันมากที่สุด
- "longest": ใช้ Longest Matching algorithm
- "deepcut": ใช้ Deep Learning model
ตัวอย่างการใช้งาน engine:
from pythainlp.tokenize import word_tokenize
text = "ประเทศไทยมีแหล่งท่องเที่ยวมากมาย"
tokens_newmm = word_tokenize(text, engine="newmm")
tokens_longest = word_tokenize(text, engine="longest")
tokens_deepcut = word_tokenize(text, engine="deepcut")
print("newmm:", tokens_newmm)
print("longest:", tokens_longest)
print("deepcut:", tokens_deepcut)
ผลลัพธ์ที่ได้:
newmm: ['ประเทศ', 'ไทย', 'มี', 'แหล่ง', 'ท่อง', 'เที่ยว', 'มาก', 'มาย']
longest: ['ประเทศไทย', 'มี', 'แหล่งท่องเที่ยว', 'มากมาย']
deepcut: ['ประเทศ', 'ไทย', 'มี', 'แหล่ง', 'ท่อง', 'เที่ยว', 'มาก', 'มาย']
จะเห็นได้ว่าแต่ละ engine ให้ผลลัพธ์ที่แตกต่างกัน ขึ้นอยู่กับลักษณะของข้อความที่เราต้องการตัดคำ
กรณีใช้งานจริง:
สมมติว่าเราต้องการสร้าง Chatbot ที่สามารถค้นหาข้อมูลเกี่ยวกับสถานที่ท่องเที่ยวในประเทศไทย เราสามารถใช้ word_tokenize เพื่อตัดคำในคำถามของผู้ใช้ แล้วนำคำเหล่านั้นไปค้นหาในฐานข้อมูล:
from pythainlp.tokenize import word_tokenize
user_query = "อยากไปเที่ยวทะเลที่ภูเก็ต"
keywords = word_tokenize(user_query, engine="newmm")
print(keywords)
# สมมติว่าเรามีฐานข้อมูลสถานที่ท่องเที่ยว
# เราสามารถค้นหาข้อมูลโดยใช้ keywords ที่ได้จาก word_tokenize
# (ตัวอย่างนี้ไม่ได้แสดงโค้ดการค้นหาฐานข้อมูล)
ข้อผิดพลาดที่พบบ่อย:
- การตัดคำผิดพลาด: บางครั้ง
word_tokenizeอาจตัดคำผิดพลาด โดยเฉพาะอย่างยิ่งกับคำศัพท์ใหม่ หรือคำที่มีความหมายเฉพาะเจาะจง ลองเปลี่ยนengineหรือเพิ่ม custom dictionary เพื่อปรับปรุงความถูกต้องในการตัดคำ - การจัดการกับภาษาต่างประเทศ:
word_tokenizeถูกออกแบบมาสำหรับภาษาไทย หากมีภาษาต่างประเทศปะปนอยู่ อาจทำให้เกิดข้อผิดพลาดได้ ควร preprocess ข้อความเพื่อแยกภาษาต่างประเทศออกก่อนทำการตัดคำ
การถอดเสียงภาษาไทยด้วย PyThaiNLP
การถอดเสียง (Transliteration) คือกระบวนการแปลงตัวอักษรจากภาษาหนึ่งไปเป็นตัวอักษรในอีกภาษาหนึ่ง โดยยังคงรักษาเสียงเดิมไว้ให้มากที่สุด ในบริบทของภาษาไทย การถอดเสียงมักใช้เพื่อแปลงตัวอักษรไทยเป็นตัวอักษรโรมัน (Latin alphabet) เพื่อให้ผู้ที่ไม่ได้อ่านภาษาไทยสามารถอ่านออกเสียงได้
PyThaiNLP มีฟังก์ชัน romanize สำหรับการถอดเสียงภาษาไทย:
from pythainlp.transliterate import romanize
text = "สวัสดีประเทศไทย"
romanized_text = romanize(text)
print(romanized_text)
ผลลัพธ์ที่ได้:
sawatdi prathetthai
romanize มี parameter engine ซึ่งกำหนดวิธีการถอดเสียงที่ใช้ โดยมี engine ให้เลือกหลายแบบ เช่น:
- "royin" (default): ใช้ Royal Thai General System of Transcription (RTGS) ซึ่งเป็นมาตรฐานการถอดเสียงภาษาไทยที่ได้รับการยอมรับอย่างกว้างขวาง
- "thai2english": ใช้ algorithm ที่พัฒนาขึ้นโดย PyThaiNLP
ตัวอย่างการใช้งาน engine:
from pythainlp.transliterate import romanize
text = "กรุงเทพมหานคร"
romanized_text_royin = romanize(text, engine="royin")
romanized_text_thai2english = romanize(text, engine="thai2english")
print("royin:", romanized_text_royin)
print("thai2english:", romanized_text_thai2english)
ผลลัพธ์ที่ได้:
royin: Krung Thep Maha Nakhon
thai2english: Krungthepmahanakhon
กรณีใช้งานจริง:
สมมติว่าเราต้องการสร้าง Chatbot ที่สามารถช่วยนักท่องเที่ยวต่างชาติในการออกเสียงชื่อสถานที่ต่างๆ ในประเทศไทย เราสามารถใช้ romanize เพื่อแปลงชื่อสถานที่เหล่านั้นเป็นตัวอักษรโรมัน:
from pythainlp.transliterate import romanize
place_name = "วัดอรุณราชวรารามราชวรมหาวิหาร"
romanized_name = romanize(place_name, engine="royin")
print(romanized_name)
ข้อผิดพลาดที่พบบ่อย:
- การถอดเสียงไม่ถูกต้อง: บางครั้ง
romanizeอาจถอดเสียงไม่ถูกต้อง โดยเฉพาะอย่างยิ่งกับคำที่มีเสียงซับซ้อน หรือคำที่มีการออกเสียงแตกต่างกันในแต่ละภูมิภาค ลองเปลี่ยนengineหรือปรับปรุงการตั้งค่าของengineเพื่อให้ได้ผลลัพธ์ที่ถูกต้องมากขึ้น - การจัดการกับสัญลักษณ์พิเศษ:
romanizeอาจไม่สามารถจัดการกับสัญลักษณ์พิเศษบางประเภทได้ ควร preprocess ข้อความเพื่อลบสัญลักษณ์พิเศษที่ไม่จำเป็นออกก่อนทำการถอดเสียง
การใช้งานฟังก์ชันพื้นฐานอื่นๆ ของ PyThaiNLP
นอกจาก word_tokenize และ romanize แล้ว PyThaiNLP ยังมีฟังก์ชันพื้นฐานอื่นๆ อีกมากมายที่สามารถนำมาใช้ในการสร้าง Chatbot ได้ เช่น:
normalize: ปรับปรุงข้อความให้เป็นมาตรฐาน เช่น ลบ whitespace ที่เกินความจำเป็น เปลี่ยนตัวอักษรให้เป็นตัวพิมพ์เล็กremove_repeat_vowels: ลบสระที่ซ้ำกันเกินความจำเป็นspell: ตรวจสอบคำผิด และแนะนำคำที่ถูกต้อง
เราจะกล่าวถึงฟังก์ชันเหล่านี้ในรายละเอียดเพิ่มเติมในบทต่อๆ ไป เมื่อเราเริ่มสร้าง Chatbot ที่มีความซับซ้อนมากขึ้น
ในบทนี้ เราได้เรียนรู้วิธีการติดตั้งและใช้งาน PyThaiNLP ซึ่งเป็นไลบรารี Python ที่สำคัญสำหรับการประมวลผลภาษาไทย เราได้เรียนรู้เกี่ยวกับการตัดคำและการถอดเสียง ซึ่งเป็นขั้นตอนพื้นฐานที่จำเป็นสำหรับการสร้าง Chatbot ที่สามารถเข้าใจและตอบสนองต่อภาษาไทยได้อย่างมีประสิทธิภาพ ในบทต่อไป เราจะนำความรู้ที่ได้จากบทนี้ไปสร้าง Chatbot อย่างง่ายที่สามารถตอบคำถามทั่วไปเกี่ยวกับสภาพอากาศได้