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.



Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow