Ricerca…


introduzione

L'elaborazione del linguaggio naturale (NLP) è il campo delle scienze informatiche incentrato sul recupero di informazioni da input testuali generati da esseri umani.

Crea una matrice di frequenza del termine

L'approccio più semplice al problema (e il più usato finora) è quello di dividere le frasi in token . Semplificando, le parole hanno significati astratti e soggettivi per le persone che le usano e le ricevono, i token hanno un'interpretazione oggettiva: una sequenza ordinata di caratteri (o byte). Una volta che le frasi vengono divise, l'ordine del token viene ignorato. Questo approccio al problema è noto come modello di borsa delle parole .

Un termine frequenza è un dizionario in cui a ciascun token è assegnato un peso . Nel primo esempio, costruiamo un termine a matrice di frequenza da un corpus corpus (una raccolta di documenti ) con il pacchetto 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))

In questo esempio, abbiamo creato un corpus di classe Corpus definito dal pacchetto tm con due funzioni Corpus e VectorSource , che restituisce un oggetto VectorSource da un vettore di caratteri. L'oggetto tm_corpus è un elenco dei nostri documenti con metadati aggiuntivi (e facoltativi) per descrivere ciascun documento.

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]

Una volta che abbiamo un Corpus , possiamo procedere al preprocesso dei token contenuti nel Corpus per migliorare la qualità dell'output finale (il termine matrice di frequenza). Per fare ciò usiamo la funzione tm tm_map , che similmente alla famiglia di funzioni apply , trasforma i documenti nel corpus applicando una funzione a ciascun documento.

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)

Seguendo queste trasformazioni, alla fine creiamo il termine matrix frequency con

tdm <- TermDocumentMatrix(tm_corpus)

che dà un

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

che possiamo vedere trasformandolo in una matrice

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

Ogni riga rappresenta la frequenza di ciascun token - che come si è notato è stato arginato (ad es. Da environment ad environ ) - in ogni documento (4 documenti, 4 colonne).

Nelle righe precedenti, abbiamo pesato ogni coppia token / documento con la frequenza assoluta (cioè il numero di istanze del token che appaiono nel documento).



Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow