Как сохранить разреженность и максимальную длину срока матрицы документа Term от tm

как сохранить разреженность и максимальную длину срока матрицы документа срока в отдельной переменной в R при нахождении ngram?

library(tm)
library(RWeka)

#stdout <- vector('character')
#con <- textConnection('stdout','wr',local = TRUE)

#reading the csv file
worklog <- read.csv("To_Kamal_WorkLogs.csv");


#removing the unwanted columns
cols <- c("A","B","C","D","E","F");
colnames(worklog)<-cols;
worklog2 <- worklog[c("F")]

#removing non-ASCII characters
z=iconv(worklog2, "latin1", "ASCII", sub="")

#cleaning the data Removing Date and Time
worklog2$F=gsub("[0-9]+/[0-9]+/[0-9]+ [0-9]+:[0-9]+:[0-9]+ [A,P][M]","",worklog2$F);


#loading the vector Data to corpus
a <- Corpus(VectorSource(worklog2$F))

#cleaning the data
a <- tm_map(a,removeNumbers)
a <- tm_map(a,removePunctuation)
a <- tm_map(a,stripWhitespace)
a <- tm_map(a,tolower)
a <- tm_map(a, PlainTextDocument)
a <- tm_map(a,removeWords,stopwords("english")) 
a <- tm_map(a,stemDocument,language = "english")

#removing custom stopwords
stopwords="open";
if(!is.null(stopwords)) a <- tm_map(a, removeWords, words=as.character(stopwords))


#finding 2,3,4 grams
bigramTokenizer <- function(x) NGramTokenizer(x, Weka_control(min = 2, max = 2))
tdm2 <- TermDocumentMatrix(a, control = list(tokenize = bigramTokenizer))
tdm2 <- removeSparseTerms(tdm2, 0.75)

#output

> tdm2
<<TermDocumentMatrix (terms: 27, documents: 8747)>>

Non-/sparse entries: 87804/148365

Sparsity           : 63%

Maximal term length: 20

Weighting          : term frequency (tf)

как сохранить указанные выше разреженность, максимальную длину термина, вес, не- / разреженность в отдельных переменных.


person PradhanKamal    schedule 07.10.2015    source источник
comment
Можете ли вы привести более простой пример, который можно воспроизвести, а также подробности того, какой ответ вы хотите получить? Что вы имеете в виду, например, под разрежением и взвешиванием?   -  person Ken Benoit    schedule 07.10.2015
comment
когда мы записываем переменную tdm2 в консоли R после компиляции программы, мы получаем следующий результат: Взвешивание: частота термина (тс)   -  person PradhanKamal    schedule 07.10.2015
comment
я хочу сохранить эти значения в отдельных переменных? так как это сделать?   -  person PradhanKamal    schedule 07.10.2015
comment
разреженность и вес - это свойства объекта termdocumentmatrix.   -  person PradhanKamal    schedule 07.10.2015
comment
ОК, ответил. В будущих вопросах постарайтесь сосредоточиться только на основной части вопроса - здесь сохранение статистики, сообщаемой методом print для объекта класса TermDocumentMatrix. Остальная информация, которую вы предоставили, не актуальна и не воспроизводима. Если вы можете использовать встроенный объект, такой как crude, тем лучше. И добро пожаловать в StackOverflow.   -  person Ken Benoit    schedule 07.10.2015


Ответы (1)


Это вернет нужную статистику. В вашем вопросе не указано, какой формат вы хотите, поэтому здесь я использовал именованный список. (Его можно легко вернуть как data.frame.)

Я взял это из исходного кода пакета tm, файла Matrix.R, где определен метод печати для объектов TermDocumentMatrix.

getTDMstats <- function(x) {
    # where x is a TermDocumentMatrix
    list(sparsity = ifelse(!prod(dim(x)), 100, round((1 - length(x$v)/prod(dim(x))) * 100)) / 100,
         maxtermlength = max(nchar(Terms(x), type = "chars"), 0), 
         weightingLong = attr(x, "weighting")[1], 
         weightingShort = attr(x, "weighting")[2], 
         nonsparse = length(x$v), 
         sparse = prod(dim(x)) - length(x$v))
}
data(crude)
tdm2 <- TermDocumentMatrix(crude)
tdm2
## <<TermDocumentMatrix (terms: 1266, documents: 20)>>
## Non-/sparse entries: 2255/23065
## Sparsity           : 91%
## Maximal term length: 17
## Weighting          : term frequency (tf)
getTDMstats(tdm2)
## $sparsity
## [1] 0.91
## 
## $maxtermlength
## [1] 17
## 
## $weightingLong
## [1] "term frequency"
## 
## $weightingShort
## [1] "tf"
## 
## $nonsparse
## [1] 2255
## 
## $sparse
## [1] 23065
person Ken Benoit    schedule 07.10.2015