Skip to contents

불용어 사전

elbirdtokenize() 함수는 stopwords 파라미터를 받습니다.

library(elbird)

tokenize("안녕하세요.", stopwords = TRUE)
#> # 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 클래스를 사용하도록 되어 있습니다. 그럼 Stopwords 클래스를 만들어보겠습니다.

sw <- Stopwords$new()
sw
#> <stopwords dict>
#>   word count: 106

elbirdkiwi가 제공하는 내장 불용어 사전을 기본으로 가져옵니다. 모두 106개의 불용어를 가지고 있네요.

불용어가 무엇이 있는지 확인하려면 get() 메소드를 사용하면 됩니다.

sw$get()
#> # A tibble: 106 × 2
#>    form  tag  
#>    <chr> <chr>
#>  1 NA    SF   
#>  2 NA    SP   
#>  3 NA    SS   
#>  4 NA    SE   
#>  5 NA    SO   
#>  6 NA    SW   
#>  7 하    XSV  
#>  8 을    JKO  
#>  9 ᆫ     ETM  
#> 10 다    EF   
#> # … with 96 more rows
#> # ℹ Use `print(n = ...)` to see more rows

tibble 자료형을 기본으로 합니다. 내용을 보면 formtag로 이루어져있습니다. form은 7번째 줄을 보시면 아시겠지만, 해당 글자를 뜻합니다. tag는 형태소를 뜻하겠죠.

formNA인 형태소가 있는데요. 이것은 이 형태소 전체를 불용어로 등록하는 것입니다. 현재 기본 사전에는 마침표등을 뜻하는 형태소는 모두 불용어로 처리하고 있습니다.

그럼 자체 단어를 추가해보겠습니다. 그 전에, 비어있는 불용어 사전을 먼저 만들고 시작하겠습니다.

sw <- Stopwords$new(use_system_dict = FALSE)
sw
#> <stopwords dict>
#>   word count: 0

이제 추가하면 눈에 띌테니 좋네요.

sw$add("한숨")
sw
#> <stopwords dict>
#>   word count: 1
sw$get()
#> # A tibble: 1 × 2
#>   form  tag  
#>   <chr> <chr>
#> 1 한숨  NNP

form인 글자를 add() 메소드를 이용해 등록해주면 기본 형태소인 NNP와 함께 등록됩니다.

다른 형태소는 형태소를 추가해서 add() 메소드를 사용하시면 됩니다.

## 들숨의 형태소는 vv가 아닙니다! 예시로 넣은 것일 뿐...
sw$add("들숨", Tags$vv)
sw$
sw$get()

현재 Stopwords 객체가 자신이 관리하는 사전을 저장할 수 있습니다.

sw$add(tag = Tags$vv)
sw$save_dict("user_dict.txt")

사전은 아래와 같이 저장됩니다. 이 양식은 kiwipiepy와 호환됩니다. 컬럼 이름은 없고, form/tag 양식이며 tag만 등록하는 경우, 아래와 같이 생략하면 됩니다.

/VV
한숨/NNP

이렇게 구성된 사전은 Stopwords에서 불러와 사용할 수 있습니다.

sw <- Stopwords$new(F)
sw
#> <stopwords dict>
#>   word count: 0
sw$add_from_dict("user_dict.txt")
sw
#> <stopwords dict>
#>   word count: 2
sw$get()
#> # A tibble: 2 × 2
#>   form  tag  
#>   <chr> <chr>
#> 1 한숨  NNP  
#> 2 NA    VV

그럼 이제 사용해 볼까요?

tokenize("안녕하세요", stopwords = F)
#> # A tibble: 4 × 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

특이하게 안녕이 필요없다고 생각하고 불용어 사전을 추가해보겠습니다.

sw <- Stopwords$new(F)
sw$add("안녕", Tags$nng)
tokenize("안녕하세요", stopwords = sw)
#> # A tibble: 3 × 5
#>   sent  form  tag   start   len
#>   <chr> <chr> <chr> <int> <int>
#> 1 1     하    XSA       3     1
#> 2 1     시    EP        4     1
#> 3 1     어요  EF        4     2

이제 불용어 사전은 Stopwords 를 사용해주세요.