[ElasticSearch] Nori 를 사용한 형태소 분석
1. nori 란?
- Elastic에서 개발한 한국어 형태소 분석기
- 사전은 기본으로 ‘mecab-ko-dic’ 을 사용
- 6.4.x 에서 추가.
2. plugin설치
1) 설치하기.
bin/elasticsearch-plugin install analysis-nori
2) (참고)삭제 명령어.
bin/elasticsearch-plugin remove analysis-nori
3. 기본 analyze 호출
- 호출
curl -X POST http://localhost:9200/_analyze -d '{
"analyzer": "nori",
"text": "노리 테스트 입니다."
}'
- 결과
{
"tokens": [
{
"token": "노리",
"start_offset": 0,
"end_offset": 2,
"type": "word",
"position": 0
},
{
"token": "테스트",
"start_offset": 3,
"end_offset": 6,
"type": "word",
"position": 1
},
{
"token": "이",
"start_offset": 7,
"end_offset": 10,
"type": "word",
"position": 2
}
]
}
4. 사전 추가
1) text 파일로 사전추가
- ${ELASTICSEARCH_PATH}/config/userdict_ko.txt 로 파일을 생성한다.
- 파일 내에 원하는 사전을 추가한다.
- 테스트로 ‘버카충’을 추가했습니다.
2) INDEX 생성
curl -X PUT http://localhost:9200/nori_test -d '{
"settings": {
"index": {
"analysis": {
"tokenizer": {
"nori_user_dict": {
"type": "nori_tokenizer",
"decompound_mode": "mixed",
"user_dictionary": "userdict_ko.txt"
}
},
"analyzer": {
"my_analyzer": {
"type": "custom",
"tokenizer": "nori_user_dict"
}
}
}
}
}
}'
3) 호출해보기.
curl -X POST http://localhost:9200/nori_test/_analyze -d '{
"analyzer": "my_analyzer",
"text": "오늘 버카충 해야합니다."
}'
- 결과
{
"tokens": [
{
"token": "오늘",
"start_offset": 0,
"end_offset": 2,
"type": "word",
"position": 0
},
{
"token": "버카충",
"start_offset": 3,
"end_offset": 6,
"type": "word",
"position": 1
},
{
"token": "해야",
"start_offset": 7,
"end_offset": 9,
"type": "word",
"position": 2,
"positionLength": 2
},
{
"token": "하",
"start_offset": 7,
"end_offset": 9,
"type": "word",
"position": 2
},
{
"token": "아야",
"start_offset": 7,
"end_offset": 9,
"type": "word",
"position": 3
},
{
"token": "합니다",
"start_offset": 9,
"end_offset": 12,
"type": "word",
"position": 4,
"positionLength": 2
},
{
"token": "하",
"start_offset": 9,
"end_offset": 12,
"type": "word",
"position": 4
},
{
"token": "ᄇ니다",
"start_offset": 9,
"end_offset": 12,
"type": "word",
"position": 5
}
]
}
5. 팁
- analyze 할 때 json 값에 ‘explain’ : true 를 추가하면 좀 더 자세한 내용을 확인할 수 있습니다.
참고페이지
- Nori : https://www.elastic.co/guide/en/elasticsearch/plugins/6.4/analysis-nori-tokenizer.html
- Nori(엘라스틱블로그) : https://www.elastic.co/kr/blog/nori-the-official-elasticsearch-plugin-for-korean-language-analysis
- GITHUB : https://github.com/elastic/elasticsearch/tree/master/plugins/analysis-nori
- analyze 테스트 : https://www.elastic.co/guide/en/elasticsearch/reference/current/_testing_analyzers.html