Acdong
Learn by doing
Acdong
전체 방문자
오늘
어제
  • 분류 전체보기
    • Economy
      • Saving Money
    • Self-improvement
    • Thoughts
    • Machine learning
      • Deep Learning
      • Chatbot
      • NLP
    • MLops
      • AWS
      • Container
      • Serving
    • Computer Vision
    • Data Science
      • ADsP
      • R
    • Project
    • Python
      • Data Structure & Algorithm
    • C,C++
    • API
      • ElasticSearch
    • Error Note
    • Network
    • RDBMS
      • SQL

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

  • [GitHub]

인기 글

태그

  • 존댓말 반말 분류
  • R
  • Numpy
  • 어텐션
  • sbert
  • nlp
  • SentenceTransformer
  • c포인터
  • R그래프
  • pandas
  • Python
  • R시각화
  • 데이터 전처리
  • 포인터
  • plot()
  • 회귀계수
  • 이미지 전처리
  • 기계학습
  • 머신러닝
  • 다중공선성

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
Acdong

Learn by doing

API/ElasticSearch

[ElasticSearch]. 한국어 형태소 분석기 nori_analyzer 사용하기

2022. 12. 5. 20:45
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
    'API/ElasticSearch' 카테고리의 다른 글
    • [Elastic]. elastic search Docker Setup
    • [ElasticSearch]. 엘라스틱서치 밋업(MeetUp) 참가
    • [ElasticSearch]. 다중 검색 종류 비교 : 비동기 검색(async_search) VS 멀티 서치(msearch)
    • [ElasticSearch]. 크론탭(crontab)으로 리눅스 서버 꺼지면 자동 재실행 하기
    Acdong
    Acdong
    E-mail : alswhddh@naver.com / 자연어처리와 MLops 를 연구하고 있는 스타트업 개발자입니다.

    티스토리툴바