2015-09-29 5 views
5

Ich schreibe ein R Skript und verwende Bibliothek (Ngram).Warum gibt die Funktion ngrams() eindeutige Bigramme?

nehme ich eine Zeichenfolge haben,

„gut qualiti Hundefutter gekauft Sever vital Hundefutter Produkt gut qualiti Produkt wie Eintopf Prozess Fleisch aussehen gefunden riechen besser Labrador besser finicki appreci Produkt“

und möchte Bi-Gramm finden.

Die ngram Bibliothek gibt mir Bi-Gramm wie folgt:

„appreci Produkt“ „-Prozess Fleisch“ „Lebensmittelprodukt“ „Lebensmittel gekauft“ „qualiti dog“ „Produkt gefunden“ „Produkt look“ „aussehen wie „‚wie Eintopf‘‚good qualiti‘‚labrador finicki‘‚gekauft Sever‘‚qualiti Produkt‘‚besser labrador‘ ‚Hundefutter‘‚riecht besser‘‚vital‘‚Fleischgeruch‘‚gefunden gut‘“ sever vital "" Eintopf Prozess "" kann Hund "" finicki appreci "" Produkt besser "

Da der Satz" Hundefutter "zwei Mal enthält, möchte ich dieses Bi-Gramm zwei Mal. Aber ich bekomme es einmal!

Gibt es eine Option in der Bibliothek oder eine andere Bibliothek, die alle Bi-Gramm meines Satzes in R gibt?

Antwort

5

können Sie stylo Paket verwenden. Gibt Duplikate:

library(stylo) 
a = "good qualiti dog food bought sever vital can dog food product found good qualiti product look like stew process meat smell better labrador finicki appreci product better" 
b = txt.to.words(a) 
c = make.ngrams(b, ngram.size = 2) 
print(c) 

Ergebnis:

[1] "good qualiti"  "qualiti dog"  "dog food"   "food bought"  "bought sever"  "sever vital"  "vital can"  "can dog"   "dog food"   
[10] "food product"  "product found" "found good"  "good qualiti"  "qualiti product" "product look"  "look like"  "like stew"  "stew process"  
[19] "process meat"  "meat smell"  "smell better"  "better labrador" "labrador finicki" "finicki appreci" "appreci product" "product better" 
> 
6

Die Entwicklungsversion von ngram hat eine get.phrasetable Methode:

devtools::install_github("wrathematics/ngram") 
library(ngram) 

text <- "good qualiti dog food bought sever vital can dog food product found good qualiti product look like stew process meat smell better labrador finicki appreci product better" 

ng <- ngram(text) 
head(get.phrasetable(ng)) 
#   ngrams freq  prop 
# 1 good qualiti 2 0.07692308 
# 2  dog food 2 0.07692308 
# 3 appreci product 1 0.03846154 
# 4 process meat 1 0.03846154 
# 5 food product 1 0.03846154 
# 6  food bought 1 0.03846154 

Darüber hinaus können Sie die print() Methode verwenden und output == "full" angeben. Das ist:

print(ng, output = "full") 

# NOTE: more output not shown... 
better labrador | 1 
finicki {1} | 

dog food | 2 
product {1} | bought {1} 
# NOTE: more output not shown... 
3

Sie könnten RWeka verwenden. Im Ergebnis können Sie „Hundefutter“ und „gut qualiti“ sehen zweimal

txt <- "good qualiti dog food bought sever vital can dog food product found good qualiti product look like stew process meat smell better labrador finicki appreci product better" 


library(RWeka) 
RWEKABigramTokenizer <- function(x) { 
     NGramTokenizer(x, Weka_control(min = 2, max = 2)) 
} 

RWEKABigramTokenizer(txt) 

[1] "good qualiti"  "qualiti dog"  "dog food"   "food bought"  "bought sever"  "sever vital"  "vital can"  
[8] "can dog"   "dog food"   "food product"  "product found" "found good"  "good qualiti"  "qualiti product" 
[15] "product look"  "look like"  "like stew"  "stew process"  "process meat"  "meat smell"  "smell better"  
[22] "better labrador" "labrador finicki" "finicki appreci" "appreci product" "product better" 

Oder verwenden Sie das tm-Paket in Kombination mit RWeka

library(tm) 
library(RWeka) 
my_corp <- Corpus(VectorSource(txt)) 
tdm_RWEKA <- TermDocumentMatrix(my_corp, control=list(tokenize = RWEKABigramTokenizer)) 

#show the 2 bigrams 
findFreqTerms(tdm_RWEKA, lowfreq = 2) 

[1] "dog food"  "good qualiti" 

#turn into matrix with frequency counts 
tdm_matrix <- as.matrix(tdm_RWEKA) 
3

Um erscheinen solches Bi-Gramm zu produzieren, Sie brauche kein spezielles Paket. Im Grunde teilen Sie den Text und fügen Sie ihn wieder zusammen.

t <- "good qualiti dog food bought sever vital can dog food product found good qualiti product look like stew process meat smell better labrador finicki appreci product better" 
ug <- strsplit(t, " ")[[1]] 
bg <- paste(ug, ug[2:length(ug)]) 

Die Folge bg wäre:

[1] "good qualiti"  "qualiti dog"  "dog food" 
[4] "food bought"  "bought sever"  "sever vital" 
[7] "vital can"  "can dog"   "dog food" 
[10] "food product"  "product found" "found good" 
[13] "good qualiti"  "qualiti product" "product look" 
[16] "look like"  "like stew"  "stew process" 
[19] "process meat"  "meat smell"  "smell better" 
[22] "better labrador" "labrador finicki" "finicki appreci" 
[25] "appreci product" "product better" "better qualiti" 
1

die quanteda Paket Versuchen:

> quanteda::tokenize(txt, ngrams = 2, concatenator = " ") 
[[1]] 
[1] "good qualiti"  "qualiti dog"  "dog food"   "food bought"  "bought sever"  "sever vital"  
[7] "vital can"  "can dog"   "dog food"   "food product"  "product found" "found good"  
[13] "good qualiti"  "qualiti product" "product look"  "look like"  "like stew"  "stew process"  
[19] "process meat"  "meat smell"  "smell better"  "better labrador" "labrador finicki" "finicki appreci" 
[25] "appreci product" "product better" 

Viele zusätzliche Argumente zur Verfügung durch ngrams, einschließlich verschiedener Kombinationen von n Größen bekommen, oder überspringen-Gramm.

Verwandte Themen