2017-03-06 8 views
0

text2vecパッケージにprune_vocabularyを適用した後にコーパスに残っている文書の数を確認することはできますか?ここでRテキスト2vecのテキストコーパスに文書の枝刈りの効果をプロットする

library(text2vec) 
library(data.table) 
library(tm) 

#Load movie review dataset 
data("movie_review") 
setDT(movie_review) 
setkey(movie_review, id) 
set.seed(2016L) 

#Tokenize 
prep_fun = tolower 
tok_fun = word_tokenizer 
it_train = itoken(movie_review$review, 
       preprocessor = prep_fun, 
       tokenizer = tok_fun, 
       ids = movie_review$id, 
       progressbar = FALSE) 


#Generate vocabulary 
vocab = create_vocabulary(it_train 
         , stopwords = tm::stopwords()) 

#Prune vocabulary 
#How do I ascertain how many documents got kicked out of my training set because of the pruning criteria? 
pruned_vocab = prune_vocabulary(vocab, 
          term_count_min = 10, 
          doc_proportion_max = 0.5, 
          doc_proportion_min = 0.001) 

# create document term matrix with new pruned vocabulary vectorizer 
vectorizer = vocab_vectorizer(pruned_vocab) 
dtm_train = create_dtm(it_train, vectorizer) 

にし、剪定語彙データセットを取得するための一例であるterm_count_mindoc_proportion_minパラメータは私のテキストコーパスにされているか、積極的な理解するための簡単な方法があります。

enter image description here

+1

あなたは[再現可能な例]を提供する場合それはあなたを助けるために簡単です(http://stackoverflow.com/questions/5963269/how-to- make-a-great-r-reproducible-example)を使用して、テストや検証に使用することができます。 – MrFlick

+0

私はMWEを追加しました。ありがとう! – sriramn

答えて

1

vocab $vocabがあなたのコーパスに関する統計情報が多く含まdata.tableです:私はstmパッケージは私たちがこのようなプロットを生成plotRemoved機能を使って、これを処理することができますどのように似た何かをしようとしています。 prune_vocabularyterm_count_mindoc_proportion_minのパラメータはこれを単にフィルタリングしますdata.tableです。 colMeans(), colSums(), rowMeans(), rowSums()、など私は:あなたは別のボキャブラリで文書長期行列を作成し、Matrixパッケージから機能を持つ別の統計情報を確認することができ、他の側では

total_tokens = sum(v$vocab$terms_counts) 
total_tokens 
# 1230342 
# now lets prune 
v2 = prune_vocabulary(v, term_count_min = 10) 
total_tokens - sum(v2$vocab$terms_counts) 
# 78037 
# effectively this will remove 78037 tokens 

:たとえば、ここで削除したトークンの数を計算することができる方法であります上記のメトリックを取得できることを確認してください。例えば

ここで、空のドキュメントを検索する方法である:

doc_word_count = Matrix::rowSums(dtm) 
indices_empty_docs = which(doc_word_count == 0) 
+0

これは非常に役に立ちます。私は 'prune_vocabulary'関数の周りにラッパーを書いてトークンと単語プロットを生成することができました。ドキュメントだけが少し混乱しています。コーパスに残っている文書の数を計算する方法について少し詳しく説明できますか?私が気づいたことの1つは、LDA実装が空のドキュメントでも重みを適用するということです。私はそれを避けることができ、私は手動でこのアプローチを使用してLDAを実行する前に空のドキュメントを削除することができますかなと思います。 – sriramn

+0

空のドキュメントを見つける方法の例を追加しました。 LDAの場合、これはおそらく開発版で修正された古い[バグ](https://github.com/dselivanov/text2vec/issues/149)です。 –

+0

優れています。それは動作します! – sriramn

関連する問題