ค้นหาข้อความภาษาจีนแบบเต็มใน ServBay: คู่มือการใช้งาน zhparser
zhparser
คือส่วนขยาย (Extension) อันทรงพลังสำหรับ PostgreSQL ซึ่งออกแบบมาเพื่อจัดการข้อความภาษาจีนอย่างมีประสิทธิภาพ โดยช่วยเพิ่มความแม่นยำในการตัดคำและค้นหาข้อความภาษาจีนในฐานข้อมูล PostgreSQL อย่างเต็มรูปแบบ เหมาะสำหรับแอปพลิเคชันที่ต้องการฟังก์ชันค้นหาข้อมูลภาษาจีนแบบสมบูรณ์ ใน ServBay สภาพแวดล้อมพัฒนาเว็บครบวงจรสำหรับเครื่องของคุณ มีการติดตั้ง zhparser
พร้อมใช้งาน รวมถึงรวม scws
(Simple Chinese Word Segmentation) เพื่อให้ zhparser
ใช้กับพจนานุกรมที่คุณกำหนดเองได้
บทความนี้จะอธิบายวิธีการติดตั้ง (เปิดใช้งาน) และตั้งค่า zhparser
ใน ServBay พร้อมสาธิตการใช้งานสำหรับการค้นหาข้อความภาษาจีน และการสร้าง ตลอดจนการนำพจนานุกรมกำหนดเองไปใช้ร่วมกับ scws
ที่รวมมาให้แล้วใน ServBay
1. ภาพรวม
สำหรับแอปพลิเคชันที่มีข้อความภาษาจีนเป็นจำนวนมาก เช่น ระบบจัดการเนื้อหา ฟอรัม หรืออีคอมเมิร์ซ การค้นหาข้อมูลอย่างแม่นยำและมีประสิทธิภาพจึงสำคัญ PostgreSQL มีฟีเจอร์ค้นหาข้อความแบบเต็มในตัว แต่มาตรฐานนี้ยังไม่รองรับภาษาจีนอย่างดีนัก เพราะภาษาจีนไม่ได้ใช้การเว้นวรรคเหมือนภาษาอื่น zhparser
เข้ามาแก้ปัญหานี้โดยเพิ่มกลไกการตัดคำภาษาจีน ช่วยให้ PostgreSQL เข้าใจขอบเขตของคำและค้นหาข้อความแบบเต็มในภาษาจีนได้ตรงจุด
ServBay ได้ติดตั้ง zhparser
ล่วงหน้าให้พร้อมใช้ คุณไม่ต้องจัดการติดตั้งหรือคอมไพล์เองให้ยุ่งยาก สามารถเริ่มต้นสร้างสภาพแวดล้อมที่รองรับการค้นหาภาษาจีนได้อย่างรวดเร็ว
2. ข้อกำหนดก่อนใช้งาน
ก่อนใช้ zhparser
กรุณาตรวจสอบให้แน่ใจว่า:
- คุณได้ติดตั้ง ServBay เรียบร้อยแล้ว
- ได้เปิดใช้งาน PostgreSQL ใน ServBay และกำลังทำงานอยู่ สามารถตรวจสอบและควบคุมสถานะของแพ็กเกจผ่านหน้า UI ของ ServBay ได้
3. การติดตั้ง (เปิดใช้งาน) ส่วนขยาย zhparser
ServBay ได้วางไฟล์โมดูล zhparser
ในตำแหน่งที่ PostgreSQL มองเห็นแล้ว คุณเพียงแค่รันคำสั่ง SQL ในฐานข้อมูลเป้าหมายเพื่อเปิดใช้งาน
เชื่อมต่อฐานข้อมูล PostgreSQL ของคุณ: เปิดเทอร์มินัล แล้วใช้คำสั่ง
psql
เพื่อเชื่อมต่อ PostgreSQL ที่รันผ่าน ServBay แทนที่servbay-demo
ด้วยชื่อผู้ใช้ฐานข้อมูลของคุณ และyour_database_name
ด้วยชื่อฐานข้อมูลที่จะเปิดใช้งานzhparser
bashpsql -U servbay-demo -d your_database_name
1หากจะเชื่อมต่อฐานข้อมูลเริ่มต้น (ชื่อมักเหมือนกับชื่อผู้ใช้) สามารถละเว้น
-d
สร้าง Extension
zhparser
: ที่หน้า psql ดำเนินการ SQL ดังนี้sqlCREATE EXTENSION zhparser;
1หากสำเร็จจะไม่มีข้อผิดพลาด หากแจ้งว่ามีอยู่แล้ว แปลว่าได้เปิดใช้งานมาก่อนหน้านี้
ตรวจสอบการติดตั้ง
zhparser
: ใช้คำสั่งข้างล่างนี้ดูรายการ Extension ที่ติดตั้งsql\dx
1ควรเห็นชื่อ
zhparser
และข้อมูลเวอร์ชันในรายการ
4. การตั้งค่า zhparser
เมื่อเปิดใช้งานเสร็จ ต้องตั้งค่าระบบค้นหาข้อความของ PostgreSQL ให้รู้จักการใช้ zhparser
สำหรับตัดคำภาษาจีน ซึ่งหลักๆ คือต้องสร้าง Text Search Configuration
สร้าง Text Search Configuration: กำหนดการแปลงข้อมูลจากเอกสารเป็น tsvector (สำหรับสร้างดัชนี) และจากข้อความค้นหาเป็น tsquery (สำหรับค้นหา) เราจะสร้างชื่อว่า
chinese
และระบุให้ใช้zhparser
เป็น PARSERsqlCREATE TEXT SEARCH CONFIGURATION chinese (PARSER = zhparser);
1เพิ่มการแมปกับพจนานุกรม: ต้องระบุด้วยว่ากลุ่ม token (ประเภทคำศัพท์ เช่น คำนาม n, กริยา v, คุณศัพท์ a ฯลฯ) จาก
zhparser
จะให้ใช้ dictionary ใด โดยที่นี่เราจะนำกลุ่มคำนาม/กริยา/คุณศัพท์/วลีอิสระ/คำแสดงอารมณ์/คำบอกจำนวน (n, v, a, i, e, l) ไปยัง dictionary ชื่อsimple
ซึ่งจะรับคำจาก zhparser ไปตรงๆ ไม่แปลงใดๆsqlALTER TEXT SEARCH CONFIGURATION chinese ADD MAPPING FOR n,v,a,i,e,l WITH simple; -- คุณสามารถเพิ่มหรือลดคำแท็กตามต้องการได้
1
2หมายเหตุ: แท็กคำของ
zhparser
อาจต่างจากมาตรฐาน NLP ทั่วไป เลือกใช้แท็กที่เหมาะสม
5. การใช้ zhparser เพื่อค้นหาข้อความแบบเต็ม
ตั้งค่าเรียบร้อยแล้ว สามารถเริ่มใช้ zhparser สำหรับค้นหาข้อความภาษาจีนเต็มรูปแบบ ตัวอย่างการใช้งานต่อไปนี้
5.1 สร้างตารางตัวอย่างและข้อมูล
สร้างตารางเก็บข้อความภาษาจีนและเพิ่มข้อมูลทดสอบ
สร้างตาราง:
sqlCREATE TABLE documents ( id SERIAL PRIMARY KEY, content TEXT );
1
2
3
4เพิ่มข้อมูลตัวอย่าง:
sqlINSERT INTO documents (content) VALUES ('我爱自然语言处理'), ('中文分词是文本处理的重要步骤'), ('zhparser 是一个很好的中文分词工具'), ('ServBay 让本地开发更便捷');
1
2
3
4
5
5.2 สร้างดัชนีสำหรับค้นหาข้อความ
เพื่อเพิ่มประสิทธิภาพ โดยเฉพาะกับข้อมูลชุดใหญ่ แนะนำให้สร้างดัชนีบนคอลัมน์ที่ใช้ค้นหาข้อความ สำหรับ tsvector นิยมใช้ GIN (Generalized Inverted Index) เป็นพิเศษ
สร้าง GIN Index: สร้างดัชนีบนคอลัมน์ content ด้วย
to_tsvector('chinese', content)
ซึ่งจะตัดคำโดยใช้ text search configuration ที่ตั้งไว้sqlCREATE INDEX idx_gin_content ON documents USING gin (to_tsvector('chinese', content));
1
5.3 สั่งค้นหาข้อความแบบเต็ม
ใช้ to_tsquery
แปลงคำค้นหา แล้วใช้ @@
เปรียบเทียบกับ tsvector
ค้นหาข้อมูล: ตัวอย่าง ค้นหาเอกสารที่มีทั้ง "中文" และ "分词"
sqlSELECT id, content, to_tsvector('chinese', content) AS content_tsvector -- (เลือกแสดงผลการตัดคำเพิ่มเติม) FROM documents WHERE to_tsvector('chinese', content) @@ to_tsquery('chinese', '中文 & 分词');
1
2
3
4
5
6คำสั่งจะคืนมาเฉพาะ id 2 และ 3 เพราะมีทั้งสองคำ
ตัวอย่างอื่น ๆ:
ค้นหา "ServBay":
sqlSELECT * FROM documents WHERE to_tsvector('chinese', content) @@ to_tsquery('chinese', 'ServBay');
1(ได้ id 4)
ค้นหา "自然语言处理":
sqlSELECT * FROM documents WHERE to_tsvector('chinese', content) @@ to_tsquery('chinese', '自然语言处理');
1(ได้ id 1 ทั้งนี้ขึ้นกับ pattern และพจนานุกรม ถ้ากำหนดไว้ใน custom dict ผลจะยิ่งแม่นยำขึ้น)
6. การสร้างพจนานุกรมกำหนดเองด้วย scws ที่มีใน ServBay
ServBay ได้ติดตั้ง scws
มากับระบบ คุณจึงสามารถสร้างไฟล์พจนานุกรมเองเพื่อให้ zhparser
ตัดคำแม่นยำขึ้น เหมาะกับคำศัพท์เฉพาะ หรือศัพท์ใหม่
6.1 สร้างไฟล์พจนานุกรมกำหนดเอง
สร้างหรือแก้ไขไฟล์พจนานุกรม: แนะนำให้เก็บไฟล์ไว้ที่
/Applications/ServBay/etc/scws/
ตั้งชื่อว่าcustom_dict.txt
(หรือชื่ออื่นที่คุณต้องการ)bash# สร้างหรือแก้ไข file ผ่าน terminal nano /Applications/ServBay/etc/scws/custom_dict.txt
1
2เติมคำศัพท์ลงไฟล์: ใส่ทีละบรรทัด เช่น
plaintext自然语言处理 中文分词 ServBay 本地开发环境
1
2
3
4บันทึกปิดไฟล์
6.2 ตั้งค่า zhparser ให้ใช้พจนานุกรมกำหนดเอง
แจ้ง zhparser
ให้ใช้ไฟล์พจนานุกรมที่สร้างไว้
ตั้งค่าพารามิเตอร์
zhparser.dict_path
: ภายใน session PostgreSQL ให้สั่งsqlSET zhparser.dict_path = '/Applications/ServBay/etc/scws/custom_dict.txt'; -- ตรวจสอบ path ให้ถูกต้องและ user PostgreSQL มีสิทธิ์อ่านไฟล์
1
2หมายเหตุ: การตั้งค่าแบบ
SET
นี้จะมีผลเฉพาะ session ปัจจุบัน หากต้องการใช้ทุกการเชื่อมต่อ ให้เพิ่มในไฟล์postgresql.conf
โดยระบุzhparser.dict_path = '/Applications/ServBay/etc/scws/custom_dict.txt'
แล้ว restart PostgreSQL (ทำผ่านหน้าโปรแกรม ServBay) สะดวกสำหรับการพัฒนาและทดสอบ ใช้แค่SET
ก็เพียงพอ
6.3 โหลดพจนานุกรมใหม่
หลังปรับพจนานุกรมต้อง reload ใหม่จึงจะมีผล
สั่ง reload:
sqlSELECT zhprs_reload_dict();
1คำสั่งนี้ทำให้
zhparser
ใช้พจนานุกรมล่าสุดทันที
7. การปรับโหมดการตัดคำ
zhparser
รองรับหลายโหมดส่งผลกับระดับความละเอียดในการตัดคำ ตัวควบคุมที่นิยมใช้คือ zhparser.seg_with_duality
7.1 ตั้งค่าโหมดตัดคำ
- กำหนดค่าพารามิเตอร์
zhparser.seg_with_duality
:- ตั้งเป็น
true
: เปิดโหมด "ตัดคำคู่" จะได้คำย่อยมากขึ้น เหมาะกับ keyword ค้นหาที่หลากหลาย ยกตัวอย่าง "自然语言处理" จะแตกเป็น "自然" "语言" "处理" "自然语言" "语言处理"sqlSET zhparser.seg_with_duality = true;
1 - ตั้งเป็น
false
: ตัดคำแบบยาวสุดจากพจนานุกรม เหมาะกับความแม่นยำสูง Ex. "自然语言处理" จะได้เป็น "自然语言处理" (หากอยู่ใน dictionary)sqlSET zhparser.seg_with_duality = false;
1
postgresql.conf
- ตั้งเป็น
8. คำถามที่พบบ่อย (FAQ)
- Q: สั่ง
CREATE EXTENSION zhparser;
แล้วแจ้งว่าไม่พบ Extension? A: ตรวจสอบว่า PostgreSQL ใน ServBay ติดตั้งสมบูรณ์ดีหรือไม่ ServBay ได้วางไฟล์ library ของzhparser
ไว้ที่ถูกต้องแล้ว หากยังไม่สำเร็จ กรุณาตรวจสอบการติดตั้งของ ServBay/PostgreSQL หรือ restart ServBay แล้วลองใหม่ - Q: พจนานุกรมที่เพิ่มเองไม่ถูกใช้งาน? A: ตรวจสอบดังนี้
zhparser.dict_path
ได้ชี้ถูกทางแล้ว (/Applications/ServBay/etc/scws/custom_dict.txt
) และตัวพาธตรงตามตัวเล็ก-ใหญ่- หลังตั้ง
zhparser.dict_path
แล้ว สั่งSELECT zhprs_reload_dict();
หรือยัง? - รูปแบบไฟล์พจนานุกรมถูกต้องไหม (หนึ่งบรรทัดต่อหนึ่งคำ)
- หากใช้ session ใหม่ ต้องตั้ง
SET zhparser.dict_path = ...;
ใหม่ หรือถ้าเป็นค่า global แล้ว restart PostgreSQL แล้วหรือยัง - user PostgreSQL มีสิทธิ์อ่านไฟล์นี้หรือไม่
- Q: ผลค้นหาไม่ตรงใจ? A: ตรวจสอบว่า Text Search Configuration (chinese) map คำแท็กถูกต้องหรือไม่ ทดลองเปลี่ยนโหมดตัดคำโดย
zhparser.seg_with_duality
ดูผลลัพธ์ผ่านSELECT to_tsvector('chinese', 'ข้อความภาษาจีนของคุณ');
จะช่วย debug ได้อีกทาง ทบทวน query (คำ keyword และ operator เช่น&
,|
,!
) ด้วย - Q: ค้นหาได้ช้า? A: ให้แน่ใจว่ามี GIN Index บน
to_tsvector(...)
ที่ใช้ค้นหา ถ้ามีข้อมูลจำนวนมาก อาจต้องปรับแต่ง PostgreSQL หรือมองหา index แบบขั้นสูงอื่นเสริม
9. สรุป
การใช้ zhparser
บน PostgreSQL ผ่าน ServBay เพื่อค้นหาข้อความภาษาจีนแบบเต็มเป็นเรื่องง่าย สามารถเปิดใช้งาน Extension สร้าง Text Search Configuration ตลอดจนปรับพจนานุกรมแบบ custom ผ่าน scws ที่รวมมาได้อย่างรวดเร็ว หากเข้าใจการตั้งค่าและใช้งาน zhparser อย่างถูกต้อง จะช่วยเพิ่มศักยภาพงานพัฒนาทุกโครงการที่มีข้อมูลภาษาจีนให้เชี่ยวชาญยิ่งขึ้น และเป็นรากฐานสำคัญสำหรับการสร้างแอปพลิเคชันภาษาจีนฟีเจอร์ครบถ้วน