본문 바로가기
공허의 유산/마음의 거울

[오픈채팅의 재해석] 03. 핵심어 검출을 위한 명사 검출(2)

by 바른생활머시마 2023. 10. 3.
728x90
반응형

앞에서 명사 검출을 잘 하지 못했던 것이 계속 마음에 걸려서 다른 방법을 한번 더 시도해 보기로 했습니다.

일단, Mecab을 한번 써서 시도해 보겠습니다.

 

설치는 '은전한닢' 프로젝트를 설치하면 됩니다.

 pip install eunjeon

코드는 기존과 다 동일하고, 형태소 분석기만 kkm 대신 mecab을 쓰도록 수정하면 됩니다.

from konlpy.tag import Komoran, Kkma
import pickle
import time
from eunjeon import Mecab
mecab = Mecab()
#komoran = Komoran()
#kkma = Kkma()
all_nouns = []

start_time = time.time()

# 소스 파일 읽기
src_doc_path = './KakaoOpenChat/dialog_only_filtered.text'
src_doc = open(src_doc_path, 'r', encoding='utf-8')
for line in src_doc.readlines():
  line = line.strip()
  try:
    #nouns = komoran.nouns(line)
    #nouns = kkma.nouns(line)
    nouns = mecab.nouns(line)
    all_nouns.append(nouns)
    print(nouns)  
  except:
    print("ERROR>"+line)

src_doc.close()
end_time = time.time()

with open('./KakaoOpenChat/nouns_mecab.pkl', 'wb') as f:
    pickle.dump(all_nouns, f)

print("Elapsed time - "+str(end_time - start_time))

충격적(?)이게도, 처리도 엄청 빠르네요. 16초~~

 

그렇다면, 성능이 komoran < kkma < mecab ??? 

그렇지는 않다고 생각합니다. 아마도 각자 장단점이 있을 것 같아요. 특성이 다른 것이겠죠??

 

마음에 걸렸던 부분 중 하나는, '형태소' 분석기에게 '형태소'가 아닌 것을 분석하라고 한 이 경우를 가지고 되니 마니 하는 것이 올바른 것 같지 않다는 점이었습니다. 그래서, 알려진 전처리 방법들을 좀 적용하고 처리 속도를 한번 비교 해 보도록 하겠습니다.

전처리는 아래 포스트의 전처리를 사용했습니다.

https://m.blog.naver.com/j7youngh/222824588851

 

[ NLP 한글 자연어처리 전체 ] 파이썬 python 한국어 한글 자연어 처리 NLP ( NLP 전체 과정을 한 번에

파이썬(python), 한국어인 한글 자연어(NLP) 처리는 re 모듈로 정제, KoNLPy의 메캅(Mecab)으로 토...

blog.naver.com

 

kkma - 응답없음/ kkma는 연속으로 반복 된 글자 처리를 잘 못했는데 전처리에 연속으로 반복 된 글자 처리가 없어서 같은 결과가 나온 것 같습니다..

komoran -  44초(앞에서 오류가 났던 것이, 아마도 문자열에 포함 된 특수문자 같은 것의 영향이었고, 그래서 잘 돌아가게 된 것 같습니다.

mecab - 20초

 

처리 속도는 mecab이 빠르게 나왔는데 결과물의 품질은 또 다른 이야기겠죠??

 

이렇게 진행 할 경우, 진행은 되는데 과연 의미있는 결론이 나올 것인가에 대해서 살짝 염려가 되었습니다.

청소년들이 사용하는 신조어들이 그들 입장에서는 대단히 중요한 의미를 담고 있는 단어들인데 그것들이 문법에 맞지 않아서 걸러지지 않을지, 그래도 표현하고자 했던 의미가 제대로 도출되지 않게 되는 것은 아닐지.... 기본적인 방법의 문제라기 보다는 표준으로 삼고 있는 언어의 차이에서 오는 것 같습니다. 사용하는 형태소 분석기는 표준어를 지향하고 있으나, 청소년들이 사용하는 언어, 아니 꼭 청소년이 아니라 어른이라고 하더라도 '구어체'에서는 표준어에 맞게 사용하는 경우가 그렇게 많지 않을 것 입니다. '구어체'라는 특성에 맞는 분석 방법이라면 조금 더 유연 할 필요가 있고, 구어체의 특성을 반영하는 보완책(ex.사용자 정의 사전으로 구어 표현을 추가하거나???)이 필요할 것 같습니다.

 

데이터 확보와 사람들이 무슨 이야기를 하는지 궁금해서 '토론'방에 들어가 봤더니 여기는 또 완전히 다른 세상이네요. 같은 한국어를 쓰지만 대화의 주제나 세대 등 조건에 따라 언어의 특성이 매우 다른 것 같습니다. 이럴 때는 일단 표준어 기준으로 진행을 하고, 그 후에 표준어 아닌 부분의 처리 방법을 고민 해 보는 것이 순서일 것 같네요.

 

일단, 결과가 출력 된 것이 두 개 있으니, komoran과 mecab은 어떻게 다른 결과를 내보냈는지 한번 비교해 보도록 하겠습니다.

 

다음에~

728x90
반응형

댓글