使用 tidytext 在 ngrams 分析中保留带连字符的单词
Preserve Hyphenated words in ngrams analysis with tidytext
我正在对传记进行文本分析。我想保留 "complex" 个由连字符链接的许多 "simple" 个单词组成的单词。
例如,如果我有以下向量:
Example<- c("bovine retention-of-placenta sulpha-trimethoprim mineral-vitamin-liquid-mixture)
***我编辑了这部分以使我需要的输出更清晰****
我希望我的传记格式为 data.frame,尺寸为 3x1(这是使用 tidytext
中的 unnest_tokens
时获得的格式:
1 bovine retention-of-placenta
2 retention-of-placenta sulpha-trimethoprim
3 sulpha-trimethoprim mineral-vitamin-liquid-mixture
**** 本期结束****
我的问题是,对于 tidytext,选项标记与 "ngrams"(我正在执行的那种分析)或 "regex"(我可能使用的命令)一起使用以这些连字符为条件)
这是我目前使用的代码:
spdiag_bigrams<-diagnostics%>%unnest_tokens(bigram, text, token = "ngrams", n = 2)
我怎样才能同时做这两件事?
谢谢
unnest_tokens
清除标点符号。这会删除复杂单词之间的连字符。
您可以为此使用 quanteda 或 tm,因为这些软件包在默认情况下不会删除标点符号。以下示例假设您有一个 data.frame 并且正在使用语料库。但是 quanteda 的 tokens
函数可以直接作用于文本列。
example <- c("bovine retention-of-placenta sulpha-trimethoprim mineral-vitamin-liquid-mixture")
diagnostics <- data.frame(text = example, stringsAsFactors = FALSE)
与量子:
library(quanteda)
qcorp <- corpus(diagnostics)
bigrams <- tokens_ngrams(tokens(qcorp), n = 2, concatenator = " ")
qdfm <- dfm(bigrams)
convert(qdfm, "data.frame")
document bovine retention-of-placenta retention-of-placenta sulpha-trimethoprim sulpha-trimethoprim mineral-vitamin-liquid-mixture
1 text1 1 1 1
只是 quanteda 的 tokens_ngrams
使用示例向量:
tokens_ngrams(tokens(example), n = 2, concatenator = " ")
tokens from 1 document.
text1 :
[1] "bovine retention-of-placenta" "retention-of-placenta sulpha-trimethoprim"
[3] "sulpha-trimethoprim mineral-vitamin-liquid-mixture"
编辑:
要获取术语的向量,您可以使用其他转换选项之一并使用 $vocab 获取术语。
convert(qdfm, "lda")$vocab
[1] "bovine retention-of-placenta" "retention-of-placenta sulpha-trimethoprim"
[3] "sulpha-trimethoprim mineral-vitamin-liquid-mixture"
整洁 data.frame:
tidytext 有一个 tidy
功能,可以将不同包中的数据转换为整洁的形式。包括 quanteda 和 tm。所以在将数据放入 dfm 之后,您可以使用 tidy 将数据放入 tibble。之后,使用通常的 dplyr 语法删除您不感兴趣的所有列。
tidy(qdfm)
# A tibble: 3 x 3
document term count
<chr> <chr> <dbl>
1 text1 bovine retention-of-placenta 1
2 text1 retention-of-placenta sulpha-trimethoprim 1
3 text1 sulpha-trimethoprim mineral-vitamin-liquid-mixture 1
结束编辑:
与 tm:
library(tm)
NLPBigramTokenizer <- function(x) {
unlist(lapply(ngrams(words(x), 2), paste, collapse = " "), use.names = FALSE)
}
corp <- VCorpus(VectorSource(example))
dtm <- DocumentTermMatrix(corp, control=list(tokenize = NLPBigramTokenizer))
inspect(dtm)
<<DocumentTermMatrix (documents: 1, terms: 3)>>
Non-/sparse entries: 3/0
Sparsity : 0%
Maximal term length: 50
Weighting : term frequency (tf)
Sample :
Terms
Docs bovine retention-of-placenta retention-of-placenta sulpha-trimethoprim sulpha-trimethoprim mineral-vitamin-liquid-mixture
1 1 1 1
确实 tidytext 默认去除大部分标点符号,但不去除下划线:
library(tidyverse)
library(tidytext)
example <- c("bovine retention-of-placenta sulpha-trimethoprim mineral-vitamin-liquid-mixture")
tibble(text = example) %>%
mutate(text = str_replace_all(text, "-", "_")) %>%
unnest_tokens(word, text)
#> # A tibble: 4 x 1
#> word
#> <chr>
#> 1 bovine
#> 2 retention_of_placenta
#> 3 sulpha_trimethoprim
#> 4 mineral_vitamin_liquid_mixture
由 reprex package (v0.3.0)
于 2019-11-01 创建
有时我对多词标记采用这种方法,或者如果您想分析标点符号和词,请查看可用的 strip_punct = FALSE
选项。
我正在对传记进行文本分析。我想保留 "complex" 个由连字符链接的许多 "simple" 个单词组成的单词。
例如,如果我有以下向量:
Example<- c("bovine retention-of-placenta sulpha-trimethoprim mineral-vitamin-liquid-mixture)
***我编辑了这部分以使我需要的输出更清晰****
我希望我的传记格式为 data.frame,尺寸为 3x1(这是使用 tidytext
中的 unnest_tokens
时获得的格式:
1 bovine retention-of-placenta
2 retention-of-placenta sulpha-trimethoprim
3 sulpha-trimethoprim mineral-vitamin-liquid-mixture
**** 本期结束****
我的问题是,对于 tidytext,选项标记与 "ngrams"(我正在执行的那种分析)或 "regex"(我可能使用的命令)一起使用以这些连字符为条件)
这是我目前使用的代码:
spdiag_bigrams<-diagnostics%>%unnest_tokens(bigram, text, token = "ngrams", n = 2)
我怎样才能同时做这两件事?
谢谢
unnest_tokens
清除标点符号。这会删除复杂单词之间的连字符。
您可以为此使用 quanteda 或 tm,因为这些软件包在默认情况下不会删除标点符号。以下示例假设您有一个 data.frame 并且正在使用语料库。但是 quanteda 的 tokens
函数可以直接作用于文本列。
example <- c("bovine retention-of-placenta sulpha-trimethoprim mineral-vitamin-liquid-mixture")
diagnostics <- data.frame(text = example, stringsAsFactors = FALSE)
与量子:
library(quanteda)
qcorp <- corpus(diagnostics)
bigrams <- tokens_ngrams(tokens(qcorp), n = 2, concatenator = " ")
qdfm <- dfm(bigrams)
convert(qdfm, "data.frame")
document bovine retention-of-placenta retention-of-placenta sulpha-trimethoprim sulpha-trimethoprim mineral-vitamin-liquid-mixture
1 text1 1 1 1
只是 quanteda 的 tokens_ngrams
使用示例向量:
tokens_ngrams(tokens(example), n = 2, concatenator = " ")
tokens from 1 document.
text1 :
[1] "bovine retention-of-placenta" "retention-of-placenta sulpha-trimethoprim"
[3] "sulpha-trimethoprim mineral-vitamin-liquid-mixture"
编辑:
要获取术语的向量,您可以使用其他转换选项之一并使用 $vocab 获取术语。
convert(qdfm, "lda")$vocab
[1] "bovine retention-of-placenta" "retention-of-placenta sulpha-trimethoprim"
[3] "sulpha-trimethoprim mineral-vitamin-liquid-mixture"
整洁 data.frame:
tidytext 有一个 tidy
功能,可以将不同包中的数据转换为整洁的形式。包括 quanteda 和 tm。所以在将数据放入 dfm 之后,您可以使用 tidy 将数据放入 tibble。之后,使用通常的 dplyr 语法删除您不感兴趣的所有列。
tidy(qdfm)
# A tibble: 3 x 3
document term count
<chr> <chr> <dbl>
1 text1 bovine retention-of-placenta 1
2 text1 retention-of-placenta sulpha-trimethoprim 1
3 text1 sulpha-trimethoprim mineral-vitamin-liquid-mixture 1
结束编辑:
与 tm:
library(tm)
NLPBigramTokenizer <- function(x) {
unlist(lapply(ngrams(words(x), 2), paste, collapse = " "), use.names = FALSE)
}
corp <- VCorpus(VectorSource(example))
dtm <- DocumentTermMatrix(corp, control=list(tokenize = NLPBigramTokenizer))
inspect(dtm)
<<DocumentTermMatrix (documents: 1, terms: 3)>>
Non-/sparse entries: 3/0
Sparsity : 0%
Maximal term length: 50
Weighting : term frequency (tf)
Sample :
Terms
Docs bovine retention-of-placenta retention-of-placenta sulpha-trimethoprim sulpha-trimethoprim mineral-vitamin-liquid-mixture
1 1 1 1
确实 tidytext 默认去除大部分标点符号,但不去除下划线:
library(tidyverse)
library(tidytext)
example <- c("bovine retention-of-placenta sulpha-trimethoprim mineral-vitamin-liquid-mixture")
tibble(text = example) %>%
mutate(text = str_replace_all(text, "-", "_")) %>%
unnest_tokens(word, text)
#> # A tibble: 4 x 1
#> word
#> <chr>
#> 1 bovine
#> 2 retention_of_placenta
#> 3 sulpha_trimethoprim
#> 4 mineral_vitamin_liquid_mixture
由 reprex package (v0.3.0)
于 2019-11-01 创建有时我对多词标记采用这种方法,或者如果您想分析标点符号和词,请查看可用的 strip_punct = FALSE
选项。