2017-05-17 7 views
0

Ich benutze Quanteda R-Paket, um Ngrams (hier 1gramm und 2gramm) aus Text Data_clean $ Review zu extrahieren, aber ich bin auf der Suche nach einem Weg mit R Chi-Quadrat zwischen zu compte document und die extrahierten ngrams:Berechne Chi-Quadrat-Wert zwischen Ngrammen und Dokumenten mit Quanteda

Hier der R-Code, den ich getan habe, um Text zu bereinigen (revoiew) und die N-Gramme zu generieren.

Irgendeine Idee bitte?

danke

#delete rows with empty value columns 
Data_clean <- Data[Data$Note!="" & Data$Review!="",] 


Data_clean$id <- seq.int(nrow(Data_clean)) 

train.index <- 1:50000 
test.index <- 50001:nrow(Data_clean) 


#clean up 
# remove grammar/punctuation 
Data_clean$Review.clean <- tolower(gsub('[[:punct:]0-9]', ' ', Data_clean$Review)) 


train <- Data_clean[train.index, ] 
test <- Data_clean[test.index, ] 

temp.tf <- Data_clean$Raison.Reco.clean %>% tokens(ngrams = 1:2) %>% # generate tokens 
     dfm # generate dfm 

Antwort

1

Sie nicht ngrams dafür verwenden würde, sondern eine Funktion textstat_collocations() genannt.

Es ist ein bisschen schwierig, Ihrem exakten Beispiel zu folgen, da keines dieser Objekte erklärt oder geliefert wird, aber versuchen wir es mit einigen der eingebauten Daten von quanteda. Ich werde die Texte aus dem Eröffnungskorpus holen und einige Filter anwenden, die ähnlich sind wie oben.

So Bigramme für chi punkten^2, verwenden Sie:

# create the corpus, subset on some conditions (could be Note != "" for instance) 
corp_example <- data_corpus_inaugural 
corp_example <- corpus_subset(corp_example, Year > 1960) 

# this will remove punctuation and numbers 
toks_example <- tokens(corp_example, remove_punct = TRUE, remove_numbers = TRUE) 

# find and score chi^2 bigrams 
coll2 <- textstat_collocations(toks_example, method = "chi2", max_size = 2) 
head(coll2, 10) 
#    collocation count  X2 
# 1  reverend clergy  2 28614.00 
# 2  Majority Leader  2 28614.00 
# 3  Information Age  2 28614.00 
# 4  Founding Fathers  3 28614.00 
# 5 distinguished guests  3 28614.00 
# 6  Social Security  3 28614.00 
# 7   Chief Justice  9 23409.82 
# 8   middle class  4 22890.40 
# 9  Abraham Lincoln  2 19075.33 
# 10  society's ills  2 19075.33 

Added:

# needs to be a list of the collocations as separate character elements 
coll2a <- sapply(coll2$collocation, strsplit, " ", USE.NAMES = FALSE) 

# compound the tokens using top 100 collocations 
toks_example_comp <- tokens_compound(toks_example, coll2a[1:100]) 
toks_example_comp[[1]][1:20] 
# [1] "Vice_President" "Johnson"   "Mr_Speaker"  "Mr_Chief"  "Chief_Justice" 
# [6] "President"  "Eisenhower"  "Vice_President" "Nixon"   "President"  
# [11] "Truman"   "reverend_clergy" "fellow_citizens" "we"    "observe"   
# [16] "today"   "not"    "a"    "victory"   "of"    
+0

Vielen Dank, aber ich denke, mit dieser Methode, die Sie vorschlagen, es Es wird nicht einfach sein, eine dfm zu erstellen, wo die Liste der Kollokationen und das Dokument 'Data_Clean $ review' sind. –

+1

Es sollte einfach sein ... bleib dran, während ich gerade daran arbeite. –

+0

Ok danke :) –

Verwandte Themen