본문 바로가기
Studying/Machine Learning

[머신러닝] 자연어 처리 파이썬 모듈 (NLP Python module)

by giem 2022. 8. 3.
반응형

자연어 처리 파이썬 모듈을 알아보기에 앞서

자연어 처리가 무엇인지 알아보겠다.

 

자연어 처리(NLP)란 Natural Language Processing의 줄임말이고

텍스트에서 의미있는 정보를 분석, 추출하고 이해하는 기술을 통틀어 말한다.

 

일상에서 사용되는 예시는 대표적으로 구글 번역기, 챗봇, 맞춤법 교정기 등이 있다.

 

한국어 텍스트로 NLP 작업을 하는데 여러 패키지들이 있는데

품사별 형태소로 나누는 패키지, 띄어쓰기 교정 패키지, 그리고 맞춤법 교정 패키지를 소개해보겠다.


KoNLPy

이 패키지 안에는 여러 클래스들이 있다.

 

여기서 Kkma와 Hannanum을 사용해보겠다.

https://konlpy.org/ko/latest/api/konlpy.tag/#konlpy.tag._kkma.Kkma

https://konlpy.org/ko/latest/api/konlpy.tag/#konlpy.tag._hannanum.Hannanum

자세한 내용은 위 링크에서 확인해 볼 수 있다.

 

설치

pip install konlpy

 

Kkma

from konlpy.tag import Kkma
kkma = Kkma()
text = '환영합니다! 자연어 처리 포스트는 재미있게 보고 계신가요?'
print(kkma.morphs(text))  # 품사의 형태소
print(kkma.nouns(text))   # 명사만 추출
print(kkma.pos(text))     # 위의 morphs와 태그의 set
#['환영', '하', 'ㅂ니다', '!', '자연어', '처리', '포스트', '는', '재미있', '게', '보', '고', '계시', 'ㄴ가', '요', '?']
#['환영', '자연어', '처리', '포스트']
#[('환영', 'N'), ('하', 'X'), ('ㅂ니다', 'E'), ('!', 'S'), ('자연어', 'N'), ('처리', 'N'), ('포스트', 'N'), ('는', 'J'), ('재미있', 'P'), ('게', 'E'), ('보', 'P'), ('고', 'E'), ('계시', 'P'), ('ㄴ가', 'E'), ('요', 'J'), ('?', 'S')]

 

Hannanum

from konlpy.tag import Hannanum
hannanum = Hannanum()
text = '환영합니다! 자연어 처리 포스트는 재미있게 보고 계신가요?'
print(hannanum.morphs(text))  # 품사의 형태소
print(hannanum.nouns(text))   # 명사만 추출
print(hannanum.pos(text))     # 위의 morphs와 태그의 set
#['환영', '하', 'ㅂ니다', '!', '자연어', '처리', '포스트', '는', '재미있', '게', '보', '고', '계시', 'ㄴ가', '요', '?']
#['환영', '자연어', '처리', '포스트']
#[('환영', 'N'), ('하', 'X'), ('ㅂ니다', 'E'), ('!', 'S'), ('자연어', 'N'), ('처리', 'N'), ('포스트', 'N'), ('는', 'J'), ('재미있', 'P'), ('게', 'E'), ('보', 'P'), ('고', 'E'), ('계시', 'P'), ('ㄴ가', 'E'), ('요', 'J'), ('?', 'S')]

이 텍스트는 두 클래스가 같게 추출을 했다.

하지만 클래스 별로 방식이 살짝 다르기 때문에 여러 개를 해본 것이다.

 


Khaiii

이번엔 카카오 한글 분석기 3인 khaiii다.

CNN 알고리즘을 사용했다고 한다.

https://github.com/kakao/khaiii

자세한 내용은 위 링크에서 확인해볼 수 있다.

 

설치 ( 꽤 오래걸림... )

# 참고링크 - https://github.com/kakao/khaiii/wiki/%EB%B9%8C%EB%93%9C-%EB%B0%8F-%EC%84%A4%EC%B9%98
git clone https://github.com/kakao/khaiii.git
pip install cmake
mkdir build
cd build && cmake /content/khaiii
cd /content/build/ && make all
cd /content/build/ && make resource
cd /content/build && make install
cd /content/build && make package_python
pip install /content/build/package_python

실행

from khaiii import KhaiiiApi
khaiiApi = KhaiiiApi()

tokenized = khaiiApi.analyze('환영합니다! 자연어 처리 포스트는 재미있게 보고 계신가요?')
tokens = []
for word in tokenized:
    tokens.extend([str(m).split('/')[0] for m in word.morphs])

print(tokens)
#['환영', '하', 'ㅂ니다', '!', '자연어', '처리', '포스트', '는', '재미있', '게', '보', '고', '계시', 'ㄴ가요', '?']

 


PyKoSpacing

PyKoSpacing은 띄어쓰기에 사용되는 대표적인 패키지이다.

 

설치

pip install git+https://github.com/haven-jeon/PyKoSpacing.git

실행

from pykospacing import Spacing
spacing = Spacing()

sent = '환영합니다! 자연어 처리 포스트는 재미있게 보고 계신가요?'
new_sent = sent.replace(" ", '') # 띄어쓰기가 없는 문장 임의로 만들기
kospacing_sent = spacing(new_sent) 

print('띄어쓰기가 없는 문장 :\n', new_sent) 
print('정답 문장:\n', sent) 
print('띄어쓰기 교정 후:\n', kospacing_sent)
#띄어쓰기가 없는 문장 :
# 환영합니다!자연어처리포스트는재미있게보고계신가요?
#정답 문장:
# 환영합니다! 자연어 처리 포스트는 재미있게 보고 계신가요?
#띄어쓰기 교정 후:
# 환영합니다! 자연어 처리 포스트는 재미있게 보고 계신가요?

처리가 잘 된 것을 볼 수 있다.

 


Py-Hanspell

Py-Hanspell은 맞춤법을 교정해주는 패키지다.

 

설치

pip install git+https://github.com/ssut/py-hanspell.git

실행

from hanspell import spell_checker

sent = "맞춤법 틀리면 외 않되? 쓰고싶은대로쓰면돼지 "
spelled_sent = spell_checker.check(sent)

hanspell_sent = spelled_sent.checked
print(hanspell_sent)
# 맞춤법 틀리면 왜 안돼? 쓰고 싶은 대로 쓰면 되지

 

이렇게 패키지를 알아보고 예제 텍스트로 사용해보았다.

 

반응형

댓글