2 분 소요

한국어 자연어처리 패키지 (KoNLPy) 를 Colab 환경에서 쉽게 설치하고 사용해보자

설치

설치하는데 3분 정도는 걸리는 것 같다..!

!curl -s https://raw.githubusercontent.com/teddylee777/machine-learning/master/99-Misc/01-Colab/mecab-colab.sh | bash


동작 확인 테스트

형태소 분석기 마다 조금씩 다르게 분석 결과를 보여진다는 것을 확인 할 수 있음

# KoNLPy의 Okt 와 Mecab 불러와서 사용해보기
from konlpy.tag import Okt, Mecab

Okt = Okt()
mecab = Mecab()

# 예시 문장
sentence = "OMG 공부하기 넘 싫네요. 그래도 스터디 해야됩니다 오마이갓! 지쟈스 하 아~"
Okt.morphs(sentence)
['OMG',
 '공부',
 '하기',
 '넘',
 '싫네요',
 '.',
 '그래도',
 '스터디',
 '해야',
 '됩니다',
 '오마이갓',
 '!',
 '지쟈스',
 '하',
 '아',
 '~']
mecab.morphs(sentence)
['OMG',
 '공부',
 '하',
 '기',
 '넘',
 '싫',
 '네요',
 '.',
 '그래도',
 '스터디',
 '해야',
 '됩니다',
 '오마이갓',
 '!',
 '지',
 '쟈',
 '스',
 '하',
 '아',
 '~']
print("형태소 단위로 문장 분리")
print("----------------------")
print(Okt.morphs(sentence))
print(" ")
print("문장에서 명사 추출")
print("----------------------")
print(Okt.nouns(sentence))
print(" ")
print("품사 태킹(PoS)")
print("----------------------")
print(Okt.pos(sentence))
rst_list = Okt.morphs(sentence)
형태소 단위로 문장 분리
----------------------
['OMG', '공부', '하기', '넘', '싫네요', '.', '그래도', '스터디', '해야', '됩니다', '오마이갓', '!', '지쟈스', '하', '아', '~']
 
문장에서 명사 추출
----------------------
['공부', '스터디', '오마이갓', '지쟈스']
 
품사 태킹(PoS)
----------------------
[('OMG', 'Alpha'), ('공부', 'Noun'), ('하기', 'Verb'), ('넘', 'Verb'), ('싫네요', 'Adjective'), ('.', 'Punctuation'), ('그래도', 'Adverb'), ('스터디', 'Noun'), ('해야', 'Verb'), ('됩니다', 'Verb'), ('오마이갓', 'Noun'), ('!', 'Punctuation'), ('지쟈스', 'Noun'), ('하', 'Exclamation'), ('아', 'Exclamation'), ('~', 'Punctuation')]


불용어 제거

stop_words 에 불용어를 추가 하여 처리

stop_words = ". 을 를 하 아 ~ , 게 때 는 !"
stop_words = set(stop_words.split(' '))
word_tokens = Okt.morphs(sentence)

result = [word for word in word_tokens if not word in stop_words]

print('불용어 제거 전 :',list(word_tokens))
print('불용어 제거 후 :',result)
불용어 제거 전 : ['OMG', '공부', '하기', '넘', '싫네요', '.', '그래도', '스터디', '해야', '됩니다', '오마이갓', '!', '지쟈스', '하', '아', '~']
불용어 제거 후 : ['OMG', '공부', '하기', '넘', '싫네요', '그래도', '스터디', '해야', '됩니다', '오마이갓', '지쟈스']


Optional) 불용어 파일로 불러와서 제거

koreanStopwords.txt 파일에 불용어를 쭉 추가한 다음, 이 파일을 불러와서 전처리 하는 방법

f = open("/content/koreanStopwords.txt", 'r')
lines = f.readlines()
stopwords = []
for line in lines:
    line = line.replace('\n', '')
    stopwords.append(line)
f.close()
print('불용어 단어 리스트: ', ' '.join(stopwords))
불용어 단어 리스트:  이 있 하 것 들 그 되 수 이 보 않 없 나 사람 주 아니 등 같 우리 때 년 가 한 지 대하 오 말 일 그렇 위하 때문 그것 두 말하 알 그러나 받 못하 일 그런 또 문제 더 사회 많 그리고 좋 크 따르 중 나오 가지 씨 시키 만들 지금 생각하 그러 속 하나 집 살 모르 적 월 데 자신 안 어떤	 내 경우 명 생각 시간 그녀 다시 이런 앞 보이 번 나 다른 어떻 여자 개	 들 사실 이렇 점 싶 말 정도 좀 원 잘 통하 소리 놓	
word_tokens = [token for token in word_tokens if token not in stopwords]
preprocessed_text= ' '.join(word_tokens)
print(preprocessed_text)
OMG 공부 하기 넘 싫네요 . 그래도 스터디 해야 됩니다 오마이갓 ! 지쟈스 아 ~


유의어/동의어 표준화 시키기

비슷한 단어들을 표준화 하고 싶다면? 동의어 사전(단어사전)을 만들어 매핑시켜 표준화 하면 된다

import pandas as pd 

synonym_dict = {
                '나' : ['저', '내'],
                '오마이갓' : ['OMG', 'Oh My God'],
                '공부' : ['스터디']
                }
                
apply_mapping = {word:k for k, v in synonym_dict.items() for word in v}
result_list = pd.DataFrame(rst_list).replace(apply_mapping, regex=True).values

print('유의어 처리 전 :',list(word_tokens))
print('유의어 처리 후:', list(result_list.flatten()))
유의어 처리 전 : ['OMG', '공부', '하기', '넘', '싫네요', '.', '그래도', '스터디', '해야', '됩니다', '오마이갓', '!', '지쟈스', '아', '~']
유의어 처리 후: ['오마이갓', '공부', '하기', '넘', '싫네요', '.', '그래도', '공부', '해야', '됩니다', '오마이갓', '!', '지쟈스', '하', '아', '~']


Reference

  • https://teddylee777.github.io/colab/colab-mecab

댓글남기기