Поиск…


Вступление

Обработка естественного языка (NLP) - это область компьютерных наук, ориентированная на извлечение информации из текстового ввода, созданного людьми.

Создать частотную матрицу

Самый простой подход к проблеме (и наиболее часто используемый до сих пор) заключается в разделении предложений на токены . Упрощение, слова имеют абстрактные и субъективные значения для людей, использующих и получающих их, токены имеют объективную интерпретацию: упорядоченную последовательность символов (или байтов). Когда предложения разделены, порядок маркера игнорируется. Такой подход к проблеме в известной модели мешков слов .

Терминная частота - это словарь, в котором каждому токену присваивается вес . В первом примере мы строим матрицу частот термов из corpus corpus (сборник документов ) с пакетом R tm .

require(tm)
doc1 <- "drugs hospitals doctors"
doc2 <- "smog pollution environment"
doc3 <- "doctors hospitals healthcare"
doc4 <- "pollution environment water"
corpus <- c(doc1, doc2, doc3, doc4)
tm_corpus <- Corpus(VectorSource(corpus))

В этом примере мы создали корпус класса Corpus определенный пакетом tm с двумя функциями Corpus и VectorSource , который возвращает объект VectorSource из символьного вектора. Объект tm_corpus представляет собой список наших документов с дополнительными (и необязательными) метаданными для описания каждого документа.

str(tm_corpus)
List of 4
 $ 1:List of 2
  ..$ content: chr "drugs hospitals doctors"
  ..$ meta   :List of 7
  .. ..$ author       : chr(0) 
  .. ..$ datetimestamp: POSIXlt[1:1], format: "2017-06-03 00:31:34"
  .. ..$ description  : chr(0) 
  .. ..$ heading      : chr(0) 
  .. ..$ id           : chr "1"
  .. ..$ language     : chr "en"
  .. ..$ origin       : chr(0) 
  .. ..- attr(*, "class")= chr "TextDocumentMeta"
  ..- attr(*, "class")= chr [1:2] "PlainTextDocument" "TextDocument"
[truncated]

Когда у нас есть Corpus , мы можем перейти к препроцессу токенов, содержащихся в Corpus для улучшения качества конечного результата (термин матрица частот). Для этого мы используем функцию tm tm_map , которая аналогично apply семейству функций преобразует документы в корпус, применяя функцию к каждому документу.

tm_corpus <- tm_map(tm_corpus, tolower)
tm_corpus <- tm_map(tm_corpus, removeWords, stopwords("english"))
tm_corpus <- tm_map(tm_corpus, removeNumbers)
tm_corpus <- tm_map(tm_corpus, PlainTextDocument)
tm_corpus <- tm_map(tm_corpus, stemDocument, language="english")
tm_corpus <- tm_map(tm_corpus, stripWhitespace)
tm_corpus <- tm_map(tm_corpus, PlainTextDocument)

После этих преобразований мы, наконец, создаем матрицу частот с

tdm <- TermDocumentMatrix(tm_corpus)

который дает

<<TermDocumentMatrix (terms: 8, documents: 4)>>
Non-/sparse entries: 12/20
Sparsity           : 62%
Maximal term length: 9
Weighting          : term frequency (tf)

что мы можем рассматривать, преобразуя его в матрицу

as.matrix(tdm)

           Docs
Terms       character(0) character(0) character(0) character(0)
  doctor               1            0            1            0
  drug                 1            0            0            0
  environ              0            1            0            1
  healthcar            0            0            1            0
  hospit               1            0            1            0
  pollut               0            1            0            1
  smog                 0            1            0            0
  water                0            0            0            1

Каждая строка представляет собой частоту каждого маркера - то , как вы заметили, были обусловлены (например , environment для environ ) - в каждом документе (4 документа, 4 колонки).

В предыдущих строках мы взвешивали каждый токен / документ пары с абсолютной частотой (т. Е. Количество экземпляров токена, которые появляются в документе).



Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow