Próba poprawienia wagi TF-idf w R

Próbuję wykonać bardzo podstawową analizę tekstu z pakietem TM i uzyskać wyniki TF-idf; używam OS X (choć próbowałem tego na Debianie Squeeze z tym samym wynikiem); mam katalog (który jest moim katalogiem roboczym) z kilkoma plikami tekstowymi (pierwszy zawiera trzy pierwsze odcinki Ulysses , drugi zawiera trzy kolejne odcinki, jeśli musisz wiedzieć).

R Wersja: 2.15.1 SessionInfo() zgłasza to o tm: [1] tm_0. 5-8. 3

Odpowiedni bit kodu:

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"

Zauważysz, że waga wydaje się nadal być domyślnym terminem częstotliwość (TF), a nie ważone wyniki TF-idf, które chciałbym.

Przepraszam, jeśli brakuje mi czegoś oczywistego, ale na podstawie dokumentacji, którą przeczytałem, to powinno zadziałać. Bez wątpienia wina nie leży w gwiazdach...

Author: smci, 2013-02-12

1 answers

Jeśli spojrzysz na stronę pomocy DocumentTermMatrix w przykładzie, zobaczysz, że argument control jest podany w ten sposób:

data(crude)
dtm <- DocumentTermMatrix(crude,
           control = list(weighting = function(x) weightTfIdf(x, normalize = FALSE),
                          stopwords = TRUE))

Tak więc waga jest określona z elementem listy o nazwie weighting, a nie weight. Możesz określić tę wagę, przekazując nazwę funkcji lub funkcję niestandardową, jak w przykładzie. Ale działa też:

data(crude)
dtm <- DocumentTermMatrix(crude, control = list(weighting = weightTfIdf))
 23
Author: juba,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-02-11 21:00:22