R Language
Verarbeitung natürlicher Sprache
Suche…
Einführung
Natural Language Processing (NLP) ist ein Bereich der Informatik, der sich auf das Abrufen von Informationen aus der von Menschen generierten Texteingabe konzentriert.
Erstellen Sie eine Termfrequenzmatrix
Die einfachste Herangehensweise an das Problem (und die bis jetzt am häufigsten verwendete) besteht darin, Sätze in Token aufzuteilen. Vereinfachend haben Wörter abstrakte und subjektive Bedeutungen für die Menschen, die sie verwenden und erhalten. Token haben eine objektive Interpretation: eine geordnete Folge von Zeichen (oder Bytes). Sobald die Sätze aufgeteilt sind, wird die Reihenfolge des Tokens ignoriert. Diese Herangehensweise an das Problem ist als Bag of Words- Modell bekannt.
Eine Begriffhäufigkeit ist ein Wörterbuch, in dem jedem Token eine Gewichtung zugewiesen wird. Im ersten Beispiel konstruieren wir eine Termfrequenzmatrix aus einem Corpus Corpus (einer Sammlung von Dokumenten ) mit dem R-Paket 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 diesem Beispiel haben wir einen Korpus der Klasse Corpus
, der durch das Paket tm
mit den zwei Funktionen Corpus
und VectorSource
, die ein VectorSource
Objekt aus einem Zeichenvektor zurückgibt. Das Objekt tm_corpus
ist eine Liste unserer Dokumente mit zusätzlichen (und optionalen) Metadaten, um jedes Dokument zu beschreiben.
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]
Sobald wir einen Corpus
, können wir mit der Vorverarbeitung der im Corpus
enthaltenen Token fortfahren, um die Qualität der endgültigen Ausgabe (der Begriff Frequenzmatrix) zu verbessern. Dazu verwenden wir die tm
Funktion tm_map
, die ähnlich wie die apply
Funktionsfamilie die Dokumente im Korpus transformiert, indem auf jedes Dokument eine Funktion tm_map
wird.
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)
Nach diesen Transformationen erstellen wir schließlich die Termfrequenzmatrix mit
tdm <- TermDocumentMatrix(tm_corpus)
was gibt ein
<<TermDocumentMatrix (terms: 8, documents: 4)>>
Non-/sparse entries: 12/20
Sparsity : 62%
Maximal term length: 9
Weighting : term frequency (tf)
das können wir sehen, indem wir es in eine Matrix transformieren
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
Jede Zeile stellt die Frequenz jedes Token - dass , wie Sie (zB bemerkt dämmt wurden environment
zu environ
in jedem Dokument (4 Dokumente, 4 Spalten) -).
In den vorherigen Zeilen haben wir jedes Token / Dokument jedes Paares mit der absoluten Häufigkeit (dh der Anzahl von Instanzen des Tokens, die im Dokument vorkommen) gewichtet.