1

LDA を実行しようとしているいくつかのジャーナル (ジャーナル A とジャーナル B としましょう) からのテキスト ファイルのグループがあります。それらをそれぞれ独自のコーパスに分割し、ファイルの名前を各コーパスに添付し、元のジャーナルをoriginラベルの下に保存し、最後に 2 つのコーパスを次のように結合しmyCorpusます。

library(tm); library(topicmodels);

txtfolder <- "~/Path/to/txtfiles/"
source <- DirSource(txtfolder)
A.names <- list.files(path=txtfolder, pattern="A")
B.names <- list.files(path=txtfolder, pattern="B")
A.names <- lapply(X=A.names, FUN=function(i){gsub(".txt", '', x=i)})
B.names <- lapply(X=B.names, FUN=function(i){gsub(".txt", '', x=i)})
A.corpus <- Corpus(A.source, readerControl=list(reader=readPlain))
for (i in 1:length(A.corpus)){
  meta(A.corpus[[i]], tag = "origin") <- "A"
}
B.corpus <- Corpus(B.source, readerControl=list(reader=readPlain))
for (i in 1:length(B.corpus)){
  meta(B.corpus[[i]], tag = "origin") <- "B"
}
myCorpus <- c(A.corpus, B.corpus) # combining the two corpuses

ここから、次の場所で LDA を実行しmyCorpusます。

myCorpus <- tm_map(myCorpus, PlainTextDocument)
dtm <- DocumentTermMatrix(myCorpus, control = list(minWordLength=3))
n.topics <- 5
lda.model <- LDA(dtm, n.topics)
terms(lda.model,10)

ここから、特定のトピックに起因する各ジャーナルの割合を経時的に測定するプロットを作成したいと思います (txt ファイルを解析することでジャーナルの各号が発行された時間を特定し、それらをベクトルに保存できます)。originタグで行った方法と同様に)。公開された日付を横軸として使用できるように、この情報を保存する最善の方法がわかりません。さらに重要なことは、私が言及したグラフをどのように作成できますか?

4

1 に答える 1

1

ggplotこのタグを追加したので、使用したいと思います。まず、データ フレームにデータを収集する必要があります。

ldaとの出力をコーパスLDA()と仮定すると、を使用してドキュメントcorpusに関するトピックとさまざまな情報を見つけることができます。これをコーパスに合わせて調整する必要があるかもしれません:topics(lda)meta(corpus)

df <- data.frame(id=names(topics(lda)),
                 topic=topics(lda),
                 date=as.POSIXct(unlist(lapply(meta(corpus,type="local",tag="datetimestamp"),as.character))),
                 origin=unlist(meta(corpus,type="local",tag="origin"))    )

次に、プロットする統計を計算する必要があります: 日付別および起源別の各トピックの頻度、および

library(dplyr)
library(tidyr)
M <- df %>% gather(key,value,topic) %>%
  group_by(date,origin,value) %>%
  summarize(n=n()) %>%
  mutate(f=n/sum(n))

最後に、それをプロットするには:

library(ggplot2)

ggplot(data=M,aes(x=date,fill=factor(value),y=f)) + 
  geom_bar(stat="identity",position="stack") +
  facet_grid(~origin)

シミュレートされたデータで得られるものは次のとおりです

set.seed(100)
df <- data.frame(date=sample(seq.Date(as.Date("2015-07-27 10:12:25"),as.Date("2015-07-31 10:12:25"),by=1),100,replace=TRUE),
       id=1:100,
       topic=sample(1:5,100,replace=TRUE),
       origin=sample(c("A","B"),100,replace=TRUE))

ここに画像の説明を入力

于 2015-07-26T12:06:06.837 に答える