elasticsearch 中国語単語セグメンテーション プラグイン。
QQコミュニケーショングループ:743457803
ES単語分割プラグインの開発方法についてはこちらを参照してください。
主にIKとHanLPを参照
複雑な中国語文字をサポートします。Java では長さが1 ではない一部の中国語文字 ( ?
など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
トークナイザー: hao_search_mode
、 hao_index_mode
Gitタグ | ES版 |
---|---|
マスター | ES 最新安定版 |
v7.17.1 | 7.17.1 |
vX.YZ | XYZ |
方法 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 失敗通知を開始するかどうか。通知アドレスはHttpAnalyzer.cfg.xml のdingWebHookUrl フィールドです。 | false |
enableSingleWord | きめ細かい返された単語を使用するかどうか。たとえば、体力值 、単語分割結果には体力值 、体力 だけが保存され、值 | false |
autoWordLength | スペース、句読点、文字、数字などで区切られた、 autoWordLength 未満の長さの漢字テキストは、自動的に 1 つの単語として認識されます。 デフォルト -1 は有効ではありません。 >=2は有効とみなされます。 | -1 |
hao_index_mode
単語は、単語が分離できなくなるまで、語彙の用語と重みに基づいて再帰的にセグメント化されます。 enableSingleWord=true
に設定すると、単一のワードに分割されます。
たとえば、このテキストは南京市长江大桥
南京市长江大桥
==>南京市
、长江大桥
南京市
==>南京
市
、长江大桥
==>长江
、大桥
enableSingleWord=false
の場合、再帰は停止し、取得される単語セグメントは南京市
、南京
、市
、长江大桥
、长江
、大桥
になります。enableSingleWord=true
の場合、単一の単語の位置まで再帰が継続され、単語のセグメンテーションが南京市
、南京
、南
、京
、市
、长江大桥
、长江
、长
江
、大桥
、大
桥
として取得されます。hao_search_mode
このモードでは、1 回だけ再帰的にhao_index_mode
モードと同等になります。 単語分割結果は南京市
、长江大桥
です。このモードではenableIndexMode=false
あるため、これをtrue
に変更すると、 hao_index_mode
と同じ効果になります。
パラメータ | 関数 | 述べる |
---|---|---|
baseDictionary | 基本辞書ファイル名 | そのまま、plug-in config ディレクトリまたは es config ディレクトリに配置します。 |
customerDictionaryFile | ユーザー定義のリモート辞書ファイル。英語のセミコロンで区切られた複数のファイル。 | これは、プラグインconfig ディレクトリまたは es config ディレクトリに保存されます。 |
remoteFreqDict | リモートのユーザー定義語彙ファイル | 便利なホット アップデート。ホット アップデートは、次の 2 つのパラメータを通じて定期的に更新されます。 |
syncDicTime | リモート辞書の次回同期時刻hh:mm:ss | 空白のままにして、次の同期時間としてsyncDicPeriodTime を使用します。 |
syncDicPeriodTime | リモート辞書同期時間間隔、秒、最小値 30 | たとえば、 syncDicTime=20:00:00,syncDicPeriodTime=86400 、毎日 20 時に同期されます |
dingWebHookUrl | DingTalk ロボットの URL | 単語分割の例外と同期シソーラスの例外/成功通知に使用されます。 |
dingMsgContent | ロボット通知のコピーライティング | DingTalk ロボットを構成するときは、キーワードがこのコピーと一致する必要があることに注意してください。一致しないと、メッセージの送信に失敗します。 |
{ES_HOME}/config/analysis-hao/
ディレクトリが最初に読み取られ、{ES_HOME}/plugins/analysis-hao/config
ディレクトリ内のファイルは読み取られません。
base_dictionary.txt
で、次の数字は単語の出現頻度を示します。 たとえば、奋发图强
の単語分割結果は奋
、发图
、强
になります。単語发图
の単語頻度が高すぎるため (出現回数が多いため)、単語頻度を減らして、 base_dictionary.txt
ファイル。customerDictionaryFile
は自動的に上書きされます。 リモート辞書のファイル形式は{词},{词频},{是否元词}
です (たとえば、俄罗斯,1000,1
。 メタワードかどうかの説明: 1
俄
であり、俄罗斯
罗斯
それ以上分割されないことを意味します (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
を通じて単語として認識されます。