Elasticsearch 중국어 단어 분할 플러그인입니다.
QQ 커뮤니케이션 그룹: 743457803
ES 단어 분할 플러그인 개발 방법은 여기를 참고하세요.
주로 IK와 HanLP를 참고하세요
복잡한 한자를 지원합니다. ?
와 같은 일부 한자는 길이가 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
힘내 태그 | 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 플러그인 디렉토리에 배치합니다. 다음 디렉토리 구조인지 확인하세요. {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은 활성화되지 않으며 >=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 | 단어 분할 예외 및 동기화 동의어 사전 예외/성공 알림에 사용됩니다. |
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
통해 단어로 인식됩니다.