2017-04-17 18 views
5

私はこれに非常に新しいので、証明書プログラムのコースのプロジェクトに取り組んでいます。LDA用語のリストではなく数字のリストを作成するトピックモデル

PubmedデータベースとEmbaseデータベースから参考文献レコードを取得して取得した.csvデータセットがあります。 1034行あります。しかし、いくつかの列がありますが、私はただ1つの列から抽象的な列を作成し、いくつかのレコードに要約を持たないトピックモデルを作成しようとしています。私はいくつかの処理(ストップワードや句読点の削除など)を行っており、200回以上発生している単語をバープロットしたり、ランク別に頻出用語リストを作成したり、選択した単語との関連付けを実行することもできました。だから、rは抽象的な分野で言葉自体を見ているようです。 topicmodelsパッケージを使用してトピックモデルを作成しようとすると、私の問題が発生します。ここで私が使用しているコードのビットです。

#including 1st 3 lines for reference 
options(header = FALSE, stringsAsFactors = FALSE, FileEncoding = 
"latin1") 
records <- read.csv("Combined.csv") 
AbstractCorpus <- Corpus(VectorSource(records$Abstract)) 

AbstractTDM <- TermDocumentMatrix(AbstractCorpus) 
library(topicmodels) 
library(lda) 
lda <- LDA(AbstractTDM, k = 8) 
(term <- terms(lda, 6)) 
term <- (apply(term, MARGIN = 2, paste, collapse = ",")) 

しかし、私が得るトピックの出力は次のとおりです。

Topic 1 Topic 2 Topic 3 Topic 4 Topic 5 Topic 6 Topic 7 Topic 8 

[1,] "499" "733" "390" "833" "17" "413" "719" "392" 
[2,] "484" "655" "808" "412" "550" "881" "721" "61" 
[3,] "857" "299" "878" "909" "15" "258" "47" "164" 
[4,] "491" "672" "313" "1028" "126" "55" "375" "987" 
[5,] "734" "430" "405" "102" "13" "193" "83" "588" 
[6,] "403" "52" "489" "10" "598" "52" "933" "980" 

なぜ数値ではなく数字が表示されますか?

さらに、topicmodelsのr PDFから基本的に取った次のコードは、私のために値を生成しますが、トピックは単語ではなく数字であり、これは私には意味がありません。

#using information from topicmodels paper 
library(tm) 
library(topicmodels) 
library(lda) 
AbstractTM <- list(VEM = LDA(AbstractTDM, k = 10, control = list(seed =  
505)), VEM_fixed = LDA(AbstractTDM, k = 10, control = list(estimate.alpha 
= FALSE, seed = 505)), Gibbs = LDA(AbstractTDM, k = 10, method = "Gibbs", 
Control = list(seed = 505, burnin = 100, thin = 10, iter = 100)), CTM = 
CTM(AbstractTDM, k = 10, control = list(seed = 505, var = list(tol = 
10^-4), em = list(tol = 10^-3)))) 
#To compare the fitted models we first investigate the α values of the  
models fitted with VEM and α estimated and with VEM and α fixed 

sapply(AbstractTM[1:2], slot, "alpha") 

#Find entropy 
sapply(AbstractTM, function(x)mean(apply(posterior(x)$topics, 1, 
function(z) - sum(z * log(z))))) 

#Find estimated topics and terms 
Topic <- topics(AbstractTM[["VEM"]], 1) 
Topic 
#find 5 most frequent terms for each topic 
Terms <- terms(AbstractTM[["VEM"]], 5) 
Terms[,1:5] 

問題の原因は何ですか?

+0

質問をするときは、[再現可能な例](http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example)を入力してください。 –

+0

再現可能な例がないとわかりにくいですが、その用語の代わりに文書を入手していると思われます。 'TermDocumentMatrix()'の代わりに 'DocumentTermMatrix()'を使ってみましたか? –

+0

はい、私はそれを試みました。何らかの理由で、用語がゼロの行列を生成するので、何もできません。 TDMを使って単語の頻度をプロットしようとすると、用語の代わりに数字のバープロットが表示されます。これを再現可能にするためには何が必要でしょうか?繰り返しますが、私はこれを初めて知っているので、私は完全に理解していません。あなたはすべてのコードかそれ以上のものを意味しますか? – SciLibby

答えて

3

topicmodelsのドキュメントを読むと、LDA()関数は、TermDocumentMatrixではなく、DocumentTermMatrixを期待しているようです。前者をDocumentTermMatrix(AbstractCorpus)で作成し、それが機能するかどうか確認してください。

+1

これはうまくいった!しかし、行の空の項目を取り除くために、少しコードを追加しなければなりませんでした。 – SciLibby

関連する問題