Почему texttat_simil () с методом "косинус" возвращает NA - PullRequest
2 голосов
/ 14 апреля 2020

Я вычисляю косинусное сходство для двух dfm объектов. Одним из них является мой эталонный объект, который имеет размеры 5 x 4728, в то время как второй dfm является моим целевым объектом и имеет размеры 2 325 329 x 40 595.

Что я не понимаю, так это то, почему textstat_simil() возвращает NA. Я пытался воспроизвести «проблему», но пока не повезло. Вы можете найти данные по следующим ссылкам Dropbox. Имейте в виду, что цель dfm содержит только первый документ.

  1. Ссылка dfm
  2. Цель dfm

Это код, который я использую. dfm_match() увеличивает мою ссылку dfm, чтобы соответствовать количеству объектов целевого объекта.

library(quanteda)

# make sure you load the two required dfms

reference_dfm = dfm_match(reference_dfm, featnames(target_dfm))
textstat_simil( target_dfm, reference_dfm, method = "cosine")

#> textstat_simil object; method = "cosine"
#>         negative slightly_negative neutral slightly_positive positive
#> text1.1       NA                NA      NA                NA       NA

Есть идеи?

1 Ответ

2 голосов
/ 14 апреля 2020

Ваш target_dfm является полностью разреженным (все 0), поэтому вы не можете вычислить косинусное сходство.

target_df <- convert(target_dfm, "data.frame")
sum(target_df[,2:ncol(target_df)] > 0)
#> 0

Вы также можете заметить, что когда вы печатаете dfm в консоли, он говорит, что это "100,0% разреженный". Здесь значение dfm 1 не является разреженным, и расчет работает.

test_dfm <- dfm(corpus("adds"))
test_dfm <- dfm_match(test_dfm, featnames(target_dfm))
textstat_simil(test_dfm, reference_dfm2, method = "cosine")
#> textstat_simil object; method = "cosine"
#>         negative slightly_negative neutral slightly_positive positive
#> text1.1        0                 0       0                 0        0
...