2017-02-13 1 views
-2

J'essaie d'étirer ~ 4000 documents dans R, en utilisant la fonction stri_replace_all_fixed. Cependant, il est TRÈS lent, car mon dictionnaire de mots composés est composé d'env. 300k mots. Je le fais parce que les documents sont en danois et par conséquent le Porter Stemmer Algortihm n'est pas utile (il est trop agressif).stri_replace_all_fixed lente sur le gros ensemble de données - existe-t-il une alternative?

J'ai posté le code ci-dessous. Est-ce que quelqu'un sait une alternative pour faire cela? Logique: Regardez chaque mot dans chaque document -> Si mot = mot de la table de voc, puis remplacez par mot-trans.

##Read in the dictionary 
voc <- read.table("danish.csv", header = TRUE, sep=";") 
#Using the library 'stringi' to make the stemming 
library(stringi) 
#Split the voc corpus and put the word and stem column into different corpus 
word <- Corpus(VectorSource(voc))[1] 
tran <- Corpus(VectorSource(voc))[2] 
#Using stri_replace_all_fixed to stem words 
## !! NOTE THAT THE FOLLOWING STEP MIGHT TAKE A FEW MINUTES DEPENDING ON THE SIZE !! ## 
docs <- tm_map(docs, function(x) stri_replace_all_fixed(x, word, tran, vectorize_all = FALSE)) 

Structure du cadre de données « voc »:

 Word   Stem 
1  abandonnere abandonner 
2  abandonnerede abandonner 
3  abandonnerende abandonner 
... 
313273 åsyns   åsyn 

Répondre

0

Pour faire un dictionnaire marche rapide, vous avez besoin de mettre en œuvre des structures de données intelligentes, comme un arbre de préfixe. 300000x recherche et remplace juste ne pas l'échelle.

Je ne pense pas que ce sera efficace dans R, mais vous aurez besoin d'écrire une extension C ou C++. Vous avez beaucoup de minuscules opérations là-bas, le surdébit de l'interpréteur R vous tuera en essayant de le faire en R pur.