R Language
Naturlig språkbehandling
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).