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).



Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow