ปลั๊กอินการแบ่งส่วนคำภาษาจีนแบบยืดหยุ่น
กลุ่มการสื่อสาร QQ: 743457803
โปรดดูที่นี่ สำหรับวิธีพัฒนาปลั๊กอินการแบ่งส่วนคำ ES
อ้างอิงถึง IK และ HanLP เป็นหลัก
รองรับ อักขระจีนที่ซับซ้อน ตัวอักษร จีนบางตัว มีความยาวไม่เท่ากับ 1 ในภาษา Java เช่น ?
แต่ IK
และตัวอื่นๆ ไม่รองรับ
รองรับการแบ่งส่วนคำ คำเดียว และการค้นหา แต่ไม่รองรับโหมด ik_max_word
รองรับ การแบ่งส่วนคำตามความยาวที่กำหนดเอง เหมาะสำหรับการระบุชื่อบุคคลในข้อความสั้น
ความยาวข้อความตัวอักษรจีน
<=autoWordLength
คั่นด้วยช่องว่าง เครื่องหมายวรรคตอน ตัวอักษร ตัวเลข ฯลฯ จะถูกจดจำเป็นคำโดยอัตโนมัติ
รองรับการค้นหาอีโมจิ
เมื่อเทียบกับ IK มันฉลาดกว่าและแม่นยำกว่า IK
ik_max_word
แจกแจงคำที่เป็นไปได้ทั้งหมดอย่างละเอียด ส่งผลให้พบการค้นหาที่ไม่เกี่ยวข้องบางส่วน任性冲动过
กลาย任性性冲动动过
ดังนั้นการค้นหา "性冲动
จะเป็นการค้นหาเอกสารนี้南京市长江大桥
ผลลัพธ์คือ南京市市长长江大桥
จากนั้นการค้นหา市长
จะค้นหาเอกสารนี้ แต่ตัวแบ่งคำ hao จะไม่คำนวณเส้นทางที่สั้นที่สุดผ่านความถี่ของคำ และระบุวลีที่มีความน่าจะเป็นสูงสุด คุณยังสามารถปรับความถี่ของคำได้ตามต้องการตามฉากของคุณเองผลลัพธ์การแบ่งส่วนคำของ ik_smart ไม่ใช่ชุดย่อยของ ik_max_word และผลลัพธ์การแบ่งส่วนคำของ hao_search_mode เป็นส่วนหนึ่งของผลลัพธ์การแบ่งส่วนคำของ hao_index_mode
เมื่อเปรียบเทียบกับ HanLp มันมีน้ำหนักเบากว่าและ สามารถควบคุมการแบ่งส่วนคำได้ดีกว่า ไม่มีฟังก์ชันการทำนายอัจฉริยะบางอย่าง เช่น ชื่อ ซึ่งอาจนำไปสู่การแบ่งส่วนคำที่ไม่เสถียรและไม่ถูกต้อง มีผลการทำนายที่แตกต่างกันสำหรับข้อความยาวและสั้น และผลการแบ่งส่วนคำที่คาดการณ์ก็แตกต่างกันเช่นกัน และ HanLP ไม่มีปลั๊กอิน ES อย่างเป็นทางการ
คำนวณเส้นทางที่สั้นที่สุดตามความถี่ txt
คำและระบุคำที่เป็นไปได้แทนคำทั้งหมด หากคำที่แจกแจงผิด คุณสามารถปรับความถี่ของคำเพื่อแก้ไขให้ ถูกต้องได้
รองรับคำเมตา เช่น俄罗斯
จะไม่ถูกแบ่งออกเป็น俄
และ罗斯
อีกต่อไป (罗斯
เป็นชื่อบุคคลทั่วไป) วิธีนี้罗斯
จะไม่เรียกคืนเอกสารที่เกี่ยวข้องกับ俄罗斯
แต่ไม่รองรับส่วนหนึ่งของคำพูด
จัดให้มีตัววิเคราะห์: hao_search_mode
, hao_index_mode
Tokenizer: hao_search_mode
, hao_index_mode
แท็กคอมไพล์ | รุ่นอีเอส |
---|---|
ผู้เชี่ยวชาญ | ES เวอร์ชันเสถียรล่าสุด |
เวอร์ชัน 7.17.1 | 7.17.1 |
vX.YZ | เอ็กซ์วายซี |
วิธีที่ 1. bin/elasticsearch-plugin install file:///Users/xiaoming/Download/analysis-hao.zip
วิธีที่ 2 หลังจากคลายการบีบอัด ให้วางไว้ในไดเร็กทอรี es Plugins ตรวจสอบให้แน่ใจว่าเป็นโครงสร้างไดเร็กทอรีต่อไปนี้ {ES_HOME}/plugins/analysis-hao/(各种jar等文件)
ในเวลาเดียวกัน ไดเร็กทอรีไม่สามารถมี zip ได้ ไฟล์.
ในที่สุดก็รีสตาร์ท ES
หากไม่มีเวอร์ชัน ES ที่คุณต้องการ คุณจะต้องแก้ไขบางส่วน:
pom.xml
-> elasticsearch.version
เป็นเวอร์ชันที่เกี่ยวข้องHaoTokenizerFactory.java
สุดท้าย รัน mvn clean package -Dmaven.test.skip=true
เพื่อรับแพ็คเกจการติดตั้ง zip
ของปลั๊กอินต่อไปนี้เป็นรายการการกำหนดค่าที่มีให้สำหรับตัวแบ่งส่วนคำที่กำหนดเอง:
พารามิเตอร์รายการการกำหนดค่า | การทำงาน | ค่าเริ่มต้น |
---|---|---|
enableIndexMode | ไม่ว่าจะใช้โหมดดัชนี โหมดดัชนีจะมีความละเอียดหรือไม่ | hao_search_mode เป็น false , hao_index_mode เป็น true รายละเอียดที่ละเอียดเหมาะสำหรับการสืบค้นคำ และรายละเอียดหยาบเหมาะสำหรับการสืบค้นแบบวลี |
enableFallBack | หากมีการรายงานข้อผิดพลาดในการแบ่งส่วนคำ ไม่ว่าจะเริ่มการแบ่งส่วนคำที่ละเอียดที่สุดหรือไม่ นั่นก็คือ การแบ่งส่วนตามตัวอักษร ขอแนะนำให้ใช้ search_mode เพื่อไม่ให้กระทบต่อการค้นหาของผู้ใช้ index_mode ไม่ได้เริ่มทำงานเพื่อให้สามารถรายงานการแจ้งเตือนข้อผิดพลาดได้ทันเวลา | false ไม่เริ่มดาวน์เกรด |
enableFailDingMsg | ไม่ว่าจะเริ่มการแจ้งเตือน DingTalk เกี่ยวกับความล้มเหลว ที่อยู่การแจ้งเตือนคือฟิลด์ dingWebHookUrl ของ HttpAnalyzer.cfg.xml | false |
enableSingleWord | ไม่ว่าจะใช้คำที่ส่งคืนแบบละเอียดหรือไม่ ตัวอย่างเช่น体力值 คำว่าผลการแบ่งส่วนจะเก็บเฉพาะ体力值 体力 เท่านั้น แต่จะไม่ได้值 | false |
autoWordLength | ข้อความตัวอักษรจีนที่คั่นด้วยช่องว่าง เครื่องหมายวรรคตอน ตัวอักษร ตัวเลข ฯลฯ ซึ่งมีความยาวน้อยกว่า autoWordLength จะถูกรับรู้เป็นหนึ่งคำโดยอัตโนมัติ ไม่ได้เปิดใช้งานค่าเริ่มต้น -1 >=2 ถือว่าเปิดใช้งาน | -1 |
hao_index_mode
คำจะถูกแบ่งซ้ำตามเงื่อนไขและน้ำหนักของคำศัพท์จนกว่าคำจะแยกออกไม่ได้ หากตั้งค่า enableSingleWord=true
ไว้ ระบบจะแบ่งออกเป็นคำเดียว
ตัวอย่างเช่น ข้อความนี้南京市长江大桥
南京市长江大桥
==>南京市
长江大桥
南京市
==>南京
,市
,长江大桥
==>长江
,大桥
enableSingleWord=false
การเรียกซ้ำจะหยุดและส่วนของคำที่ได้รับคือ南京市
,南京
,市
,长江大桥
,长江
,大桥
enableSingleWord=true
ให้ทำการเรียกซ้ำต่อไปจนกระทั่งตำแหน่งคำเดียว และรับการแบ่งส่วนคำเป็น南京市
,南京
,南
,京
,市
,长江大桥
,长江
,长
江
,大桥
,大
桥
hao_search_mode
ในโหมดนี้จะเทียบเท่ากับโหมด hao_index_mode
ซ้ำเพียงครั้งเดียวเท่านั้น ผลการแบ่งส่วนคำคือ南京市
长江大桥
เนื่องจาก enableIndexMode=false
ในโหมดนี้ หากเปลี่ยนเป็น true
จะมีผลเช่นเดียวกับ hao_index_mode
พารามิเตอร์ | การทำงาน | หมายเหตุ |
---|---|---|
baseDictionary | ชื่อไฟล์พจนานุกรมพื้นฐาน | วางไว้ในไดเร็กทอรี config ปลั๊กอินหรือไดเร็กทอรี es config โดยไม่ต้องเปลี่ยนแปลง |
customerDictionaryFile | ไฟล์พจนานุกรมระยะไกลที่ผู้ใช้กำหนด หลายไฟล์คั่นด้วยเครื่องหมายอัฒภาคภาษาอังกฤษ | มันจะถูกจัดเก็บไว้ในไดเร็กทอรี config ปลั๊กอินหรือไดเร็กทอรี es config |
remoteFreqDict | ไฟล์คำศัพท์ที่ผู้ใช้กำหนดระยะไกล | การอัปเดตที่แสนสะดวก การอัปเดตที่ร้อนแรงจะได้รับการอัปเดตเป็นประจำผ่านพารามิเตอร์สองตัวต่อไปนี้ |
syncDicTime | เวลาซิงโครไนซ์ครั้งถัดไปของพจนานุกรมระยะไกล hh:mm:ss | ปล่อยว่างไว้และใช้ syncDicPeriodTime เป็นเวลาการซิงโครไนซ์ครั้งถัดไป |
syncDicPeriodTime | ช่วงเวลาการซิงโครไนซ์พจนานุกรมระยะไกล วินาที ค่าต่ำสุด 30 | ตัวอย่างเช่น syncDicTime=20:00:00,syncDicPeriodTime=86400 จะซิงโครไนซ์เวลา 20 นาฬิกาทุกวัน |
dingWebHookUrl | URL หุ่นยนต์ DingTalk | ใช้สำหรับข้อยกเว้นในการแบ่งส่วนคำและการแจ้งเตือนข้อยกเว้น/ความสำเร็จในการซิงโครไนซ์พจนานุกรม |
dingMsgContent | การเขียนคำโฆษณาการแจ้งเตือนของหุ่นยนต์ | โปรดทราบว่าเมื่อกำหนดค่าหุ่นยนต์ DingTalk คำสำคัญจะต้องตรงกับสำเนานี้ ไม่เช่นนั้นจะไม่สามารถส่งข้อความได้ |
ระบบจะอ่านไดเรกทอรี
{ES_HOME}/config/analysis-hao/
ก่อน และไฟล์ในไดเรกทอรี{ES_HOME}/plugins/analysis-hao/config
จะไม่ถูกอ่าน
base_dictionary.txt
คั่นด้วยเครื่องหมายจุลภาค และตัวเลขต่อไปนี้แสดงถึงความถี่ของคำ ตัวอย่างเช่น: ผลการแบ่งส่วนคำของ奋发图强
คือ奋
,发图
,强
เนื่องจากความถี่ของคำของคำว่า发图
สูงเกินไป (เนื่องจากมีจำนวนคำเกิดขึ้นสูง) คุณจึงสามารถลดความถี่ของคำและแก้ไข base_dictionary.txt
ด้วยตนเองได้ ไฟล์ . base_dictionary.txt
customerDictionaryFile
ปัจจุบันจะถูกเขียนทับโดยอัตโนมัติ รูปแบบไฟล์ของพจนานุกรม ระยะไกล คือ {词},{词频},{是否元词}
เช่น俄罗斯,1000,1
คำอธิบายว่าเป็น meta-word หรือไม่: 1
หมายถึงเป็น meta-word และจะไม่ถูกแยกออกไปอีก俄罗斯
จะไม่ถูกแบ่งออกเป็น俄
และ罗斯
(Russ เป็นชื่อสามัญ) ด้วยวิธีนี้罗斯
จะไม่เรียกคืนเอกสารที่เกี่ยวข้องกับ俄罗斯
0
หมายความว่าคุณสามารถทำลายมันต่อไปได้ เช่น奋发图强
ดัชนีการสร้าง:
PUT test/
{
"settings": {
"index": {
"analysis": {
"analyzer": {
"search_analyzer": {
"filter": [
"lowercase"
],
"char_filter": [
"html_strip"
],
"type": "custom",
"tokenizer": "my_search_token"
},
"index_analyzer": {
"filter": [
"lowercase"
],
"char_filter": [
"html_strip"
],
"type": "custom",
"tokenizer": "my_index_token"
}
},
"tokenizer": {
"my_index_token": {
"enableFailDingMsg": "true",
"type": "hao_index_mode",
"enableSingleWord": "true",
"enableFallBack": "true",
"autoWordLength": 3
},
"my_search_token": {
"enableFailDingMsg": "true",
"type": "hao_search_mode",
"enableSingleWord": "true",
"enableFallBack": "true",
"autoWordLength": 3
}
}
},
"number_of_replicas": "0"
}
},
"mappings": {
"properties": {
"title": {
"type": "text",
"index_options": "offsets",
"analyzer": "index_analyzer",
"search_analyzer": "search_analyzer"
}
}
}
}
ทดสอบการแบ่งส่วนคำ
test/_analyze
{
"analyzer": "index_analyzer",
"text": "徐庆年 奋发图强打篮球有利于提高人民生活,有的放矢,中华人民共和国家庭宣传委员会宣。?"
}
test/_analyze
{
"analyzer": "search_analyzer",
"text": "徐庆年 奋发图强打篮球有利于提高人民生活,有的放矢,中华人民共和国家庭宣传委员会宣。?"
}
徐庆年
ไม่ได้อยู่ในคำศัพท์ แต่ได้รับการยอมรับว่าเป็นคำผ่าน autoWordLength