bitNLP
λ ν
μ€νΈ λ°μ΄ν°λ₯Ό νμ(Explore Documents)
νκ³ ,
μμ°μ΄ μ²λ¦¬(Natural Language Processing)
λ° ννμλΆμ
, κ°μ±λΆμ
μ
μννλ, νκΈ ν
μ€νΈ λ°μ΄ν° λΆμ λꡬλ€μ λͺ¨μμ
λλ€.
bitNLP
μ λ€μ κΈ°λ₯μ bitNLP ν¨ν€μ§μ λΉλ€νΈμΈ
Introduce bitNLPμ μκ°λμ΄ μμ΅λλ€.
- ν μ€νΈ λ°μ΄ν° μ μ²λ¦¬ κΈ°λ₯
- ν μ€νΈ λ°μ΄ν° νμ κΈ°λ₯
- ννμλΆμ κΈ°λ₯
- κ°μ±λΆμ κΈ°λ₯
- ννμ μ¬μ κ΄λ¦¬ κΈ°λ₯
Github 리νμ§ν 리μμ λ°°ν¬νλ ν¨ν€μ§λ₯Ό λ€μκ³Ό κ°μ΄ μ€μΉν©λλ€.
remotes::install_github("bit2r/bitNLP")
bitNLPλ₯Ό μ¬μ©νκΈ° μν΄μλ λ€μμ λ 리μμ€λ₯Ό μ€μΉν΄μΌ ν©λλ€.
- μμ νλ’ ννμλΆμκΈ° μμ€ν
κ³Ό μ¬μ
- mecab-ko νΉμ mecab-ko-msvc
- mecab-ko-dic
- RcppMeCab ν¨ν€μ§
- Rμμ mecab-ko μ°λμ μν R ν¨ν€μ§
μμ νλ’ ννμλΆμκΈ° μμ€ν κ³Ό μ¬μ μ bitNLP ν¨ν€μ§μ λΉλ€νΈμΈ Install mecab-koμ μ€λͺ λμ΄ μμ΅λλ€.
μ¬μ μ μ€μΉν΄μΌ νλ 리μμ€λ λ€μμ μμμ λ°©λ²λλ‘ μ€μΉνλ κ²μ μΆμ²ν©λλ€.
- μμ νλ’ ννμλΆμκΈ° μμ€ν κ³Ό μ¬μ
library("bitNLP")
install_mecab_ko()
- RcppMeCab ν¨ν€μ§ μ€μΉ
install.packages("RcppMeCab")
νκΈ λ¬Έμ₯μ λμ΄μ°κΈ° κ·μΉμ λ§κ² μλμΌλ‘ λμ΄μ°κΈ° 보μ
library(bitNLP)
get_spacing("μ΅κ·Όμμ±μΈμμ νλκ°λμμ§μλ°λΌλ§μμμ±λ°μ΄ν°κ°ν
μ€νΈλ‘λ³νλκ³ λΆμλκΈ°μμνλλ°,μ΄λ₯Όμν΄μλμνλλμ΄μ°κΈ°μμ§μκ±°μνμμ μΈκ²λμ΄λ²λ Έλ€")
#> [1] "μ΅κ·Ό μμ± μΈμ μ νλκ° λμ μ§μ λ°λΌ λ§μ μμ± λ°μ΄ν°κ° ν
μ€νΈλ‘ λ³νλκ³ λΆμλκΈ° μμνλλ°, μ΄λ₯Ό μν΄ μ λμνλ λμ΄μ°κΈ° μμ§μ κ±°μ νμμ μΈ κ² λμ΄ λ²λ Έλ€"
str <- "κΈμ°κΈ°μμλ§μΆ€λ²κ³Όλμ΄μ°κΈ°λ₯Όμ¬λ°λ₯΄κ²νλκ²μμ’μκΈμ΄λ μμλμ건μ€νλμ΄λ€.νμ§λ§μμ¦νμλ€μλΆμ‘±νμ΄λ¬Έκ·μ μ§μμΌλ‘μΈν΄λ§μΆ€λ²κ³Όλμ΄μ°κΈ°μμλ§μμ€λ₯λ₯Όλ²νκΈ°λνλ€.λ³Έμ°κ΅¬λκ·Έμ€λμ΄μ°κΈ°κ°κΈμμΈμνλλ°μ€μνμν μνλκ²μΌλ‘νλ¨νμ¬,λνμλ€μ΄λμ΄μ°κΈ°μλν΄μμ΄λμ λμ ννκ²μΈμνκ³ μλμ§,μ€μ μ€λ₯μ€νλμ΄λ νμ§μλν΄μ΄ν΄μκ·Έμ€λ₯λ₯Όκ°μ ν μμλκ΅μ‘λ°©μμλ§λ ¨ν νμκ°μλ€κ³ νλ¨νμλ€."
get_spacing(str)
#> [1] "κΈμ°κΈ°μμ λ§μΆ€λ²κ³Ό λμ΄μ°κΈ°λ₯Ό μ¬λ°λ₯΄κ² νλ κ²μ μ’μ κΈμ΄ λ μ μλ μ건 μ€ νλμ΄λ€. νμ§λ§ μμ¦ νμλ€μ λΆμ‘±ν μ΄λ¬Έ κ·μ μ§μμΌλ‘ μΈν΄ λ§μΆ€λ²κ³Ό λμ΄μ°κΈ°μμ λ§μ μ€λ₯λ₯Ό λ²νκΈ°λ νλ€. λ³Έ μ°κ΅¬λ κ·Έ μ€ λμ΄μ°κΈ°κ° κΈμ μΈμνλ λ° μ€μν μν μ νλ κ²μΌλ‘ νλ¨νμ¬, λνμλ€μ΄ λμ΄μ°κΈ°μ λν΄μ μ΄λ μ λ μ ννκ² μΈμνκ³ μλμ§, μ€μ μ€λ₯ μ€νλ μ΄λ νμ§μ λν΄ μ΄ν΄μ κ·Έ μ€λ₯λ₯Ό κ°μ ν μ μλ κ΅μ‘ λ°©μμ λ§λ ¨ν νμκ° μλ€κ³ νλ¨νμλ€."
μμ νλ’ ννμ λΆμκΈ°λ₯Ό νΈμΆνμ¬ ννμ λΆμμ μνν©λλ€. bitNLPλ μ΄ ννμλΆμμ μ½κ³ ν¨κ³Όμ μΌλ‘ μννλ κ²μ λμμ€λλ€.
ννμλΆμμ λΉλ€νΈμΈ Morphological Analysisμ μ€λͺ λμ΄ μμ΅λλ€.
docs <- c("λμ κ°μ΅λλ€. μμ, μ¬λνλ λμ λμ κ°μ΅λλ€.",
"νΈλ₯Έ μ°λΉμ κΉ¨μΉκ³ λ¨νλ무 μ²μ ν₯νμ¬ λ μμ κΈΈμ κ±Έμ΄μ, μ°¨λ§ λ¨μΉκ³ κ°μ΅λλ€.")
morpho_mecab(docs, type = "morpheme")
#> [[1]]
#> NNG JX VV+EP EF SF IC SC NNG
#> "λ" "μ" "κ°" "μ΅λλ€" "." "μμ" "," "μ¬λ"
#> XSV ETM NP JKG NNG JX VV+EP EF
#> "ν" "λ" "λ" "μ" "λ" "μ" "κ°" "μ΅λλ€"
#> SF
#> "."
#>
#> [[2]]
#> VA+ETM NNG NNG JKO VV EC NNG
#> "νΈλ₯Έ" "μ°" "λΉ" "μ" "κΉ¨μΉ" "κ³ " "λ¨νλ무"
#> NNG JKO VV EC NP+JX VA ETM
#> "μ²" "μ" "ν₯ν" "μ¬" "λ" "μ" "μ"
#> NNG JKO VV+EC SC MAG VV EC
#> "κΈΈ" "μ" "κ±Έμ΄μ" "," "μ°¨λ§" "λ¨μΉ" "κ³ "
#> VV+EP EF SF
#> "κ°" "μ΅λλ€" "."
νκΈ ν μ€νΈμμλ λͺ μ¬λ§μΌλ‘ λ¬Έλ§₯μ νμ νλ κ²μ΄ μ μ©ν©λλ€. morpho_mecab() ν¨μμ κΈ°λ³Έ μΈμλ μ΄λ₯Ό μ§μν©λλ€.
morpho_mecab(docs)
#> [[1]]
#> NNG NNG NNG
#> "λ" "μ¬λ" "λ"
#>
#> [[2]]
#> NNG NNG NNG NNG NNG
#> "μ°" "λΉ" "λ¨νλ무" "μ²" "κΈΈ"
morpho_mecab()λ μ¬λ¬ κ°μ λ¬Έμλ₯Ό νλλ‘ ν©μ³μ ν ν¬λμ΄μ¦ν μλ μμ΅λλ€.
morpho_mecab(docs, indiv = FALSE)
#> NNG NNG NNG NNG NNG NNG NNG
#> "λ" "μ¬λ" "λ" "μ°" "λΉ" "λ¨νλ무" "μ²"
#> NNG
#> "κΈΈ"
λͺ
μ¬λ₯Ό μΆμΆνμ¬ μλν΄λΌμ°λλ₯Ό κ·Έλ €λ΄
λλ€. bitNLPμ μλ‘λ λν΅λ Ή μ°μ€λ¬Έ
λ°μ΄ν°μ
μΈ president_speech
μμ μμμ μ°μ€λ¬Έ 100κ°μμ μΌλ°λͺ
μ¬λ₯Ό
μΆμΆ ν μλν΄λΌμ°λλ₯Ό κ·Έλ € λ΄
λλ€.
library(dplyr)
president_speech$doc[1:100] %>%
morpho_mecab(indiv = FALSE) %>%
table() %>%
wordcloud2::wordcloud2(fontFamily = "NanumSquare")
ν μ€νΈ λ°μ΄ν° νμ κΈ°λ₯μ λΉλ€νΈμΈ Explore Documentsμ μ€λͺ λμ΄ μμ΅λλ€.
ν μ€νΈ λ°μ΄ν° νμ κΈ°λ₯μ Text Data ExplorerλΌλ μ΄λ¦μ Shiny μ±μ΄ μ 곡ν©λλ€. κ·Έλ¦¬κ³ κ·Έ κΈ°λ₯μ λ€μκ³Ό κ°μ΅λλ€.
- λ°μ΄ν° ꡬ쑰 νμ νκΈ°
- λ°μ΄ν° νμκ³Ό μ μ νκΈ°
- ν¨ν΄κ²μκ³Ό λ¬Έμμ΄ λ체
- ννμλΆμμ μ΄μ©ν λ°μ΄ν° νμ
- 곡λλ°μλΆμμ μ΄μ©ν λ°μ΄ν° νμ
- n-gramsλ₯Ό μ΄μ©ν λ°μ΄ν° νμ
- R λͺ λ Ήμ΄ μ€ν
- Text Data Explorer κΈ°λ₯ μ€μμ νμ λ° μΉν κΈ°λ₯ νλ©΄μ λν μμλ λ€μκ³Ό κ°μ΅λλ€.:
tidytext
ν¨ν€μ§μμ νμ
μ μν κΈ°λ₯μ λΉλ€νΈμΈ
Collaboration with tidytext packageμ μ€λͺ
λμ΄
μμ΅λλ€.
bitNLPλ ν ν¬λμ΄μ λ‘ λ€μκ³Ό κ°μ ν¨μλ₯Ό μ§μν©λλ€.
- ννμ ν ν¬λμ΄μ
- morpho_mecab()
- part-of-speech tagger λ¨μμ ν ν¬λμ΄μ
- λͺ
μ¬ n-grams ν ν¬λμ΄μ
- tokenize_noun_ngrams()
docs <- c("λμ κ°μ΅λλ€. μμ, μ¬λνλ λμ λμ κ°μ΅λλ€.",
"νΈλ₯Έ μ°λΉμ κΉ¨μΉκ³ λ¨νλ무 μ²μ ν₯νμ¬ λ μμ κΈΈμ κ±Έμ΄μ, μ°¨λ§ λ¨μΉκ³ κ°μ΅λλ€.")
tokenize_noun_ngrams(docs)
#> [[1]]
#> [1] "λ μ¬λ" "μ¬λ λ"
#>
#> [[2]]
#> [1] "μ° λΉ" "λΉ λ¨νλ무" "λ¨νλ무 μ²" "μ² κΈΈ"
# simplify = TRUE
tokenize_noun_ngrams(docs[1], simplify = TRUE)
#> [1] "λ μ¬λ" "μ¬λ λ"
str <- "μ νΌλΆλΆλ μ£Όλ§λΆλΆλ λμ΄κ³΅μ μμ μ΄μ©κΆμ μ¦κ²¨ ꡬ맀ν©λλ€."
tokenize_noun_ngrams(str)
#> [[1]]
#> [1] "μ νΌ λΆλΆ" "λΆλΆ μ£Όλ§" "μ£Όλ§ λΆλΆ" "λΆλΆ λμ΄" "λμ΄ κ³΅μ" "곡μ μμ "
#> [7] "μμ μ΄μ©" "μ΄μ© ꡬ맀"
# λΆμ©μ΄ μ²λ¦¬
tokenize_noun_ngrams(str, stopwords = "ꡬ맀")
#> [[1]]
#> [1] "μ νΌ λΆλΆ" "λΆλΆ μ£Όλ§" "μ£Όλ§ λΆλΆ" "λΆλΆ λμ΄" "λμ΄ κ³΅μ" "곡μ μμ "
#> [7] "μμ μ΄μ©"
# μ¬μ©μ μ μ μ¬μ μ¬μ©
dic_path <- system.file("dic", package = "bitNLP")
dic_file <- glue::glue("{dic_path}/buzz_dic.dic")
tokenize_noun_ngrams(str, simplify = TRUE, user_dic = dic_file)
#> [1] "μ νΌλΆλΆ μ£Όλ§λΆλΆ" "μ£Όλ§λΆλΆ λμ΄" "λμ΄ κ³΅μ"
#> [4] "곡μ μμ μ΄μ©κΆ" "μμ μ΄μ©κΆ ꡬ맀"
# n_min
tokenize_noun_ngrams(str, n_min = 1, user_dic = dic_file)
#> [[1]]
#> [1] "μ νΌλΆλΆ" "μ νΌλΆλΆ μ£Όλ§λΆλΆ" "μ£Όλ§λΆλΆ"
#> [4] "μ£Όλ§λΆλΆ λμ΄" "λμ΄" "λμ΄ κ³΅μ"
#> [7] "곡μ" "곡μ μμ μ΄μ©κΆ" "μμ μ΄μ©κΆ"
#> [10] "μμ μ΄μ©κΆ ꡬ맀" "ꡬ맀"
# ngram_delim
tokenize_noun_ngrams(str, ngram_delim = ":", user_dic = dic_file)
#> [[1]]
#> [1] "μ νΌλΆλΆ:μ£Όλ§λΆλΆ" "μ£Όλ§λΆλΆ:λμ΄" "λμ΄:곡μ"
#> [4] "곡μ:μμ μ΄μ©κΆ" "μμ μ΄μ©κΆ:ꡬ맀"
# bi-grams
tokenize_noun_ngrams(str, n = 2, ngram_delim = ":", user_dic = dic_file)
#> [[1]]
#> [1] "μ νΌλΆλΆ:μ£Όλ§λΆλΆ" "μ£Όλ§λΆλΆ:λμ΄" "λμ΄:곡μ"
#> [4] "곡μ:μμ μ΄μ©κΆ" "μμ μ΄μ©κΆ:ꡬ맀"
bitNLPμ νκΈ unnest_tokens
μλ λͺ
μ¬ n-grams ν ν¬λμ΄μ¦λ₯Ό μ§μνλ
unnest_noun_ngrams()
ν¨μκ° μμ΅λλ€. μ΄ ν¨μλ tidytext
ν¨ν€μ§μ
unnest_tokens
ν¨μκ΅°μ μ¬μ©λ²κ³Ό κ±°μ λμΌν©λλ€.
library(dplyr)
president_speech %>%
select(title, doc) %>%
filter(row_number() <= 2) %>%
unnest_noun_ngrams(
noun_bigram,
doc,
n = 2,
ngram_delim = ":",
type = "noun2"
)
#> # A tibble: 264 Γ 2
#> title noun_bigram
#> <chr> <chr>
#> 1 "2005 νμΌ μ°μ μ ν΄ κ°λ§μ μΆμ¬ " μΌ:μ°μ
#> 2 "2005 νμΌ μ°μ μ ν΄ κ°λ§μ μΆμ¬ " μ°μ :ν΄
#> 3 "2005 νμΌ μ°μ μ ν΄ κ°λ§μ μΆμ¬ " ν΄:κ°λ§μ
#> 4 "2005 νμΌ μ°μ μ ν΄ κ°λ§μ μΆμ¬ " κ°λ§μ:μΆν
#> 5 "2005 νμΌ μ°μ μ ν΄ κ°λ§μ μΆμ¬ " μΆν:νμ¬
#> 6 "2005 νμΌ μ°μ μ ν΄ κ°λ§μ μΆμ¬ " νμ¬:μΆν
#> 7 "2005 νμΌ μ°μ μ ν΄ κ°λ§μ μΆμ¬ " μΆν:μ°Έμ
#> 8 "2005 νμΌ μ°μ μ ν΄ κ°λ§μ μΆμ¬ " μ°Έμ:μ¬λ¬λΆ
#> 9 "2005 νμΌ μ°μ μ ν΄ κ°λ§μ μΆμ¬ " μ¬λ¬λΆ:λͺ¨λ
#> 10 "2005 νμΌ μ°μ μ ν΄ κ°λ§μ μΆμ¬ " λͺ¨λ:νμ
#> # βΉ 254 more rows
ν μ€νΈ λ°μ΄ν° μ μ λ₯Ό μν ν μ€νΈ λ°μ΄ν° μ‘°μμ λΉλ€νΈμΈ Manipulate Documentsμ μ€λͺ λμ΄ μμ΅λλ€.
bitNLPμ ν μ€νΈ λ°μ΄ν° μ‘°μ κΈ°λ₯μ μ 리νλ©΄ λ€μκ³Ό κ°μ΅λλ€.
- λ¬Έμ λ¨μμ μ μ²λ¦¬
- λ¬Έμ νν°λ§ (Filter Documents)
- ν
μ€νΈ λ¨μμ μ μ²λ¦¬
- ν μ€νΈ λ체 (Replace Texts)
- ν μ€νΈ μ°κ²° (Concatenate Texts)
- ν μ€νΈ λΆλ¦¬ (Split Texts)
- ν μ€νΈ μ κ±° (Remove Texts)
bitNLPλ λμ©λμ ν μ€νΈ λ°μ΄ν°μμ μκΈ° λ°μ΄ν° μ‘°μμ μνν μ μλλ‘ λμμ€λλ€. κ·Έλμ λ€μκ³Ό κ°μ λ°©λ²μΌλ‘ μμ ν©λλ€.
- λ³λ ¬ μ²λ¦¬λ₯Ό ν΅ν μλμ κ°μ
- λ°μ΄ν° μ‘°μ λ£°μ λ±λ‘ν λ©ν(meta) νμΌ νμ©
λ³Έ μκ°κΈμμλ λ¬Έμ νν°λ§μ λν μ¬λ‘λ§ μκ°ν©λλ€. λ€λ₯Έ ν μ€νΈ μ‘°μμ λΉλ€νΈλ₯Ό μ°Έκ³ νμμμ.
bitNLP ν¨ν€μ§λ μν λ©ν λ°μ΄ν° νμΌμ μ 곡νλλ°, λ¬Έμ νν°λ§μ μν μν λ©ν λ°μ΄ν° νμΌμ μ½μ΄ λ΄ λλ€.
library(bitNLP)
meta_path <- system.file("meta", package = "bitNLP")
fname <- glue::glue("{meta_path}/preparation_filter.csv")
## λ°μ΄ν° νν°λ§ λ©ν μ κ· λ±λ‘
set_meta("filter", fname, fileEncoding = "utf8")
get_meta()
ν¨μλ μΈμ
μμμ λ±λ‘λ λ©ν λ°μ΄ν°λ₯Ό μ‘°νν©λλ€.
## κΈ° λ±λ‘λ λ°μ΄ν° νν°λ§ λ©ν μ‘°ν
get_meta("filter")
#> rule_nm
#> 1 μ λ¬ΈκΈ°μ¬
#> 2 μ νν보
#> 3 μ€λ¬Έμ‘°μ¬
#> 4 μΆμ²
#> 5 μ΄λ²€νΈ
#> 6 λ°©μ‘
#> pattern
#> 1 (νμ€λ·|νμ΄λΈμ
|μ°ν©|(PT)|μ€λ§μ΄|κ²½μ )[[:space:]]*λ΄μ€
#> 2 ((μ
λ²|μ μΉ|κ΅μ‘)[[:space:]]*νλ«νΌ)|λ§λ§λ―Έμ[[:space:]]*κ°κ³λΆ[[:print:]]*μΈμ¦μ·|Playtex
#> 3 μ’λ΄ν|ꡬκΈμ€λ¬Έ|μ±μ©λνμ
체
#> 4 μΆμ²[[:space:]]*:|λ¬Έμμ²λ³΄κ±΄λ³΅μ§μ½μΌν°
#> 5 (μ¦μ |κΈ°λ
)μ΄λ²€νΈ|νλμ€ν¬λ¦°|μ΄λ²€νΈλ₯Ό[[:space:]]*μ§ν
#> 6 μ μμ§|κΈ°μ΅μ μ₯μ|μΆλͺ¨μΉ΄ν|λΈλν|νΈλμ€νλμ€|μ°κΈμ 보λ·
#> accept use
#> 1 FALSE TRUE
#> 2 FALSE TRUE
#> 3 FALSE TRUE
#> 4 FALSE TRUE
#> 5 FALSE TRUE
#> 6 FALSE TRUE
ν
μ€νΈ λ°μ΄ν°(λ¬Έμλ€) μ€μμ λΆμμ μννλ €λ λͺ©μ κ³Ό λΆν©νμ§ μμ
ν
μ€νΈ(λ¬Έμ)λ₯Ό μ κ±°ν΄μΌν κ²½μ°μλ filter_text()
λ₯Ό μ¬μ©ν©λλ€.
μ΄λ―Έ μμμ λ¬Έμ νν°λ§μ μν λ©ν λ°μ΄ν° νμΌμ μ½μ΄λ€μμ΅λλ€. 6κ°μ
λ£°μ accept
κ°μ΄ FALSEμΈ deny λ£°μ
λλ€. μ¦ ν΄λΉ κ²μ ν¨ν΄μ λ§μ‘±νλ
ν
μ€νΈ λ°μ΄ν°λ₯Ό μ κ±°νλ μμ
μ μνν©λλ€.
λ²μ¦ λ°μ΄ν°μ λ³Έλ¬Έμ κΈΈμ΄κ° 1000μΈ λ¬Έμ 벑ν°μ λλ€. μ΄ λ²‘ν°λ 5κ°μ κ²°μΈ‘μΉλ₯Ό ν¬ν¨νκ³ μμ΅λλ€.
doc_content <- buzz$CONTENT
is.character(doc_content)
#> [1] TRUE
length(doc_content)
#> [1] 1000
sum(is.na(doc_content))
#> [1] 5
8κ°μ μ½μ΄λ₯Ό μ΄μ©ν΄μ νν°λ§μ μνν©λλ€. as_logical = FALSE
μ
μ§μ νλ©΄ λ¬Έμ 벑ν°μ νν°λ§μ μνν μ μμ΅λλ€.
doc_after_character <- filter_text(doc_content, as_logical = FALSE, mc.cores = 8)
#> ββ rejects: λ°©μ‘ ββββββββββββββββββββββββββββββββββββββββββββββββββββββββ 3건 ββ
#> ββ rejects: μ€λ¬Έμ‘°μ¬ ββββββββββββββββββββββββββββββββββββββββββββββββββββ 1건 ββ
#> ββ rejects: μ λ¬ΈκΈ°μ¬ ββββββββββββββββββββββββββββββββββββββββββββββββββββ 1건 ββ
#> ββ rejects: μ΄λ²€νΈ ββββββββββββββββββββββββββββββββββββββββββββββββββββββ 1건 ββ
#> ββ rejects: μ νν보 ββββββββββββββββββββββββββββββββββββββββββββββββββββ 2건 ββ
#> ββ rejects: μΆμ² ββββββββββββββββββββββββββββββββββββββββββββββββββββββββ 2건 ββ
#> ββ Missing Check: Removing NA βββββββββββββββββββββββββββββββββββββββββββ 5건 ββ
length(doc_after_character)
#> [1] 985
5κ°μ κ²°μΈ‘μΉμ 6κ°μ λ£°μμ 10κ°μ λ¬Έμκ° μ κ±°λμ΄μ κΈΈμ΄κ° 985μΈ λ¬Έμ 벑ν°κ° λ§λ€μ΄μ‘μ΅λλ€.
tidytext ν¨ν€μ§λ₯Ό μ΄μ©ν΄μ ν μ€νΈ λ°μ΄ν° λΆμμ μννλ€λ©΄, λ¬Έμ 벑ν°μ νν°λ§μ΄ μλλΌ λ¬Έμ λ³μλ₯Ό μ΄μ©ν νν°λ§μ μνν΄μΌ ν©λλ€.
λ€μμ²λΌ as_logical
μΈμμ κΈ°λ³Έκ°μΈ TRUEλ₯Ό μ¬μ©ν©λλ€. μ΄ κ²½μ°λ
CONTENT
λ³μμ λͺ¨λ μμμ λν΄μ allow νν°λ§ μ¬λΆλ₯Ό μλ―Ένλ λ
Όλ¦¬
벑ν°λ₯Ό λ§λ€μ΄ λ°νν©λλ€. κ·Έλ¬λ―λ‘ dplyr
ν¨ν€μ§μ filter
ν¨μμ
μ¬μ©νμ¬ νν°λ§ν©λλ€.
library(dplyr)
buzz %>%
filter(filter_text(CONTENT, verbos = FALSE)) %>%
select(KEYWORD, SRC, CONTENT)
#> # A tibble: 985 Γ 3
#> KEYWORD SRC CONTENT
#> <chr> <chr> <chr>
#> 1 λ§λ²μ΄ 17,18λ
λ² μ΄λΉλ§ "μ§κΈ λμ§Έ μμ μ€μΈ μ΄λ¨Έλμμ 첫째λ 16λ
1μμ λμ§ΈμΆμ°μμ μ 17λ
3μμ μ΄μ©λ€ 보β¦
#> 2 λ§λ²μ΄ 20λ μλ€λ°© "μ ν¬ λΆλΆλ λ§λ²μ΄μΈλ°μ λ¨νΈ νμ¬ μ¬λλ€λ κ±°μ λ€ λ§λ²μ΄μΈκ°λ΄μ κ·Έλλ μμΉ¨λ§λ€ μλ΄λΆβ¦
#> 3 λ§λ²μ΄ 20λ μλ€λ°© "μ λμ§μΆ μ μ§μΆ ꡬλΆν΄μ λ°λ‘μ μΌμλμ μ κ°μ΄λμ μμλ μ λμ΄μ΄λμ μλͺ°λΌ μ΄λ»κ² μ μ΄μΌβ¦
#> 4 λ§λ²μ΄ 20λ μλ€λ°© "λ무 κ³ λ―Όμ΄ λμ νμμ° ν λ μμ΄μ μ¬κΈ°μ νμμ° ν΄λ΄μ κΈμ΄μ’ κΈΈμκ° μμ΄μ μν΄ λΆνβ¦
#> 5 λ§λ²μ΄ 20λ μλ€λ°© "\"μ΄μ λ²μ¨ κ²°νΌ 1λ
μ°¨ κ°κΉμ΄ λμ΄κ°λ λκ°λ΄κΈ°μ νΌλΆλΆμ
λλ€ ννλ€λ¦μ΄ μλλΌ μΌλ§μ β¦
#> 6 λ§λ²μ΄ 20λ μλ€λ°© "μκ°λ μλκ³ μ λ μ§μ₯λλ¬Έμ μ§ νκ³ μΈλ€μ΄ μ΄κ³ μλλ°μ1μΈ΅μ΄λΌμ μ’μμ€λ§ μμλλ° μβ¦
#> 7 λ§λ²μ΄ 20λ μλ€λ°© "κ³ννλ μμ μ΄ μλλΌμ κΈνκ² λ§λ²μ΄ (μ£Όλ§λΆλΆ)μ κ³ κ΅°μΈμ λλ°λΌ μ² μκ°λ €κ΅¬μ λ μ§μ₯보β¦
#> 8 λ§λ²μ΄ 20λ μλ€λ°© "λͺ»κ°μ§λκΉ κΈ°λΆμ΄ μμ’μμ λ€λ₯Έκ²λμλκ³ μ¬μ κ° μλμ λͺ»κ°λλ€λκ²μ²«μ§Έλ³κ³ μΉμ λΆλͺ¨λλ€μ λ§β¦
#> 9 λ§λ²μ΄ 20λ μλ€λ°© "λ¨νΈμ΄λ μ λ λκ°μ λ λ€ λ§λ²μ΄μμ. μ λ νμ¬ μμ 8주ꡬμ. μ κ° μ리λ₯Ό λλ λͺ»ν΄β¦
#> 10 λ§λ²μ΄ 20λ μλ€λ°© "μμ¦ ν΄κ·Όνκ³ λ¨νΈμ΄ λ°λ¦¬λ¬ μ€λλ°μ μ΄λΉΌλ €κ³ νλλ° λ§¨λ μ λ
λ¨Ήκ³ λ€μ΄κ°μμ μ μ°κ³ μμ΅β¦
#> # βΉ 975 more rows
bitNLPλ λ€μ μ€νμμ€ κΈ°μ¬μμ 리μμ€λ₯Ό μ¬μ©νκ±°λ μ°Έμ‘°νμμ΅λλ€.:
- μμ νλ’ νλ‘μ νΈ κ΄κ³μ
- κΉμ€ν
- μ€μμ
bitNLPμ λ°μ μ μν΄μ λ²κ·Έμ λν 리ν¬ν , κΈ°λ₯ κ°μ μ μν μꡬμ¬νλ€μ μ¬κΈ°μμ λ¬Έμ λ₯Ό μ κΈ°νκ±°λ μμ²ν΄μ£ΌμΈμ. νΉν λ²κ·Έλ μ΅μνμ μ¬ν κ°λ₯ν μμ μ ν¨κ» μ μΆλ°λλλ€.
μ΄ νλ‘μ νΈλ Contributor Code of Conduct(κΈ°μ¬μ νλ κ°λ Ή)κ³Ό ν¨κ» 릴리μ€λμμ΅λλ€ . μ΄ νλ‘μ νΈμ μ°Έμ¬ν¨μΌλ‘μ¨ κ·νλ ν΄λΉ 쑰건μ μ€μνλ λ° λμνλ κ²μ λλ€.