새소식

ETC/이것저것

Kiwi 형태소 분석기

  • -

이전에 학교 수업때 사용했던 Konlpy 형태소 분석기는 Java기반이라 설치 과정에서 고생을 했던 기억이 있다.
Kiwi 형태소 분석기는 이와 달리 설치가 용이하다.

설치

!pip install kiwipiepy

형태소 분석 : tokenize( )

from kiwipiepy import Kiwi

kiwi = Kiwi()
kiwi.tokenize("키위 형태소 분석기를 사용해보도록 하겠습니다.")
[Token(form='키위', tag='NNG', start=0, len=2),
 Token(form='형태소', tag='NNG', start=3, len=3),
 Token(form='분석기', tag='NNG', start=7, len=3),
 Token(form='를', tag='JKO', start=10, len=1),
 Token(form='사용', tag='NNG', start=12, len=2),
 Token(form='하', tag='XSV', start=14, len=1),
 Token(form='어', tag='EC', start=14, len=1),
 Token(form='보', tag='VX', start=15, len=1),
 Token(form='도록', tag='EC', start=16, len=2),
 Token(form='하', tag='VX', start=19, len=1),
 Token(form='겠', tag='EP', start=20, len=1),
 Token(form='습니다', tag='EF', start=21, len=3),
 Token(form='.', tag='SF', start=24, len=1)]

 

normalize_coda 옵션: 덧붙은 받침 때문에 분석이 깨지는 경우를 방지
kiwi.tokenize("아니 진짜 너무 웃기넼ㅋㅋㅋㅋㅋㅋㅋ", normalize_coda=True)
[Token(form='아니', tag='IC', start=0, len=2),
 Token(form='진짜', tag='MAG', start=3, len=2),
 Token(form='너무', tag='MAG', start=6, len=2),
 Token(form='웃기', tag='VV', start=9, len=2),
 Token(form='네', tag='EF', start=11, len=1),
 Token(form='ㅋㅋㅋㅋㅋㅋㅋㅋ', tag='SW', start=11, len=8)]

 

stopwords 옵션 : Stopwords 클래스도 제공하여 불용어 관리가 가능하다.

from kiwipiepy.utils import Stopwords
stopwords = Stopwords()

kiwi.tokenize("분석 결과에서 불용어만 제외하고 출력할 수도 있다.", stopwords=stopwords)

불용어 클래스에 add, remove 메소드를 이용해 불용어 목록에 단어를 추가하거나 삭제할 수 있다.

stopwords.add(('결과', 'NNG'))
kiwi.tokenize("분석 결과에서 불용어만 제외하고 출력할 수도 있다.", stopwords=stopwords)

 

각 토큰은 여러 정보를 담고 있으며 각각 호출할 수 있다.

tokens = kiwi.tokenize("코드를 작성하고 있는데 옆에서 콩이가 쳐다보고 있다.")
tokens[0]
Token(form='코드', tag='NNG', start=0, len=2)

 

 

문장 분리 : split_into_sents( )

kiwi.split_into_sents("콩이는 밥을 먹고 있다. 나는 그 모습을 흐뭇하게 바라보고 있다.")
[Sentence(text='콩이는 밥을 먹고 있다.', start=0, end=13, tokens=None),
 Sentence(text='나는 그 모습을 흐뭇하게 바라보고 있다.', start=14, end=36, tokens=None)]

 


reference : https://github.com/bab2min/kiwipiepy

728x90
Contents