【发布时间】:2014-10-14 22:51:41
【问题描述】:
我有大约 30k 行文本,平均长度约为 50-60 个字符。在尝试绘制术语-文档矩阵时,如果有几行大量文本而不是多行少量文本,则绘图效果似乎更好(从相关性的角度来看)。
例如,如果我要在Pride and Prejudice 上绘制 TDM,当文本全部位于一行而不是每一行都是单独的语料库时,图中的节点似乎具有更好的相关性。
使用以下代码:
library("tm")
dd <- read.table("clipboard", sep="\r", quote="")
feedback <- Corpus(VectorSource(dd$V1))
tdm2 <- TermDocumentMatrix(feedback, control = list(removePunctuation = TRUE,
removeNumbers = TRUE,
stopwords = TRUE))
##################################################################
corT = 0.1
freq = 75
freqterms <- findFreqTerms(tdm2, lowfreq = freq)#[1:29]
vtxcnt <- rowSums(cor(as.matrix(t(tdm2[freqterms,])))>corT)-1
mycols<-c("#f7fbff","#deebf7","#c6dbef",
"#9ecae1","#6baed6","#4292c6",
"#2171b5", "#084594")
vc <- mycols[vtxcnt+1]
names(vc) <- names(vtxcnt)
##################################################################
plot(tdm2,
terms = freqterms,
#weighting = TRUE,
corThreshold = corT,
nodeAttrs=list(fillcolor=vc))
如果文本按原样来自 Gutenberg.org,我会生成以下图表:
这是使用 0.1 的相关阈值并使用 75 个最常见的术语。不是很有趣。如果我把整本书看成一行,然后用 corT=0.9 和 freq=175 重新运行代码,那么我们得到:
这似乎提供了更多信息。有没有办法通过剪贴板或其他方式在语料库中没有每一行作为它自己的“书”的语料库中提取文本? Corpus() 函数是否仅适用于矢量源,或者我可以执行 readlines() 之类的操作以将剪贴板中的数据作为单个语料库输入吗?我一直在做的只是获取一个文本文档并手动将行从几千行合并到几十行,但我觉得这里必须有更好的解决方案。
【问题讨论】:
标签: r