Python/자연어처리 & 형태소 분석기

한국어 형태소 분석기 Kiwipiepy 사용방법

webnautes 2024. 8. 11. 09:06
반응형

한국어 형태소 분석기인 Kiwi(Korean Intelligent Word Identifier)의 Python 모듈인 Kiwipiepy 사용방법을 간단히 다룹니다. 

 

2024. 8. 1 최초작성

2024. 8. 11 사용자 단어 추가 



kiwipiepy를 사용하려면 필요한 패키지를 설치합니다. Python 3.6 이상에서 사용가능합니다.

 

$ pip install kiwipiepy



다음처럼 대화형 인터페이스로 형태소 분석기를 테스트해 볼 수 있습니다.

한국어 형태소 분석기는 한국어를 형태소로 분리하고 품사를 분석해줍니다. 분리된 형태소는 form 항목에 포함되며 각 형태소의 품사는 tag 항목에 포함됩니다.

 

$ python3 -m kiwipiepy
kiwipiepy v0.18.0


>>> 아버지가방에들어가시다
([Token(form='아버지', tag='NNG', start=0, len=3),
  Token(form='가', tag='JKS', start=3, len=1),
  Token(form='방', tag='NNG', start=4, len=1),
  Token(form='에', tag='JKB', start=5, len=1),
  Token(form='들어가', tag='VV', start=6, len=3),
  Token(form='시', tag='EP', start=9, len=1),
  Token(form='다', tag='EF', start=10, len=1)],
-34.723323822021484)


>>> 아버지가 방에 들어가시다
([Token(form='아버지', tag='NNG', start=0, len=3),
  Token(form='가', tag='JKS', start=3, len=1),
  Token(form='방', tag='NNG', start=5, len=1),
  Token(form='에', tag='JKB', start=6, len=1),
  Token(form='들어가', tag='VV', start=8, len=3),
  Token(form='시', tag='EP', start=11, len=1),
  Token(form='다', tag='EF', start=12, len=1)],
-34.723323822021484)


>>> 안녕하세요
([Token(form='안녕', tag='NNG', start=0, len=2),
  Token(form='하', tag='XSA', start=2, len=1),
  Token(form='세요', tag='EF', start=3, len=2)],
-28.500656127929688)




파이썬 코드를 사용하는 방법도 간단합니다.

 

from kiwipiepy import Kiwi


kiwi = Kiwi()


result = kiwi.tokenize("아버지가 방에 들어가신다.")
print(result)



실행결과입니다.

 

[Token(form='아버지', tag='NNG', start=0, len=3), Token(form='가', tag='JKS', start=3, len=1), Token(form='방', tag='NNG', start=5, len=1), Token(form='에', tag='JKB', start=6, len=1), Token(form='들어가', tag='VV', start=8, len=3), Token(form='시', tag='EP', start=11, len=1), Token(form='ᆫ다', tag='EF', start=11, len=2), Token(form='.', tag='SF', start=13, len=1)]



“아버지가 방에 들어가신다”를 다음처럼 형태소로 분리후, 품사를 분석하고 있습니다.

 

아버지  NNG(일반 명사)

가        JKS(주격 조사)

방        NNG(일반 명사)

에        JKB(부사격 조사)

들어가  VV(동사)

시        EP(선어말 어미)

ㄴ다     EF(종결 어미)

.          SF(종결 부호)



형태소 분석 결과를 보면 분리된 형태소마다 tag 항목이 있습니다. tag 항목에 올 수 있는 품사의 종류는 다음과 같습니다. 

 

 




사용자 단어를 추가하는 방법입니다. 아래 예제코드를 실행해보면 “국어 숙제”를 “국어”와 “숙제”로 따로 분리합니다. 

 

from kiwipiepy import Kiwi


kiwi = Kiwi()


result = kiwi.tokenize("집에 가면 국어 숙제부터 해라")
print(result)

 

[Token(form='집', tag='NNG', start=0, len=1), Token(form='에', tag='JKB', start=1, len=1), Token(form='가', tag='VV', start=3, len=1), Token(form='면', tag='EC', start=4, len=1), Token(form='국어', tag='NNG', start=6, len=2), Token(form='숙제', tag='NNG', start=9, len=2), Token(form='부터', tag='JX', start=11, len=2), Token(form='하', tag='VV', start=14, len=1), Token(form='어라', tag='EF', start=14, len=2)]




“국어 숙제”를 사용자 단어로 추가하고 나면 “국어 숙제”로 분리하는 것을 볼 수 있습니다.

 

from kiwipiepy import Kiwi


kiwi = Kiwi()
kiwi.add_user_word('국어 숙제', 'NNP') # 단어를 등록합니다.

result = kiwi.tokenize("집에 가면 국어 숙제부터 해라")
print(result)



[Token(form='집', tag='NNG', start=0, len=1), Token(form='에', tag='JKB', start=1, len=1), Token(form='가', tag='VV', start=3, len=1), Token(form='면', tag='EC', start=4, len=1), Token(form='국어 숙제', tag='NNP', start=6, len=5), Token(form='부터', tag='JX', start=11, len=2), Token(form='하', tag='VV', start=14, len=1), Token(form='어라', tag='EF', start=14, len=2)]




좀 더 자세한 내용은 아래 링크를 확인하세요.

https://bab2min.github.io/kiwipiepy/v0.18.0/kr/#kiwipiepy


반응형