LDA 从术语文档矩阵返回数字而不是单词
LDA Returning numbers instead of words from Term Document Matrix
我正在尝试使用 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
请注意,"term" 列中应该有数字而不是单词。行数与文档数乘以主题数相匹配,而不是术语数乘以主题数,这是应该的。 'head(ints.dtm$dimnames$Terms)' 是检查 DTM 中是否确实存在单词。结果是:
[1] "aaye" "able" "adjust" "admission" "after" "age"
数据文件本身是一个非常标准的两列 CSV 文件,带有一个 ID 和一个文本块,在使用它和 tm 包进行其他文本挖掘时,我没有遇到任何问题。任何帮助将不胜感激,谢谢!
我想通了!这是因为我正在使用命令
ints.dtm <- TermDocumentMatrix(ints.corpus)
而不是
ints.dtm <- DocumentTermMatrix(ints.corpus)
我猜 Term 和 Document 的顺序调换了它们的 dimnames 顺序,所以 LDA 抓住了错误的。
我正在尝试使用 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
请注意,"term" 列中应该有数字而不是单词。行数与文档数乘以主题数相匹配,而不是术语数乘以主题数,这是应该的。 'head(ints.dtm$dimnames$Terms)' 是检查 DTM 中是否确实存在单词。结果是:
[1] "aaye" "able" "adjust" "admission" "after" "age"
数据文件本身是一个非常标准的两列 CSV 文件,带有一个 ID 和一个文本块,在使用它和 tm 包进行其他文本挖掘时,我没有遇到任何问题。任何帮助将不胜感激,谢谢!
我想通了!这是因为我正在使用命令
ints.dtm <- TermDocumentMatrix(ints.corpus)
而不是
ints.dtm <- DocumentTermMatrix(ints.corpus)
我猜 Term 和 Document 的顺序调换了它们的 dimnames 顺序,所以 LDA 抓住了错误的。