我有大约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()的操作以使数据作为单个语料库从剪贴板中获取吗?我一直在做的只是拿一个文本文档并手动合并几千行到几十行,但我觉得这里必须有更好的解决方案。
答案 0 :(得分:0)
我不能说出这个解决方案的效率,但它对我有用:
feedback <- Corpus(VectorSource(concat(dd$V1,collapse=" ")))
更新:我忘了提到concat()来自ngram包