web-dev-qa-db-ja.com

Rでtf-idf重み付けを機能させようとしています

Tmパッケージを使用して非常に基本的なテキスト分析を行い、tf-idfスコアを取得しようとしています。私はOSXを実行しています(Debian Squeezeでこれを試しましたが、同じ結果になりました)。いくつかのテキストファイルを含むディレクトリ(私の作業ディレクトリ)があります(最初のディレクトリにはlyssesの最初の3つのエピソードが含まれ、2番目のエピソードには次の3つのエピソードが含まれています(知っておく必要がある場合) )。

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-idfスコアではなく、デフォルトの用語頻度(tf)であるように見えることに注意してください。

明らかな何かが欠けている場合はお詫びしますが、私が読んだドキュメントに基づくと、これははず動作します。間違いなく、欠点は星にありません...

14
cforster

例の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))
23
juba