У меня около 30 тыс. Строк текста, которые в среднем составляют около 50-60 символов. Когда вы пытаетесь построить матрицу терминов и документов, кажется, что построение графика работает лучше (с точки зрения корреляции), когда есть несколько строк большого количества текста, а не много строк с небольшим текстом.Корпус из буфера обмена: много строк как один документ?
Например, если бы я планировал построить TDM на Pride and Prejudice, кажется, что узлы на графике имеют лучшую корреляцию выполнения, когда текст находится на одной линии, в отличие от каждой строки, являющейся отдельным корпусом.
С помощью следующего кода:
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 и частота = 175, то мы получим:
который, кажется, намного более информативен. Есть ли способ вытащить текст через буфер обмена или иначе в корпусе, который не имеет каждой строки в качестве собственной «книги» в корпусе? Работает ли функция Corpus() только на векторном источнике или я могу сделать что-то вроде readlines(), чтобы данные поступали из буфера обмена в виде единого корпуса? То, что я делал, это просто взять текстовый документ и слить строки вручную от нескольких тысяч до нескольких десятков, но я чувствую, что здесь должно быть лучшее решение.