vignettes/articles/stopwords.Rmd
stopwords.Rmd
불용어 사전
elbird의 tokenize()
함수는 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
elbird는 kiwi가 제공하는 내장 불용어 사전을 기본으로 가져옵니다. 모두 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
자료형을 기본으로 합니다. 내용을 보면 form
과 tag
로 이루어져있습니다. form
은 7번째 줄을 보시면 아시겠지만, 해당 글자를 뜻합니다. tag
는 형태소를 뜻하겠죠.
form
이 NA
인 형태소가 있는데요. 이것은 이 형태소 전체를 불용어로 등록하는 것입니다. 현재 기본 사전에는 마침표등을 뜻하는 형태소는 모두 불용어로 처리하고 있습니다.
그럼 자체 단어를 추가해보겠습니다. 그 전에, 비어있는 불용어 사전을 먼저 만들고 시작하겠습니다.
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
를 사용해주세요.