2015-07-19 1 views
0

Je crée un modèle trigramme et quadri quadri utilisant RWeka. Il y a un comportement étrange je remarque Pour le trigrammeRWeka remove Termes clairs

TrigramTokenizer <- function(x) NGramTokenizer(x, Weka_control(min = 3, max = 3)) 
tdm <- TermDocumentMatrix(docs, control = list(tokenize = TrigramTokenizer)) 

> dim(tdm) 
[1] 1540099  3 

> tdm 
<<TermDocumentMatrix (terms: 1540099, documents: 3)>> 
Non-/sparse entries: 1548629/3071668 
Sparsity   : 66% 
Maximal term length: 180 
Weighting   : term frequency (tf) 

Quand je supprimer des termes rares, il rétrécit les ci-dessus ~ 1 million de lignes à 8307

> b <- removeSparseTerms(tdm, 0.66) 
> dim(b) 
[1] 8307 3 

Pour une suppression Quadgram ne l'affecte pas du tout

quadgramTokenizer <- function(x) NGramTokenizer(x, Weka_control(min = 4, max = 4)) 
    tdm <- TermDocumentMatrix(docs, control = list(tokenize = QuadgramTokenizer)) 

<<TermDocumentMatrix (terms: 1427403, documents: 3)>> 
Non-/sparse entries: 1427936/2854273 
Sparsity   : 67% 
Maximal term length: 185 
Weighting   : term frequency (tf) 
> dim(tdm) 
[1] 1427403  3 
> tdm <- removeSparseTerms(tdm, 0.67) 
> dim(tdm) 
[1] 1427403  3 

A 1 million d'éléments après suppression des termes clairsemés.

Cela ne semble pas correct.

S'il vous plaît laissez-moi savoir si je fais quelque chose de mal

Cordialement Ganesh

Répondre

0

C'est bizarre. Un comportement logique est que la suppression de termes clairsemés enlèvera beaucoup dans les deux cas, car les trigrammes et les quadrammes sont des cas de gramme unique moins courants. Avez-vous un autre objet QuadgramTokenizer dans votre session? votre fonction d'origine est appelée avec un petit "q" quadgramTokenize. Mais je me demande pourquoi il n'a pas montré une erreur, il aurait pu le prendre comme vide? Je pense que ça doit être quelque chose d'aussi simple que ça. Jetez un coup d'œil et si ce n'est pas le cas, je l'utiliserai avec un échantillon de données et je verrai ce qui pourrait ne pas fonctionner ici.