【问题标题】:LDA Returning numbers instead of words from Term Document MatrixLDA 从术语文档矩阵返回数字而不是单词
【发布时间】:2018-09-07 18:20:18
【问题描述】:

我正在尝试使用 LDA 函数来评估 R 中的文本语料库。但是,当我这样做时,它似乎使用了观察的行名,而不是语料库中的实际单词。我在网上找不到关于此的任何其他内容,所以我想我一定是在做一些非常基本的错误。

library(tm)
library(SnowballC)
library(tidytext)
library(stringr)
library(tidyr)
library(topicmodels)
library(dplyr)

#read in data
data <- read.csv('CSV_format_data.csv',sep=',')
#Create corpus/DTM
interviews <- as.matrix(data[,2])
ints.corpus <- Corpus(VectorSource(interviews))
ints.dtm <- TermDocumentMatrix(ints.corpus)

chapters_lda <- LDA(ints.dtm, k = 4, control = list(seed = 5421685))
chapters_lda_td <- tidy(chapters_lda,matrix="beta")
chapters_lda_td

head(ints.dtm$dimnames$Terms)

'chapters_lda_td' 命令输出

# A tibble: 4,084 x 3
   topic term        beta
   <int> <chr>      <dbl>
 1     1 1     0.000555  
 2     2 1     0.00399   
 3     3 1     0.000614  
 4     4 1     0.000699  
 5     1 2     0.0000195 
 6     2 2     0.000708  
 7     3 2     0.000731  
 8     4 2     0.00000155
 9     1 3     0.000974  
10     2 3     0.0000363 
# ... with 4,074 more rows

请注意,“术语”列中应该有数字而不是单词。行数匹配文档数乘以主题数,而不是术语数乘以主题数,应该是这样。 'head(ints.dtm$dimnames$Terms)' 用于检查 DTM 中是否确实存在单词,这些单词确实存在。结果是:

[1] "aaye"      "able"      "adjust"    "admission" "after"     "age" 

数据文件本身是一个非常标准的两列 CSV 文件,带有一个 ID 和一个文本块,并且在使用它和 tm 包进行其他文本挖掘工作时没有给我任何问题。任何帮助将不胜感激,谢谢!

【问题讨论】:

    标签: r text-mining lda


    【解决方案1】:

    我想通了!那是因为我用的是命令

    ints.dtm <- TermDocumentMatrix(ints.corpus)
    

    而不是

    ints.dtm <- DocumentTermMatrix(ints.corpus)
    

    我猜 Term 和 Document 的顺序会改变它们的 dimnames 顺序,所以 LDA 抓错了。

    【讨论】:

      猜你喜欢
      • 2015-01-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-12
      • 2018-09-21
      • 1970-01-01
      • 1970-01-01
      • 2018-05-04
      相关资源
      最近更新 更多