البرنامج الإضافي لتجزئة الكلمات الصينية Elasticsearch.
مجموعة اتصالات QQ: 743457803
يرجى الرجوع هنا لمعرفة كيفية تطوير البرنامج الإضافي لتجزئة الكلمات في ES.
تشير بشكل رئيسي إلى IK وHanLP
يدعم الأحرف الصينية المعقدة . بعض الأحرف الصينية لها طول غير 1 في Java، مثل ?
، لكن IK
وغيرها لا تدعمها.
يتم دعم تجزئة الكلمات المفردة والبحث عنها، لكن وضع ik_max_word
غير مدعوم.
يدعم تجزئة الكلمات ذات الطول المخصص ، وهو مناسب لتحديد أسماء الأشخاص في النصوص القصيرة.
سيتم التعرف تلقائيًا على طول نص الأحرف الصينية
<=autoWordLength
مفصولاً بمسافات وعلامات الترقيم والأحرف والأرقام وما إلى ذلك ككلمة واحدة.
دعم البحث عن الرموز التعبيرية
بالمقارنة مع IK، فهو أكثر ذكاءً وأكثر دقة من IK.
ik_max_word
بتعداد جميع الكلمات الممكنة بشكل شامل، مما يؤدي إلى العثور على بعض عمليات البحث غير ذات الصلة. تبين أن任性冲动过
任性性冲动动过
، لذا فإن البحث عن "性冲动
سيبحث عن هذا المستند.南京市长江大桥
، والنتيجة هي南京市市长长江大桥
، ثم سيبحث البحث عن市长
عن هذا المستند، لكن أداة تقطيع الكلمات هاو لن تفعل ذلك، فهي تحسب أقصر مسار من خلال تكرار الكلمات وتحدد العبارة ذات الاحتمالية الأعلى. يمكنك أيضًا ضبط تردد الكلمات حسب رغبتك وفقًا للمشهد الخاص بك.نتيجة تجزئة الكلمات لـ ik_smart ليست مجموعة فرعية من ik_max_word، ونتيجة تجزئة الكلمات لـ hao_search_mode هي مجموعة فرعية من نتيجة تجزئة الكلمات لـ hao_index_mode
مقارنةً بـ HanLp، فهو أخف وزنًا وأكثر قابلية للتحكم في تجزئة الكلمات ، ولا يحتوي على بعض وظائف التنبؤ الذكية مثل الأسماء، مما قد يؤدي إلى تجزئة الكلمات غير المستقرة وغير الدقيقة. للتعلم الآلي نتائج تنبؤ مختلفة للنصوص الطويلة والقصيرة. كما أن نتائج تجزئة الكلمات المتوقعة مختلفة أيضًا. وليس لدى HanLP مكون إضافي رسمي لـ ES.
احسب أقصر مسار بناءً على تكرار الكلمات وقم بتعداد الكلمات الممكنة بدلاً من كل الكلمات. إذا كانت الكلمات المذكورة خاطئة، فيمكنك ضبط تردد الكلمات لتصحيحها. ملف تكرار الكلمات هو ملف txt
ذو إمكانية قراءة أفضل .
يتم دعم الكلمات الوصفية، على سبيل المثال، لن يتم تقسيم俄罗斯
بعد الآن إلى俄
罗斯
(罗斯
هو اسم شخصي شائع). بهذه الطريقة لن يتذكر罗斯
المستندات المتعلقة俄罗斯
ولكن جزء من الكلام غير معتمد
توفير المحلل: hao_search_mode
، hao_index_mode
الرمز المميز: hao_search_mode
، hao_index_mode
علامة جيت | نسخة إس |
---|---|
يتقن | ES أحدث إصدار مستقر |
v7.17.1 | 7.17.1 |
vX.YZ | XYZ |
الطريقة الأولى: bin/elasticsearch-plugin install file:///Users/xiaoming/Download/analysis-hao.zip
الطريقة الثانية: بعد فك الضغط، ضعه في دليل 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 | رابط 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
. شرح ما إذا كانت كلمة وصفية أم لا: 1
يعني أنها كلمة وصفية ولن يتم تقسيم俄罗斯
إلى俄
罗斯
(روس هو اسم شائع). وبهذه الطريقة، لن يتذكر罗斯
المستندات المتعلقة俄罗斯
. 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
.