konlpy - extract nouns

1 분 소요

konlpy - extract nouns

  • konlpy를 사용하여 한글 문장에서 noun, pos등을 뽑아내는 방법을 정리합니다.
  • konlpy에는 Kkma, Hannanum, Okt(Twitter), Komoran, Mecab와 같은 형태소 분석기(POS tagger)가 존재합니다.
  • 해당 형태소 분석기들은 익숙한 단어들에 대해서는 명사를 잘 뽑아주지만, 낯선 단어들에 대해서는 잘 뽑아주지 못합니다.
from konlpy.tag import Kkma
from konlpy.tag import Hannanum
from konlpy.tag import Mecab
from konlpy.tag import Komoran
from konlpy.tag import Okt


# NLP
pos_tagger_dict = {
    "Kkma": Kkma(), 
    "Hannanum": Hannanum(), 
    "Okt": Okt(), 
    "Komoran": Komoran()
}
# "Mecab": Mecab(), 
# Exception: Install MeCab in order to use it: http://konlpy.org/en/latest/install/

sentences = [
    "안녕하세요. konlpy에 대해서 공부한 내용을 정리합니다",
    "konlpy는 일반적인 단어들에 대해서는 명사를 잘 뽑아줍니다",
    "하지만, 파이썬이나 아이유나 파이콘처럼 낯선 같은 단어들은 추출이 잘 되지 않습니다",
    "따라서, 낯선 단어들이 많이 있는 경우에은 konlpy에 효과적으로 작동하지 않습니다."
]

for each_sent in sentences:
    print(f"sentences: {each_sent}")
    for tagger_name, each_pos_tagger in pos_tagger_dict.items():
        nouns = each_pos_tagger.nouns(each_sent)
        print(f"= {tagger_name:8s}: {nouns}")
    print("--" * 50)
  • 아래를 보시면, 잘 뽑아주는 경우도 있지만, konlpy처럼 낯선 단어들의 경우 명사로 뽑아주지 않거나, “파이콘”과 같은 단어도 분리한다거나 하는 문제가 생기죠.
sentences: 안녕하세요. konlpy에 대해서 공부한 내용을 정리합니다
= Kkma    : ['안녕', '공부', '내용', '정리']
= Hannanum: ['안녕', '공부', '내용', '정리']
= Okt     : ['대해', '공부', '내용', '정리']
= Komoran : ['안녕하세요', '공부', '내용', '정리']
----------------------------------------------------------------------------------------------------
sentences: konlpy는 일반적인 단어들에 대해서는 명사를 잘 뽑아줍니다
= Kkma    : ['일반적', '단어', '명사']
= Hannanum: ['일반적', '단어들', '명사']
= Okt     : ['일반', '단어', '대해', '명사']
= Komoran : ['일반', '단어', '명사']
----------------------------------------------------------------------------------------------------
sentences: 하지만, 파이썬이나 아이유나 파이콘처럼 낯선 같은 단어들은 추출이 잘 되지 않습니다
= Kkma    : ['파이', '이', '아이', '아이유나', '유나', '파이콘', '콘', '낯', '단어', '추출']
= Hannanum: ['파이썬', '아이유', '파이콘', '단어들', '추출']
= Okt     : ['파이썬', '아이유', '파', '이콘', '낯선', '단어', '추출']
= Komoran : ['파이썬', '아이유', '파', '이콘', '낯선', '단어', '추출']
----------------------------------------------------------------------------------------------------
sentences: 따라서, 낯선 단어들이 많이 있는 경우에은 konlpy과 효과적으로 작동하지 않습니다.
= Kkma    : ['단어', '경우', '은', '효과적', '작동']
= Hannanum: ['단어들', '경우', '효과적', '작동']
= Okt     : ['따라서', '낯선', '단어', '경우', '은', '과', '효과', '작동']
= Komoran : ['낯선', '단어', '경우', '효과', '작동']
----------------------------------------------------------------------------------------------------

Wrap-up

  • 이는 해당 형태소 분석기들이 모두 “이미 학습된 상태”로 제공되고 기존에 학습된 rule대로 명사를 뽑아내어주기 때문이죠.
  • 따라서, 적용한 한글 문장들의 데이터에 특이한 단어들이 많다면 해당 형태소 분석기를 사용하는 것은 적합하지 않습니다.
  • 이를 개선하여, 현재 데이터에 대해서 학습을 진행하여 명사를 추츨할 수 있는 패키지인 soynlp가 존재합니다. 이는 제가 다음 글에서 작성해보겠습니다.

댓글남기기