2013-02-11 14 views
14

Ich versuche zu tun, einige sehr grundlegende Textanalyse mit dem tm Paket und bekommen einige TF-IDF-Scores zu erhalten; Ich betreibe OS X (obwohl ich dies auf Debian Squeeze mit dem gleichen Ergebnis versucht habe); Ich habe ein Verzeichnis bekam (das mein Arbeitsverzeichnis) mit ein paar Text-Dateien in das (die erste, die ersten drei Episoden von Ulysses, der zweite enthält die zweiten drei Episoden enthält, wenn Sie wissen müssen).Der Versuch, TF-IDF Gewichtung arbeiten in R

R Version: 2.15.1 Session() meldet diese über tm: [1] tm_0.5-8.3

Relevante Stück Code:

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" 

werden Sie feststellen, dass die Gewichtung scheint immer noch die Standardbegriffsfrequenz (tf) zu sein, anstatt die gewichteten tf-idf-Werte, die ich möchte.

Entschuldigung, wenn mir etwas offensichtlich fehlt, aber basierend auf der Dokumentation, die ich gelesen habe, sollte diese arbeiten. Der Fehler, kein Zweifel, liegt nicht in den Sternen ...

Antwort

21

Wenn Sie an der DocumentTermMatrix Hilfeseite sehen, ein am Beispiel sehen Sie, dass das control Argument auf diese Weise angegeben wird:

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

So wird die Gewichtung mit dem Listenelement weighting, nicht weight genannt angegeben. Und Sie können diese Gewichtung angeben, indem Sie wie im Beispiel einen Funktionsnamen oder eine benutzerdefinierte Funktion übergeben. Aber Folgendes funktioniert auch:

data(crude) 
dtm <- DocumentTermMatrix(crude, control = list(weighting = weightTfIdf)) 
+1

Yup. Das hat es getan. * Gewichtung * nicht * Gewicht *. Ich könnte mich selbst treten. Vielen Dank! – cforster

+0

Bitte beachten Sie, dass die Gewichtung per Voreinstellung normalisiert wird. – zipp