DocumentTermMatrix с разреженностью 0%

#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% разреженности.