Как привести кадр данных к DocumentTermMatrix? - PullRequest
0 голосов
/ 08 сентября 2018

Я пытаюсь использовать tidytext для преобразования толщины слов в DocumentTermMatrix, но, похоже, функция работает не так, как ожидалось. Я начинаю с AssociatedPress, который, как я знаю, является documentTermMatrix, убираю и отливаю его обратно, но результат не совпадает с исходной матрицей. Что я делаю не так?

library(topicmodels)
data(AssociatedPress)
ap_td <- tidy(AssociatedPress)
tt <- ap_td %>%
  cast_dtm(document, term, count)

Элемент $Docs не равен NULL, когда я разыгрываю ap_td, но он был равен NULL в AssociatedPress: ул (тт)

List of 6
 $ i       : int [1:302031] 1 16 35 72 84 93 101 111 155 161 ...
 $ j       : int [1:302031] 1 1 1 1 1 1 1 1 1 1 ...
 $ v       : num [1:302031] 1 1 1 1 1 1 1 1 1 1 ...
 $ nrow    : int 2246
 $ ncol    : int 10473
 $ dimnames:List of 2
  ..$ Docs : chr [1:2246] "1" "2" "3" "4" ...
  ..$ Terms: chr [1:10473] "adding" "adult" "ago" "alcohol" ...
 - attr(*, "class")= chr [1:2] "DocumentTermMatrix" "simple_triplet_matrix"
 - attr(*, "weighting")= chr [1:2] "term frequency" "tf"

List of 6
 $ i       : int [1:302031] 1 1 1 1 1 1 1 1 1 1 ...
 $ j       : int [1:302031] 116 153 218 272 299 302 447 455 548 597 ...
 $ v       : num [1:302031] 1 2 1 1 1 1 2 1 1 1 ...
 $ nrow    : int 2246
 $ ncol    : int 10473
 $ dimnames:List of 2
  ..$ Docs : NULL
  ..$ Terms: chr [1:10473] "aaron" "abandon" "abandoned" "abandoning" ...
 - attr(*, "class")= chr [1:2] "DocumentTermMatrix" "simple_triplet_matrix"
 - attr(*, "weighting")= chr [1:2] "term frequency" "tf"

cast_dtm получает предупреждение

Предупреждающее сообщение: Попытка вычислить Different () для переменных, которые не найдены. в данных: - row_col, column_col Это ошибка, но из соображений совместимости выдается только предупреждение. Операция вернет ввод без изменений.

На GitHub я обнаружил эту проблему , которая должна быть исправлена ​​сейчас.

1 Ответ

0 голосов
/ 08 сентября 2018

Я не получаю вашего предупреждающего сообщения, используя tidytext 0.1.9.900 и R 3.5.0.

DTM одинаковы для количества терминов, строк и столбцов. Также все подсчеты верны.

Разница действительно между $ dimnames $ Docs tt$dimnames$Docs и AssociatedPress$dimnames$Docs.

Причина этого заключается в том, что если в dtm нет никаких документов перед тем, как привести в порядок, как в случае с AssociatedPress, функция tidy назначает AssociatedPress $ i переменной документа в tidy_text (ap_td). Преобразование этого обратно в dtm заполнит $ Dimnames $ Docs значением документа из tidy_text data.frame (ap_td). Таким образом, в конце значения AssociatedPress $ i в итоге получат tt $ dimnames $ Docs.

Вы можете увидеть, что если вы сравните $ i из Associated Press с документами из tt.

all.equal(unique(as.character(AssociatedPress$i)), unique(tt$dimnames$Docs))
[1] TRUE

Или сравнение с AssociatedPress для ap_td с tt:

all.equal(unique(as.character(AssociatedPress$i)), unique(tt$dimnames$Docs), unique(ap_td))
[1] TRUE

Если вы хотите следовать логике самостоятельно, вы можете проверить все используемые функции на странице github для sparse_tidiers . Начните с tidy.DocumentTermMatrix и следуйте вызовам функций до tidy.simple_triplet_matrix и, наконец, до tidy_triplet.

...