728x90
엘라스틱 서치에서 사용하는 토크나이저를 파이썬 클라이언트로 연동해서 사용할 수 있다.
굳이 엘라스틱서치에서 작동되는걸 파이썬으로 가져와서 연동해야할 필요가 있을까 하지만
검색 결과로 나오는 BM25 score 말고 분리된 형태소 간 유사도를 파악하기 위해 사용했다. *(0~1)로 치환되는 값이 필요함.
Mapping 정보
"analysis": {
"analyzer": {
"nori_token_analyzer": {
"type": "custom",
"tokenizer": "nori_base_tokenizer"
}
},
"tokenizer": {
"nori_base_tokenizer": {
"type": "nori_tokenizer",
"decompound_mode": "mixed",
"discard_punctuation": false
}
}
}
파이썬 클라이언트 연동
from elasticsearch import Elasticsearch
from config import ELASTIC_HOST
class ElasticSearch:
def __init__(self):
self.client = None
def connect(self):
self.client = Elasticsearch(hosts=ELASTIC_HOST)
def close(self):
self.client.close()
elastic = ElasticSearch()
형태소 분석기 함수 선언
def analyzer(question):
if elastic.client == None:
elastic.connect()
res = elastic.client.indices.analyze(
index=INDEX_NAME,
analyzer="nori_token_analyzer",
text=question,
attributes=["leftPOS"],
explain=True,
)
pos_tag = [
(i["token"], i["leftPOS"])
for i in res["detail"]["tokenizer"]["tokens"]
if i["leftPOS"] != "SP(Space)"
]
return pos_tag
테스트 해보기
print(analyzer("오늘 저녁 뭐먹을까 추천해줘~~"))
[('오늘', 'MAG(General Adverb)'), ('저녁', 'NNG(General Noun)'), ('뭐', 'IC(Interjection)'), ('먹', 'VV(Verb)'), ('을까', 'E(Verbal endings)'), ('추천', 'NNG(General Noun)'), ('해', 'XSV(Verb Suffix)'), ('줘', 'VX(Auxiliary Verb or Adjective)'), ('~~', 'SY(Other symbol)')]
끝.
반응형
'API > ElasticSearch' 카테고리의 다른 글
[Elastic]. elastic search Docker Setup (0) | 2023.03.22 |
---|---|
[ElasticSearch]. 엘라스틱서치 밋업(MeetUp) 참가 (0) | 2022.12.06 |
[ElasticSearch]. 다중 검색 종류 비교 : 비동기 검색(async_search) VS 멀티 서치(msearch) (0) | 2022.08.23 |
[ElasticSearch]. 크론탭(crontab)으로 리눅스 서버 꺼지면 자동 재실행 하기 (0) | 2022.08.14 |
[ElasticSearch] SSL/TLS security https setting 외부에서 접속하기( version 8.x) (0) | 2022.04.06 |