Обнаруживать одно и то же слово в токенах ngram и удалять их

#r #quanteda

#r #квантовая

Вопрос:

В dfm как можно обнаружить в ngram одни и те же слова, т.е.

 hello_hello, text_text
 

и удалить их из dfm?

Комментарии:

1. Для ngrams любой длины или только для биграмм?

Ответ №1:

Для dfm, в котором ваши элементы ngram объединены _ , вы можете разделить их и определить, какие из них совпадают.

 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 amp; # 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 является другим символом, просто замените его на _ .