Функция матрицы сроков документа, возвращающая 0 при применении матрицы сроков документа - PullRequest
0 голосов
/ 31 августа 2018

У меня есть корпус из 600 текстовых файлов, которые я хочу извлечь из него каждую числовую комбинацию после термина mim и создать document term matrix, чтобы найти frequencies per file .. Я использовал этот код, он извлек все нужные условия, но возвращает 0 при применении документа Термин матрицы .. мой корпус представляет собой простой текстовый файл корпус, который содержит только текст этот мой код

library("tm")
library("stringr")
mim<-stringr::str_extract_all(DBcorp,"(mim)[[:blank:]]*[[:digit:]]+")
#extract numbers
mim<-stringr::str_extract_all(mim,"[[:digit:]]+") 
#set the result as list + delete duplicated extracted terms
mim<-unique(unlist(mim[[1]]))
mim
[1] "608106" "606843" "103600" "231550"
class(omim)
[1] "character"
#document term matrix
dtm_mim <- DocumentTermMatrix(DBcorp, control=list(dictionary=mim))

# turn document term matrix into data.frame
df_mim <- data.frame(DOC = dtm_mim$dimnames$Docs, as.matrix(dtm_mim), row.names = NULL , check.names = FALSE)
df_mim

        608106   606843    103600    231550   
1.txt     0        0          0         0
2.txt     0        0          0         0
3.txt     0        0          0         0

это образец моих данных, когда я использую их таким образом; хорошо работает

docs = c(doc1 = "mim 608106 letters 123 mim 606843 letters 1 letters 123456789 ",
         doc2 = "letters letters 1 mim 231550 123 letters",
         doc3 = "mim 103600 letters 123456")
docs<-Corpus(VectorSource(docs))

но когда я создаю документ в отдельном текстовом файле, происходит сбой при извлечении

DBcorp<- VCorpus(DirSource("c:\Users\Desktop\files"))
> DBcorp
<<VCorpus>>
Metadata:  corpus specific: 0, document level (indexed): 0
Content:  documents: 154

1 Ответ

0 голосов
/ 04 ноября 2018

Пожалуйста, попробуйте следующий код. Если вы хотите использовать функции в корпусе tm, лучше использовать lapply (или tm_map). Это вернет только те термины в dtm, которые встречаются в mim.

# note the use of simplify = TRUE. This makes sure you do not get a warning in the line after this one.
mim <- lapply(DBcorp, stringr::str_extract_all, "(mim)[[:blank:]]*[[:digit:]]+", simplify = TRUE)
mim <- lapply(mim, stringr::str_extract_all, "[[:digit:]]+") 
mim <- unique(unlist(mim))

dtm_mim <- DocumentTermMatrix(DBcorp, control = list(dictionary = mim))

df_mim <- data.frame(DOC = dtm_mim$dimnames$Docs, as.matrix(dtm_mim), row.names = NULL , check.names = FALSE)
...