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

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

hello_hello, text_text

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


person rek    schedule 13.12.2020    source источник
comment
Для энграмм любой длины или только для биграмм?   -  person Ken Benoit    schedule 13.12.2020


Ответы (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 & # 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 представляет собой другой символ, просто замените его на _.

person Ken Benoit    schedule 13.12.2020