ข้ามไปยังเนื้อหาหลัก
คู่มือระบบ เนื้อหาผ่านการตรวจสอบแล้ว

ติดตั้งและใช้งาน PyThaiNLP: ไลบรารี Python สำหรับภาษาไทย

บทความนี้แนะนำการติดตั้งและใช้งานไลบรารี PyThaiNLP ซึ่งเป็นเครื่องมือสำคัญสำหรับการประมวลผลภาษาไทยใน Python โดยเน้นที่ฟังก์ชันการตัดคำ (word_tokenize) ด้วย engi...

ติดตั้งและใช้งาน 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 อย่างง่ายที่สามารถตอบคำถามทั่วไปเกี่ยวกับสภาพอากาศได้

Office.in.th Custom Service

ต้องการพัฒนาระบบหรือปรับแต่งจากโครงสร้างนี้?

Office.in.th รับพัฒนาและออกแบบ Enterprise Web Application, API Integration และระบบบริหารงานภาครัฐ/เอกชน พร้อมการสนับสนุนระยะยาว

ดูบริการรับพัฒนาซอฟต์แวร์