[패키지 소개] 빠르고 편리한 형태소 분석기 elbird

R package cran kiwi elbird morphological analyzer

cpp 기반의 한글 형태소 분석기인 kiwi를 사용하여 빠르고 편리한 R 패키지인 elbird를 제작하였습니다.

true
2022-04-05

혹시 괜찮으시면 위 이미지 클릭해서 좋아요 한번 부탁드립니다. :)

한줄요약

  1. 이제 한번에 설치해서 사용하는 elbird로 편안한 텍스트마이닝하세요~~

elbird 패키지

elbird를 소개합니다. elbird는 cpp로 개발된 kiwi를 사용하는 형태소 분석기로, python 버전 kiwi인 kiwipiepy를 사용하는 형태로 2020년 6월에 시작하였습니다.

하지만 conda를 설치해야 한다는 의존성 부분이 존재했기 때문에, cpp를 사용하는 방법을 계속 공부하였습니다. 그 부산물로 go 패키지인 kiwigo도 제작해보면서 개발에 필요한 내용을 파악할 수 있었습니다. 역시 kiwigo 개발을 하드케리해주신 kkweon님께 진심으로 감사드립니다.

드디어, 다른 설치 없이 바로 사용할 수 있는 빠르고 편리한 형태소 분석기 R 패키지 elbird의 기본 골격을 갖추었습니다.

현재 크랜 버전은 0.1.3 입니다.

install.packages("elbird")

바로 사용해보겠습니다.

library(elbird)
tokenize("새로운 형태소 분석기인 elbird를 소개합니다.")
# A tibble: 6 × 5
  sent  form   tag   start   len
  <chr> <chr>  <chr> <int> <int>
1 1     새롭   VA        1     3
2 1     형태소 NNG       5     3
3 1     분석기 NNG       9     3
4 1     elbird SL       14     6
5 1     소개   NNG      22     2
6 1     ᆸ니다  EF       24     3

tokenize() 함수는 아마 형태소 분석기가 필요하신 분들이 가장 많이 사용하는 함수일 것입니다.

kiwi는 내장 불용어사전을 제공하고 있습니다. 이에 elbird도 불용어사전을 관리하고 사용하는 방법을 함께 제공합니다. 우선 tokenize() 함수는 stopwords 파라미터를 제공하며, 기본값은 TRUE입니다. 내장 불용어 사전을 사용한다는 뜻입니다. 사용하지 않으려면 FALSE를 주시면 됩니다.

tokenize("안녕하세요.")
# A tibble: 3 × 5
  sent  form  tag   start   len
  <chr> <chr> <chr> <int> <int>
1 1     안녕  NNG       1     2
2 1     시    EP        4     1
3 1     어요  EF        4     2
tokenize("안녕하세요.", stopwords = FALSE)
# A tibble: 5 × 5
  sent  form  tag   start   len
  <chr> <chr> <chr> <int> <int>
1 1     안녕  NNG       1     2
2 1     하    XSA       3     1
3 1     시    EP        4     1
4 1     어요  EF        4     2
5 1     .     SF        6     1

비교해서 보면 문장부호가 분석 결과로 포함된 것을 알 수 있습니다. 내장 불용어사전에는 문장부호가 등록되어 있어 stopwords = TRUE 일 때 결과에서 제외되는 것입니다.

elbird는 처음부터 tidytext와 함께 사용하는 것을 고려하여 제작하였습니다. tidytextunnest_tokens() 함수와는 이렇게 사용할 수 있습니다.

library(magrittr)
library(tidytext)
library(tibble)
tar <- tibble(content = "유구한 역사와 전통에 빛나는 우리 대한국민은 3ㆍ1운동으로 건립된...")

tar %>% 
  unnest_tokens(
    input = content,
    output = word,
    token = tokenize_tidy
    )
# A tibble: 9 × 1
  word    
  <chr>   
1 유구/xr 
2 역사/nng
3 전통/nng
4 빛나/vv 
5 국민/nng
6 3/sn    
7 1/sn    
8 운동/nng
9 건립/nng

kiwi 기능에서 아직 구현되지 않은 기능들이 있습니다. 모두 구현하고, 또 소개하겠습니다. 감사합니다.

개발 뒷이야기

형태소 분석기는 텍스트 분석에 꼭 필요한 도구입니다. R에서는 KoNLP가 가장 유명하고 많이 쓰이고 있습니다. java로 카이스트에서 제작한 HanNanum 형태소 분석기를 R 패키지로 만든 것입니다. 그래서 jdk를 컴퓨터에 설치해야만 사용할 수 있습니다. 아쉽게도 2020년 2월 1일 cran에서 내려간 후 유지/보수가 되지 않고 있는 상황입니다. 소스가 자바로 되어 있다보니, 제가 수정하고 접근하기에도 쉽지 않더군요. 특히 형태소 분석기를 설치하는 일이 jdk 때문에 초보자에게 아주 어려운 일이 되곤 합니다. 다른 의존성이 없었으면 좋겠다는 생각이 들었습니다.

KoNLP와는 다르게 은전한닢 프로젝트를 사용한 RcppMeCab도 있습니다. 일본어 분석기인 mecab를 한국어 맞게 사용하려고 튜닝한 은전한닢도 mecab-ko 라는 이름으로 널리 사용되는 편입니다. cpp로 작성한 빠른 성능, 중국어/일본어도 사용가능, 띄어쓰기 오류에 강한 분석 능력, 설치의 용이함이 장점이라고 할 수 있습니다. 대신 사용자 사전을 관리하기 어렵고, 문제가 생겼을 때 해결하기 어려운 에러등이 발생하기도 합니다. 역시 mecab과 사전 설치라는 의존성이 발목을 잡기도 합니다.

사용하기 쉽고, 다른 추가 설치를 하지 않아도 되고, 사용자 사전 관리 기능도 잘 되어 있는 패키지가 있으면 좋겠지 않나요?

그렇게 elbird 개발을 시작하였습니다.

우선 잘 되어 있는 다른 형태소 분석기를 찾기 시작했습니다. 저는 형태소 분석기를 직접 만들 능력이 없었기 때문입니다. cpp로 제작하고 오픈소스이며, 사용자 기능이 잘 되어 있는 패키지를 찾다가 조건에 맞는 것을 찾았습니다. 바로 kiwi입니다. 이 자리를 빌어 좋은 형태소 분석기를 개발해 주시고, 계속 개선하고 계시는 bab2min님께 깊은 감사의 인사를 드립니다.

Corrections

If you see mistakes or want to suggest changes, please create an issue on the source repository.

Reuse

Text and figures are licensed under Creative Commons Attribution CC BY-NC-ND 4.0. Source code is available at https://github.com/mrchypark/mrchypark.github.io, unless otherwise noted. The figures that have been reused from other sources don't fall under this license and can be recognized by a note in their caption: "Figure from ...".

Citation

For attribution, please cite this work as

Park (2022, April 5). mrchypark: [패키지 소개] 빠르고 편리한 형태소 분석기 elbird. Retrieved from https://mrchypark.github.io/post/패키지-소개-빠르고-편리한-형태소-분석기-elbird/

BibTeX citation

@misc{park2022[패키지,
  author = {Park, Chanyub},
  title = {mrchypark: [패키지 소개] 빠르고 편리한 형태소 분석기 elbird},
  url = {https://mrchypark.github.io/post/패키지-소개-빠르고-편리한-형태소-분석기-elbird/},
  year = {2022}
}