R Language
Natuurlijke taalverwerking
Zoeken…
Invoering
Natuurlijke taalverwerking (NLP) is het gebied van de computerwetenschappen gericht op het ophalen van informatie van tekstuele invoer gegenereerd door mensen.
Maak een term frequentiematrix
De eenvoudigste benadering van het probleem (en de meest gebruikte tot nu toe) is om zinnen in tokens te splitsen. Vereenvoudigend, woorden hebben abstracte en subjectieve betekenissen voor de mensen die ze gebruiken en ontvangen, tokens hebben een objectieve interpretatie: een geordende reeks tekens (of bytes). Nadat zinnen zijn gesplitst, wordt de volgorde van het token genegeerd. Deze benadering van het probleem staat bekend als het bag of words- model.
Een termfrequentie is een woordenboek waarin aan elk token een gewicht wordt toegewezen. In het eerste voorbeeld construeren we een term frequentiematrix van een corpus corpus (een verzameling documenten ) met het R-pakket 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))
In dit voorbeeld hebben we een corpus van de klasse Corpus
gedefinieerd door het pakket tm
met twee functies Corpus
en VectorSource
, die een VectorSource
object uit een VectorSource
retourneert. Het object tm_corpus
is een lijst van onze documenten met aanvullende (en optionele) metadata om elk document te beschrijven.
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]
Zodra we een Corpus
, kunnen we de tokens in het Corpus
voorbewerken om de kwaliteit van de uiteindelijke output (de term frequentiematrix) te verbeteren. Om dit te doen gebruiken we de tm
functie tm_map
, die eveneens aan de apply
familie van functies, de documenten te transformeren in het corpus door het toepassen van een functie om elk document.
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)
Na deze transformaties creëren we uiteindelijk de term frequentiematrix met
tdm <- TermDocumentMatrix(tm_corpus)
wat een geeft
<<TermDocumentMatrix (terms: 8, documents: 4)>>
Non-/sparse entries: 12/20
Sparsity : 62%
Maximal term length: 9
Weighting : term frequency (tf)
die we kunnen bekijken door het te transformeren naar een matrix
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
Elke rij vertegenwoordigt de frequentie van elk token - die zoals u hebt gemerkt (bijvoorbeeld environment
tot environ
) - in elk document (4 documenten, 4 kolommen) staat.
In de vorige regels hebben we elk paar tokens / document gewogen met de absolute frequentie (dat wil zeggen het aantal instanties van het token dat in het document wordt weergegeven).