Elasticsearch 한글 문장별로 구분하여 데이터 저장

개굴·2023년 8월 18일
0

개요

목적

한글 형태소 kiwi 분석기를 사용하여 python으로 문장별로 elasticsearch 적재

환경

  • OS : CentOS Linux 7 (Core)
  • elasticesearch 8.9.0
  • kiabana 8.9.0
  • Python 3.11.4

모듈

  • Kiwipiepy는 한국어 형태소 분석기인 Kiwi(Korean Intelligent Word Identifier)의 Python 모듈
  • Elasticsearch 모듈



과정

1. Kiwipiepy를 이용하여 input 데이터 전처리

  • input 파일을 읽고 Kiwi 모듈을 사용하여 문장별로 데이터를 전처리
from kiwipiepy import Kiwi
from PUT_func import put

def file_open(path):
    with open(path, "r") as f:
        text = f.read()
        print(text)
        kiwi = Kiwi()
        str_list = kiwi.split_into_sents(text)
        each_sentences(str_list)

def each_sentences(str_list):
    for id_num in range(1, len(str_list)+1):
        print(id_num)
        data = {"text": str_list[id_num - 1].text}
        print(data)
        put(data, id_num)

# execute
file_open("input.txt")

2. 전처리 후 데이터를 elasticsearch에 적재

  • Elasticsearch 모듈을 사용하여 문장별로 적재
from elasticsearch import Elasticsearch

def put(data, id_num):
    es = Elasticsearch("http://192.168.101.218:9200")
    index_name = 'test_index'
    print(es.info())

    es.index(index=index_name, id=id_num, body=data)
    es.indices.refresh(index=index_name)

3. 적재 확인

  • kibana로 확인
    get /test_index/_search


관련 이슈

  1. kiwi 형태소 분석기가 문장별로 나눌 때 문장이 제대로 구분되지 않는 오류 사항이 있음
    1. 원본

      물가 상승으로 인해 생활비가 늘어나고 있습니다. 나만의 꿈을 이뤄내기 위해 노력하고 있습니다. '언젠가' 가까운 미래에 해외로 여행을 가보고 싶습니다. 우리나라의 전통음식을 맛보면서 문화를 느껴보세요.
    2. 예상 결과

      {'text': '물가 상승으로 인해 생활비가 늘어나고 있습니다.'}
      {'text': '나만의 꿈을 이뤄내기 위해 노력하고 있습니다.'}
      {'text': ''언젠가' 가까운 미래에 해외로 여행을 가보고 싶습니다.'}
      {'text': "우리나라의 전통음식을 맛보면서 문화를 느껴보세요."}
    3. 키위 모듈 사용시

      {'text': '물가 상승으로 인해 생활비가 늘어나고 있습니다.'}
      {'text': '나만의 꿈을 이뤄내기 위해 노력하고 있습니다. '언젠가''}
      {'text': '가까운 미래에 해외로 여행을 가보고 싶습니다.'}
      {'text': "우리나라의 전통음식을 맛보면서 문화를 느껴보세요."}
    4. input에서 개행을 추가한 뒤 키위 모듈 사용시

      물가 상승으로 인해 생활비가 늘어나고 있습니다. 나만의 꿈을 이뤄내기 위해 노력하고 있습니다. 
      '언젠가' 가까운 미래에 해외로 여행을 가보고 싶습니다. 우리나라의 전통음식을 맛보면서 문화를 느껴보세요.
      {'text': '물가 상승으로 인해 생활비가 늘어나고 있습니다.'}
      {'text': '나만의 꿈을 이뤄내기 위해 노력하고 있습니다.'}
      {'text': ''언젠가''}
      {'text': '가까운 미래에 해외로 여행을 가보고 싶습니다.'}
      {'text': "우리나라의 전통음식을 맛보면서 문화를 느껴보세요."}



회고

  • 함수 이름을 조금 더 직관적이게 하고 싶다
  • 모듈화를 더 잘 할 수 있지 않을까...
  • 파이썬을 잘 모르는 채로 코드를 짜니 이딴 게 나오는 것 같아서 파이썬 공부를 처음부터 다시 하기로 했다
profile
알쏭달쏭혀요

1개의 댓글

comment-user-thumbnail
2023년 8월 18일

잘 봤습니다. 좋은 글 감사합니다.

답글 달기