Sök…


Introduktion

Naturligt språkbearbetning (NLP) är datavetenskapens område som fokuserar på att hämta information från textinmatningar som genereras av människor.

Skapa en termfrekvensmatris

Det enklaste tillvägagångssättet till problemet (och det hittills mest använda) är att dela meningar i symboler . Förenklade ord har abstrakta och subjektiva betydelser för personer som använder och tar emot dem, symboler har en objektiv tolkning: en ordnad sekvens av tecken (eller byte). När meningarna har delats bortses från tokenets ordning. Denna metod till problemet i känd som påsar med ordmodell .

En termfrekvens är en ordlista, där till varje symbol tilldelas en vikt . I det första exemplet konstruerar vi en termfrekvensmatris från ett corpus corpus (en samling av dokument ) med R-paketet 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))

I det här exemplet skapade vi ett korpus av klass Corpus definierat av paketet tm med två funktioner Corpus och VectorSource , som returnerar ett VectorSource objekt från en teckenvektor. Objektet tm_corpus är en lista över våra dokument med ytterligare (och valfria) metadata för att beskriva varje dokument.

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]

När vi har ett Corpus kan vi fortsätta att förbereda de token som finns i Corpus att förbättra kvaliteten på den slutliga utgången (termen frekvensmatris). För att göra detta använder vi tm funktionen tm_map , som på samma sätt som den apply tm_map transformerar dokumenten i korpuset genom att tillämpa en funktion på varje dokument.

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)

Efter dessa transformationer skapar vi äntligen termen frekvensmatris med

tdm <- TermDocumentMatrix(tm_corpus)

vilket ger en

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

som vi kan se genom att omvandla den till en matris

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

Varje rad representerar frekvensen för varje token - som du märkte har stammats (t.ex. environment till environ ) - i varje dokument (4 dokument, 4 kolumner).

I de föregående raderna har vi vägt varje par-token / dokument med den absoluta frekvensen (dvs. antalet instanser av tokenet som visas i dokumentet).



Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow