2014-10-14 1 views
0

У меня около 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:

enter image description here

Это с порогом 0,1 корреляции и используя 75 наиболее частых терминов. Не очень интересно. Если я вместо этого взять на себя всю книгу в виде одной строки и повторно запустить код с Cort = 0,9 и частота = 175, то мы получим:

enter image description here

который, кажется, намного более информативен. Есть ли способ вытащить текст через буфер обмена или иначе в корпусе, который не имеет каждой строки в качестве собственной «книги» в корпусе? Работает ли функция Corpus() только на векторном источнике или я могу сделать что-то вроде readlines(), чтобы данные поступали из буфера обмена в виде единого корпуса? То, что я делал, это просто взять текстовый документ и слить строки вручную от нескольких тысяч до нескольких десятков, но я чувствую, что здесь должно быть лучшее решение.

ответ

0

Я не могу говорить за эффективность этого решения, но это работает для меня:

feedback <- Corpus(VectorSource(concat(dd$V1,collapse=" "))) 

UPDATE: Я забыл упомянуть, что CONCAT() от пакета Ngram

Смежные вопросы