Plug-in segmentasi kata Cina elasticsearch.
Grup komunikasi QQ: 743457803
Silakan lihat di sini untuk mengetahui cara mengembangkan plug-in segmentasi kata ES.
Terutama mengacu pada IK dan HanLP
Mendukung karakter Cina yang kompleks . Beberapa karakter Cina tidak memiliki panjang 1 di Java, seperti ?
, tetapi IK
dan lainnya tidak mendukungnya.
Segmentasi dan pencarian kata satu kata didukung, tetapi mode ik_max_word
tidak didukung.
Mendukung segmentasi kata dengan panjang khusus , cocok untuk mengidentifikasi nama orang dalam teks pendek.
Panjang teks karakter Cina
<=autoWordLength
yang dipisahkan spasi, tanda baca, huruf, angka, dll. akan otomatis dikenali sebagai sebuah kata.
Mendukung pencarian emoji
Dibandingkan dengan IK, ini lebih pintar dan akurat daripada IK.
ik_max_word
secara mendalam menyebutkan semua kemungkinan kata, sehingga ditemukan beberapa pencarian yang tidak relevan.任性冲动过
ternyata任性性冲动动过
, jadi mencari "性冲动
akan mencari dokumen ini.南京市长江大桥
, hasilnya adalah南京市市长长江大桥
, lalu penelusuran市长
akan mencari dokumen ini, tetapi segmenter kata hao tidak akan menghitung jalur terpendek melalui frekuensi kata dan mengidentifikasi frasa dengan probabilitas tertinggi. Anda juga dapat mengatur frekuensi kata sesuka hati sesuai dengan adegan Anda sendiri.Hasil segmentasi kata ik_smart bukan merupakan subset dari ik_max_word, dan hasil segmentasi kata hao_search_mode merupakan subset dari hasil segmentasi kata hao_index_mode
Dibandingkan dengan HanLp, bobotnya lebih ringan dan lebih mudah dikontrol dalam segmentasi kata . Ia tidak memiliki beberapa fungsi prediksi cerdas seperti nama, yang dapat menyebabkan segmentasi kata tidak stabil dan tidak akurat. Pembelajaran mesin memiliki hasil prediksi yang berbeda untuk teks panjang dan pendek. dan hasil prediksi segmentasi kata juga berbeda. Dan HanLP tidak memiliki plug-in ES resmi.
Hitung jalur terpendek berdasarkan frekuensi kata dan enumerasi kemungkinan kata, bukan semua kata. Jika kata yang disebutkan salah, Anda dapat menyesuaikan frekuensi kata untuk memperbaikinya. File frekuensi kata adalah file txt
dengan keterbacaan yang lebih baik .
Kata-kata meta didukung, misalnya,俄罗斯
tidak lagi dipecah menjadi俄
dan罗斯
(罗斯
adalah nama pribadi yang umum). Dengan cara ini罗斯
tidak akan mengingat dokumen yang berhubungan dengan俄罗斯
Tapi bagian dari pidato tidak didukung
Menyediakan Penganalisis: hao_search_mode
, hao_index_mode
Tokenizer: hao_search_mode
, hao_index_mode
tag Git | versi ES |
---|---|
menguasai | ES versi stabil terbaru |
v7.17.1 | 7.17.1 |
vX.YZ | XYZ |
Metode 1. bin/elasticsearch-plugin install file:///Users/xiaoming/Download/analysis-hao.zip
Metode 2. Setelah dekompresi, letakkan di direktori es plugins. Pastikan struktur direktori berikut {ES_HOME}/plugins/analysis-hao/(各种jar等文件)
file.
Akhirnya restart ES
Jika tidak ada versi ES yang sesuai yang Anda perlukan, Anda perlu memodifikasi beberapa tempat:
pom.xml
-> elasticsearch.version
ke versi yang sesuai.HaoTokenizerFactory.java
. Terakhir, jalankan mvn clean package -Dmaven.test.skip=true
untuk mendapatkan paket instalasi zip
dari plugin tersebut.Berikut ini adalah item konfigurasi yang tersedia untuk segmenter kata khusus:
Parameter item konfigurasi | Fungsi | nilai bawaan |
---|---|---|
enableIndexMode | Apakah akan menggunakan mode indeks, mode indeks sangat detail. | hao_search_mode adalah false , hao_index_mode adalah true , granularitas halus cocok untuk Term Query, dan granularitas kasar cocok untuk kueri Frase |
enableFallBack | Jika kesalahan dilaporkan dalam segmentasi kata, apakah akan memulai segmentasi kata yang paling detail, yaitu segmentasi berdasarkan karakter. Disarankan untuk menggunakan search_mode agar tidak mempengaruhi pencarian pengguna. index_mode tidak dimulai sehingga pemberitahuan alarm kesalahan dapat dilaporkan tepat waktu. | false tidak memulai penurunan versi |
enableFailDingMsg | Apakah akan memulai pemberitahuan kegagalan DingTalk, alamat pemberitahuannya adalah bidang dingWebHookUrl dari HttpAnalyzer.cfg.xml . | false |
enableSingleWord | Apakah akan menggunakan kata-kata kembalian yang berbutir halus. Misalnya体力值 , hasil segmentasi kata hanya menyimpan体力值 ,体力 , tetapi tidak值 | false |
autoWordLength | Teks karakter Cina yang dipisahkan spasi, tanda baca, huruf, angka, dll. yang panjangnya kurang dari autoWordLength akan otomatis dikenali sebagai satu kata. Default -1 tidak diaktifkan, >=2 dianggap diaktifkan | -1 |
hao_index_mode
Kata-kata akan disegmentasi secara rekursif berdasarkan istilah dan bobot kosa kata hingga kata tersebut tidak dapat dipisahkan. Jika enableSingleWord=true
disetel, maka akan dibagi menjadi satu kata.
Misalnya, teks ini南京市长江大桥
南京市长江大桥
==>南京市
,长江大桥
南京市
==>南京
,市
,长江大桥
==>长江
,大桥
enableSingleWord=false
, perhentian rekursi dan segmen kata yang diperoleh adalah南京市
,南京
,市
,长江大桥
,长江
,大桥
enableSingleWord=true
, lanjutkan rekursi hingga posisi kata tunggal, dan dapatkan segmentasi kata sebagai南京市
,南京
,南
,京
,市
,长江大桥
长江
,江
长
,大桥
,桥
大
hao_search_mode
Dalam mode ini, ini setara dengan mode hao_index_mode
secara rekursif hanya sekali. Hasil segmentasi kata adalah南京市
,长江大桥
. Karena enableIndexMode=false
pada mode ini, jika diubah menjadi true
, efeknya akan sama dengan hao_index_mode
.
parameter | Fungsi | Komentar |
---|---|---|
baseDictionary | Nama file kamus dasar | Tempatkan di direktori plug-in config atau direktori es config tanpa mengubahnya. |
customerDictionaryFile | File leksikon jarak jauh yang ditentukan pengguna, beberapa file dipisahkan dengan titik koma bahasa Inggris; | Itu akan disimpan di direktori config plug-in atau direktori es config . |
remoteFreqDict | File kosakata jarak jauh yang ditentukan pengguna | Pembaruan panas yang nyaman, pembaruan panas diperbarui secara berkala melalui dua parameter berikut. |
syncDicTime | Waktu sinkronisasi berikutnya dari kamus jarak jauh hh:mm:ss | Biarkan kosong dan gunakan syncDicPeriodTime sebagai waktu sinkronisasi berikutnya. |
syncDicPeriodTime | Interval waktu sinkronisasi kamus jarak jauh, detik, nilai minimum 30 | Misalnya, syncDicTime=20:00:00,syncDicPeriodTime=86400 , disinkronkan pada jam 20 setiap hari |
dingWebHookUrl | Url robot DingTalk | Digunakan untuk pengecualian segmentasi kata dan sinkronisasi pengecualian tesaurus/pemberitahuan sukses |
dingMsgContent | Copywriting pemberitahuan robot | Perhatikan bahwa saat mengonfigurasi robot DingTalk, kata kunci harus cocok dengan salinan ini, jika tidak, pesan akan gagal terkirim. |
Direktori
{ES_HOME}/config/analysis-hao/
dibaca terlebih dahulu, dan file di direktori{ES_HOME}/plugins/analysis-hao/config
tidak dibaca.
base_dictionary.txt
, dipisahkan dengan koma, dan angka berikut menunjukkan frekuensi kata. Contoh: hasil segmentasi kata奋发图强
adalah奋
,发图
,强
, karena frekuensi kata dari kata发图
terlalu tinggi (karena banyaknya kemunculan), Anda dapat mengurangi frekuensi kata dan memodifikasi base_dictionary.txt
berkas base_dictionary.txt
.customerDictionaryFile
saat ini akan ditimpa secara otomatis. Format file leksikon jarak jauh adalah {词},{词频},{是否元词}
, misalnya,俄罗斯,1000,1
. Penjelasan apakah itu meta-word atau bukan: 1
berarti meta-word dan tidak akan dipecah lebih lanjut.俄罗斯
tidak akan dipecah menjadi俄
dan罗斯
(Russ adalah nama umum). Dengan cara ini,罗斯
tidak akan mengingat dokumen terkait俄罗斯
. 0
artinya bisa terus dipecah, seperti奋发图强
Bangun indeks:
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"
}
}
}
}
Uji segmentasi kata
test/_analyze
{
"analyzer": "index_analyzer",
"text": "徐庆年 奋发图强打篮球有利于提高人民生活,有的放矢,中华人民共和国家庭宣传委员会宣。?"
}
test/_analyze
{
"analyzer": "search_analyzer",
"text": "徐庆年 奋发图强打篮球有利于提高人民生活,有的放矢,中华人民共和国家庭宣传委员会宣。?"
}
徐庆年
tidak ada dalam kosakata, tetapi dikenali sebagai sebuah kata melalui autoWordLength
.