2017-02-13 17 views
-2

Я пытаюсь сфокусировать ~ 4000 документов в R, используя функцию stri_replace_all_fixed. Тем не менее, это ОЧЕНЬ медленно, так как словарь словарных слов состоит из ок. 300 тыс. Слов. Я делаю это, потому что документы находятся на датском языке, и поэтому Портер Стэммер Алгортим не полезен (он слишком агрессивный).stri_replace_all_fixed slow на большом наборе данных - есть ли альтернатива?

Я разместил код ниже. Кто-нибудь знает альтернативу для этого?

Логика: Посмотрите каждое слово в каждом документе -> Если слово = слово из вокала, затем замените его на tran-word.

##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)) 

Структура кадра данных «VOC»:

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

ответ

0

Чтобы сделать словарь маршировать быстро, вам нужно реализовать некоторые умные структуры данных, такие как дерево префиксов. 300000x поиск и замена просто не масштабируются.

Я не думаю, что это будет эффективно в R, но вам нужно будет написать расширение C или C++. У вас там много крошечных операций, накладные расходы на переводчика R убьют вас при попытке сделать это чистым R.