Szukaj…


Wprowadzenie

Przetwarzanie języka naturalnego (NLP) to dziedzina informatyki skoncentrowana na pozyskiwaniu informacji z tekstu wprowadzanego przez ludzi.

Utwórz macierz częstotliwości

Najprostszym podejściem do problemu (i najczęściej stosowanym do tej pory) jest podzielenie zdań na tokeny . Upraszczając, słowa mają abstrakcyjne i subiektywne znaczenie dla osób je używających i otrzymujących, tokeny mają obiektywną interpretację: uporządkowaną sekwencję znaków (lub bajtów). Po podzieleniu zdań kolejność tokena jest pomijana. Takie podejście do problemu znane jest jako model worka słów .

Termin częstotliwość to słownik, w którym każdemu tokenowi przypisuje się wagę . W pierwszym przykładzie konstruujemy macierz częstotliwości z korpusu (zbioru dokumentów ) za pomocą pakietu R 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))

W tym przykładzie utworzyliśmy korpus klasy Corpus zdefiniowany przez pakiet tm z dwiema funkcjami Corpus i VectorSource , który zwraca obiekt VectorSource z wektora znaków. Obiekt tm_corpus to lista naszych dokumentów z dodatkowymi (i opcjonalnymi) metadanymi opisującymi każdy 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]

Gdy mamy już Corpus , możemy przystąpić do wstępnego przetwarzania tokenów zawartych w Corpus aby poprawić jakość końcowego wyniku (macierz częstotliwości). Aby to zrobić, używamy funkcji tm tm_map , która podobnie jak rodzina funkcji apply , przekształca dokumenty w korpusie, stosując funkcję do każdego dokumentu.

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)

Po tych przekształceniach w końcu tworzymy pojęcie macierzy częstotliwości za pomocą

tdm <- TermDocumentMatrix(tm_corpus)

co daje

<<TermDocumentMatrix (terms: 8, documents: 4)>>
Non-/sparse entries: 12/20
Sparsity           : 62%
Maximal term length: 9
Weighting          : term frequency (tf)

które możemy zobaczyć, przekształcając je w macierz

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

Każdy wiersz reprezentuje częstotliwość każdego tokena - który, jak zauważyłeś, wywodził się (np. environment do environ ) - w każdym dokumencie (4 dokumenty, 4 kolumny).

W poprzednich wierszach ważiliśmy każdą parę token / dokument z częstotliwością bezwzględną (tj. Liczbą wystąpień tokena, które pojawiają się w dokumencie).



Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow