Попытка получить вес tf-idf, работающий в R
Я пытаюсь сделать очень простой анализ текста с пакетом tm и получить некоторые оценки tf-idf; Я запускаю OS X (хотя я пробовал это на Squeeze Debian с тем же результатом); У меня есть каталог (который является моим рабочим каталогом) с несколькими текстовыми файлами в нем (первый содержит первые три эпизода Ulysses, второй - второй эпизод, если вы знаете).
R Версия: 2.15.1
SessionInfo() Сообщает об этом tm: [1] tm_0.5-8.3
Соответствующий бит кода:
library('tm')
corpus <- Corpus(DirSource('.'))
dtm <- DocumentTermMatrix(corpus,control=list(weight=weightTfIdf))
str(dtm)
List of 6
$ i : int [1:12456] 1 1 1 1 1 1 1 1 1 1 ...
$ j : int [1:12456] 2 10 12 17 20 24 29 30 32 34 ...
$ v : num [1:12456] 1 1 1 1 1 1 1 1 1 1 ...
$ nrow : int 2
$ ncol : int 10646
$ dimnames:List of 2
..$ Docs : chr [1:2] "bloom.txt" "telemachiad.txt"
..$ Terms: chr [1:10646] "_--c'est" "_--et" "_--for" "_--goodbye," ...
- attr(*, "class")= chr [1:2] "DocumentTermMatrix" "simple_triplet_matrix"
- attr(*, "Weighting")= chr [1:2] "term frequency" "tf"
Вы заметите, что взвешивание по-прежнему остается значением частоты по умолчанию (tf), а не взвешенными значениями tf-idf, которые мне бы хотелось.
Извините, если я пропущу что-то очевидное, но на основе прочитанной документации это должно сработать. Вина, несомненно, лежит не в звездах...
Ответы
Ответ 1
Если вы посмотрите на странице справки DocumentTermMatrix
, в примере вы увидите, что аргумент control
указан таким образом:
data(crude)
dtm <- DocumentTermMatrix(crude,
control = list(weighting = function(x) weightTfIdf(x, normalize = FALSE),
stopwords = TRUE))
Итак, взвешивание задается элементом списка с именем weighting
, а не weight
. И вы можете указать это взвешивание, передав имя функции или пользовательскую функцию, как в примере. Но следующие работы тоже:
data(crude)
dtm <- DocumentTermMatrix(crude, control = list(weighting = weightTfIdf))