ตัวแยกวิเคราะห์การค้นหาข้อความ PostgreSQL โดยใช้การวิเคราะห์ขอบเขต ICU
ขั้นตอนแรกของการค้นหาข้อความแบบเต็มคือการแยกวิเคราะห์ - การทำลายเอกสารและข้อความค้นหาเป็นโทเค็นแต่ละตัว (คำที่แตกต่างตัวเลข ฯลฯ ) อย่างไรก็ตามมีภาษาที่งานนี้ไม่ได้เป็นเรื่องเล็กน้อย ตัวอย่างที่โดดเด่นที่สุดคือภาษาเอเชียตะวันออก (เช่นจีนญี่ปุ่นเกาหลีและอื่น ๆ ) - โดยทั่วไปแล้วคำพูดจะไม่คั่นด้วยช่องว่างและเครื่องหมายวรรคตอน อีกตัวอย่างหนึ่งคือภาษาฮิบรู; ในขณะที่คำถูกคั่นด้วยเครื่องหมายวรรคตอนตัวละครบางตัวอาจถูกพิจารณาว่าเป็นเครื่องหมายวรรคตอนหรือไม่ขึ้นอยู่กับบริบท
ตัวแยกวิเคราะห์เริ่มต้นที่มาพร้อมกับระบบย่อยการค้นหาข้อความแบบเต็มของ PostgreSQL ให้ผลลัพธ์ที่ไม่น่าพอใจในกรณีเหล่านั้น pg_icu_parser เป็นส่วนขยายที่ให้การใช้งานตัวแยกวิเคราะห์การค้นหาข้อความแบบเต็มรูปแบบที่กำหนดเองซึ่งใช้รูทีนการวิเคราะห์ขอบเขตคำ ICU เพื่อแยกโทเค็นออกจากข้อความต้นฉบับ สิ่งเหล่านี้ใช้อัลกอริทึมที่ระบุในภาคผนวก 29 ของมาตรฐาน Unicode และสามารถให้ผลลัพธ์ที่สมเหตุสมผลในหลายภาษา
ปัจจุบัน pg_icu_parser จะต้องสร้างจากซอร์สโค้ด ตรวจสอบให้แน่ใจว่าคุณมีไฟล์สนับสนุนการพัฒนา (ส่วนหัว ฯลฯ ) สำหรับ PostgreSQL
เพื่อสร้างและติดตั้งเรียกใช้:
$ make install
สิ่งนี้จะสร้างและติดตั้งลงในการติดตั้ง PostgreSQL ที่กำหนดโดยอินสแตนซ์แรกของ pg_config ที่พบในเส้นทางปัจจุบัน เพื่อกำหนดเป้าหมายการติดตั้งเฉพาะ (หรือไม่อยู่ในเส้นทาง):
$ make install PG_CONFIG=/path/to/pg_config
ส่วนขยายยังมีอยู่ใน PGXN
ในการโหลดส่วนขยายลงในฐานข้อมูลให้ดำเนินการคำสั่ง SQL ต่อไปนี้ในฐานะผู้ใช้ที่มีสิทธิ์ที่เหมาะสม:
CREATE EXTENSION pg_icu_parser;สิ่งนี้จะลงทะเบียนตัวแยกวิเคราะห์ข้อความที่กำหนดเองในสคีมาปัจจุบัน ในการใช้ประโยชน์จากการกำหนดค่าการค้นหาข้อความจะต้องสร้างขึ้นตามที่อธิบายไว้ในคู่มือ PostgreSQL ตัวอย่างเช่น:
CREATE TEXT SEARCH CONFIGURATION sample (parser = icu_parser);
ALTER TEXT SEARCH CONFIGURATION sample ADD MAPPING FOR word WITH english_stem;
ALTER TEXT SEARCH CONFIGURATION sample ADD MAPPING FOR number , ideo, kana WITH simple; ประเภทโทเค็นที่สามารถปล่อยออกมาได้โดย parser คือ word , number , kana , ideo และ blank - เหล่านี้สอดคล้องกับแท็ก break word ที่รองรับโดย ICU ไม่มีข้อ จำกัด เกี่ยวกับพจนานุกรมที่สามารถใช้
pg_icu_parser เปิดเผยพารามิเตอร์การกำหนดค่าเดียว:
pg_icu_parser.locale - สตริงเป็นทางเลือก สถานที่ ICU ที่จะใช้กับรูทีนการวิเคราะห์ขอบเขต หากไม่ได้ตั้งค่าค่าเริ่ม en เป็น en โดยทั่วไปไม่จำเป็นต้องตั้งค่าพารามิเตอร์นี้เนื่องจากไม่มีกฎการตรวจจับขอบเขตคำซึ่งมีความอ่อนไหวต่อสถานที่ ตามที่อธิบายไว้ข้างต้นความแข็งแกร่งหลักของ pg_icu_parser เมื่อเทียบกับตัวแยกวิเคราะห์ default ที่สร้างขึ้นใน PostgreSQL นั้นเป็นผลลัพธ์ที่ดีกว่า Tokenization ในภาษาต่างๆ นอกจากนี้ pg_icu_parser ไม่ได้ขึ้นอยู่กับการตั้งค่าตำแหน่งของฐานข้อมูลหรือระบบปฏิบัติการพื้นฐานสำหรับการพิจารณาว่าตัวอักษรคืออะไร
อย่างไรก็ตามมีการแลกเปลี่ยนหลายอย่างที่จะต้องตระหนักถึงการตัดสินใจว่า pg_icu_parser นั้นเหมาะสมสำหรับกรณีการใช้งานเฉพาะ:
ตัวแยกวิเคราะห์เริ่มต้นสามารถรับรู้รูปแบบที่หลากหลายเป็นโทเค็นรวมถึง URL ที่อยู่อีเมลค่าตัวเลขหลายชนิดที่แตกต่างกัน ฯลฯ pg_icu_parser ในทางกลับกันมีโทเค็นน้อยลงอย่างมีนัยสำคัญ
ในขณะนี้ pg_icu_parser ไม่ รองรับฟังก์ชั่น ts_headline อาจจะในอนาคต ...
pg_icu_parser ช้ากว่าตัวแยก default เริ่มต้นมาก อย่างไรก็ตามหากการเข้ารหัสเซิร์ฟเวอร์ของฐานข้อมูลเป็น UTF-8 จะใช้เส้นทางที่รวดเร็วซึ่งจะช่วยลดค่าใช้จ่าย ดูส่วนเกณฑ์มาตรฐานด้านล่าง
ในฐานะที่เป็นส่วนขยายของบุคคลที่สาม pg_icu_parser สามารถใช้งานได้เฉพาะเมื่อมีการควบคุมการติดตั้ง PostgreSQL อย่างเต็มรูปแบบเท่านั้น นั่นคือมันอาจไม่สามารถใช้กับโซลูชัน PostgreSQL ที่ได้รับการจัดการ
เกณฑ์มาตรฐานที่ไม่ใช่วิทยาศาสตร์ต่อไปนี้สามารถให้ความรู้สึกว่าการชะลอตัวของคนที่คาดหวังจากการใช้ pg_icu_parser แทนที่จะเป็นตัวแยกวิเคราะห์เริ่มต้น สถานการณ์ที่ทดสอบเป็นแบบสอบถามที่จะนับจำนวนโทเค็นที่ไม่ได้มีการปิดกั้นในแต่ละเอกสารในคลังข้อมูล คลังข้อมูลที่ใช้คือ Haaretz Corpus ประกอบด้วยบทความภาษาฮีบรูสั้น 27,139 บทความ ค่าเป็นเวลาดำเนินการเฉลี่ยในมิลลิวินาที 10 รอบตามที่รายงานโดย EXPLAIN ANALYZE :
| การเข้ารหัสเซิร์ฟเวอร์ | default | pg_icu_parser | การชะลอตัว |
|---|---|---|---|
| UTF-8 | 2,566.9974 | 2,884.3696 | -12.3% |
| ISO-8859-8 | 3,529.6487 | 5,059.3616 | -43.3% |
แน่นอนสภาพแวดล้อมที่แตกต่างกันและ corpora ที่แตกต่างกันอาจมีผลลัพธ์ที่แตกต่างกัน ymmv
pg_icu_parser ได้รับใบอนุญาตภายใต้ใบอนุญาตสาธารณะ Mozilla 2.0