2017-03-13 7 views
4

Après les nombreux guides pour la création bigrams en utilisant le 'tm' et paquets 'RWeka', je commençais à me frustré que seul 1-Grams étaient renvoyé dans le tdm. Grâce à beaucoup d'essais et d'erreurs, j'ai découvert que la fonction appropriée a été atteinte en utilisant 'VCorpus' mais sans utiliser 'Corpus'. BTW, je suis assez sûr que cela fonctionnait avec 'Corpus' ~ il y a 1 mois, mais ce n'est pas maintenant.Création N-Grams avec tm & RWeka - travaille avec VCorpus mais pas Corpus

R (3.3.3), RTools (3.4), RStudio (1.0.136) et tous les paquetages (tm 0.7-1, RWeka 0.4-31) ont été mis à jour au plus tard.

J'apprécierais tout aperçu de ce que cela ne fonctionnera pas avec Corpus et si d'autres ont ce même problème.

#A Reproducible example 
# 
#Weka bi-gram test 
# 

library(tm) 
library(RWeka) 

someCleanText <- c("Congress shall make no law respecting an establishment of", 
        "religion, or prohibiting the free exercise thereof or", 
        "abridging the freedom of speech or of the press or the", 
        "right of the people peaceably to assemble and to petition", 
        "the Government for a redress of grievances") 

aCorpus <- Corpus(VectorSource(someCleanText)) #With this, only 1-Grams are created 
#aCorpus <- VCorpus(VectorSource(someCleanText)) #With this, biGrams are created as desired 

BigramTokenizer <- function(x) NGramTokenizer(x, Weka_control(min=2, max=2)) 

aTDM <- TermDocumentMatrix(aCorpus, control=list(tokenize=BigramTokenizer)) 

print(aTDM$dimnames$Terms) 

résultat avec «Corpus de

[1] "congress"  "establishment" "law"   "make"   
[5] "respecting" "shall"   "exercise"  "free"   
[9] "prohibiting" "religion"  "the"   "thereof"  
[13] "abridging"  "freedom"  "press"   "speech"  
[17] "and"   "assemble"  "peaceably"  "people"  
[21] "petition"  "right"   "for"   "government" 
[25] "grievances" "redress" 

Résultat avec 'VCorpus de

[1] "a redress"  "abridging the" "an establishment" "and to"   
[5] "assemble and"  "congress shall" "establishment of" "exercise thereof" 
[9] "for a"   "free exercise" "freedom of"  "government for" 
[13] "law respecting" "make no"   "no law"   "of grievances" 
[17] "of speech"  "of the"   "or of"   "or prohibiting" 
[21] "or the"   "peaceably to"  "people peaceably" "press or"   
[25] "prohibiting the" "redress of"  "religion or"  "respecting an" 
[29] "right of"   "shall make"  "speech or"  "the free"   
[33] "the freedom"  "the government" "the people"  "the press"  
[37] "thereof or"  "to assemble"  "to petition" 
+0

pas reproductibles, version de R/RWeka que vous utilisez? –

+0

Merci d'avoir essayé. Est-ce que 'non reproductible' signifie que vous ne pouvez pas exécuter pour reproduire ou que vous avez obtenu les résultats attendus, contrairement à moi? Les versions que j'utilise sont listées dans la question originale: R (3.3.3), RWeka (0.4-31). En plus de 'tm', RTools et RStudio ont été mis à jour en un jour de la publication originale aux dernières versions disponibles. –

+0

J'ai le même problème que Paul_J. Cela n'a rien à voir avec Weka, car je peux produire un comportement similaire avec des tokenizers auto-enregistrés. J'utilise R version 3.3.2 (2016-10-31) et tm 0.7.1 – Julian

Répondre

0

je travaillais avec R.3.4.1 et changé pour R3.3.3, maintenant VCorpus solution a fonctionné pour moi. TM et RWeka créent les bigrams correctement.

sessionInfo() 
R version 3.3.3 (2017-03-06) 
Platform: x86_64-w64-mingw32/x64 (64-bit) 
Running under: Windows >= 8 x64 (build 9200)