#r #pdf #tm
#r #PDF #tm
Вопрос:
Я пытаюсь получить матрицу терминов документа из книги на итальянском языке. У меня есть PDF-файл этой книги, и я написал несколько строк кода:
#install.packages("pdftools")
library(pdftools)
library(tm)
text <- pdf_text("IoRobot.pdf")
# collapse pdf pages into 1
text <- paste(unlist(text), collapse ="")
myCorpus <- VCorpus(VectorSource(text))
mydtm <-DocumentTermMatrix(myCorpus,control = list(removeNumbers = TRUE, removePunctuation = TRUE,
stopwords=stopwords("it"), stemming=TRUE))
inspect(mydtm)
Результат, который я получил после последней строки:
<<DocumentTermMatrix (documents: 1, terms: 10197)>>
Non-/sparse entries: 10197/0
Sparsity : 0%
Maximal term length: 39
Weighting : term frequency (tf)
Sample :
Terms
Docs calvin cosa donovan esser piú poi powel prima quando robot
1 201 191 254 193 288 211 287 166 184 62
Я заметил, что разреженность равна 0%. Это нормально?
Ответ №1:
Да, это кажется правильным.
Матрица терминов документа — это матрица, которая содержит документы в виде строк, термины в виде столбцов и 0 или 1, если термин находится в документе в строке (1) или нет (0).
Разреженность — это индикатор, который указывает на «количество нулей» в матрице терминов документа.
Вы можете определить разреженный термин, если его нет в документе, глядя отсюда.
Чтобы понять суть, давайте посмотрим на воспроизводимый пример, который создает ситуацию, аналогичную вашей:
library(tm)
text <- c("here some text")
corpus <- VCorpus(VectorSource(text))
DTM <- DocumentTermMatrix(corpus)
DTM
<<DocumentTermMatrix (documents: 1, terms: 3)>>
Non-/sparse entries: 3/0
Sparsity : 0%
Maximal term length: 4
Weighting : term frequency (tf)
Глядя на результат, мы видим, что у вас есть один документ (таким образом, DTM с этим корпусом состоит из одной строки).
Взглянув на это:
as.matrix(DTM)
Terms
Docs here some text
1 1 1 1
Теперь может быть проще понять результат:
-
У вас есть один документ с тремя терминами:
<<DocumentTermMatrix (документов: 1, терминов: 3)>>
-
Ваши не разреженные (т.Е.
!= 0 in DTM
) равны 3, иsparse == 0
:Не- / разреженные записи: 3/0
Итак, ваша разреженность заключается == 0%
в том, что у вас не может быть нескольких 0 в одном корпусе документов; каждый термин принадлежит уникальному документу, поэтому у вас будут все:
Sparsity : 0%
Посмотрим на другой пример, в котором есть разреженные термины:
text <- c("here some text", "other text")
corpus <- VCorpus(VectorSource(text))
DTM <- DocumentTermMatrix(corpus)
DTM
<<DocumentTermMatrix (documents: 2, terms: 4)>>
Non-/sparse entries: 5/3
Sparsity : 38%
Maximal term length: 5
Weighting : term frequency (tf)
as.matrix(DTM)
Terms
Docs here other some text
1 1 0 1 1
2 0 1 0 1
Теперь у вас есть 3 разреженных члена (3/5), и если вы сделаете 3/8 = 0,375, то есть 38% разреженности.