在标记 ngram 中检测相同的单词并将其删除

Detect the same word in tokens ngram and remove them

在 dfm 中,如何在 ngram 中检测到相同的词,即

hello_hello, text_text

并将它们从 dfm 中删除?

对于 ngram 元素由 _ 连接的 dfm,您可以拆分它们并确定哪些相同。

library("quanteda")
## Package version: 2.1.2

dfmat <- dfm(c("test1_test1", "test1_test2", "test2_test2_test2", "test2_other", "other"))

featsplit <- strsplit(featnames(dfmat), "_")
same <- sapply(featsplit, function(y) {
  length(y) >= 2 & # it's a compound (ngram)
    length(unique(y)) == 1 # all elements are the same
})

same
## [1]  TRUE FALSE  TRUE FALSE FALSE

然后您可以使用它来选择不同的 dfm 元素:

dfmat[, !same]
## Document-feature matrix of: 5 documents, 3 features (80.0% sparse).
##        features
## docs    test1_test2 test2_other other
##   text1           0           0     0
##   text2           1           0     0
##   text3           0           0     0
##   text4           0           1     0
##   text5           0           0     1

如果您的 ngram 连接器是不同的字符,只需将其替换为 _