2017-06-29 2 views
0

Voici un script simple pour la correspondance floue que j'ai écrite. Il y a environ 24 000 mots-clés dans le fichier d'entrée et environ 900 000 dans la liste principale.Plus rapide pour la boucle pour le match floue

Actuellement, le traitement des 24 000 mots-clés prend beaucoup de temps. Des idées comment je peux éliminer la boucle for en faveur de quelque chose de beaucoup plus rapide?

> #=====Install Packages====# 
library(stringdist) 
> 
> #=====Import Master List======# 
master_list = 
> read.csv('/Documents/Keywords Search Terms 
> Tool/input/master/Master List.csv') 
> 
> #=====Import Input File=====# input_data = 
> read.csv('/Documents/Keywords Search Terms 
> Tool/input/test_input_file.csv') 
> 
> #=====Fuzzy Matching for Keywords=====# 
> #Convert to Characters 
master_list$Keyword<-as.character(master_list$Keyword) 
> input_data$Keyword<-as.character(input_data$Keyword) 
> 
> #Perform Matching 
fuzzy_match = data.frame() 
> 
> for (i in 1:nrow(input_data)){ new_word = subset(input_data, Keyword 
> == input_data$Keyword[i]) new_word$match_dummy = ain(new_word$Keyword,master_list$Keyword) fuzzy_match <- 
> rbind(fuzzy_match,new_word) } 

Répondre

0

Essayez de jouer avec la fonction stringdistmatrix. Il est parallélisé.

library(stringdist)  
stringdistmatrix(c('a', 'b', 'c'), c('a', 'b', 'c')) 

mises à jour selon un commentaire:

Essayez quelque chose comme:

ain(c('a', 'd'), c('a', 'b', 'c')) 

Cela donne:

TRUE FALSE 
+0

Merci mais ne fonctionnerait pas si je n'ai pas le même nombre d'enregistrements dans chaque ensemble de données. Aussi je veux sortir un nouveau champ dans la liste d'entrée qui indique s'il y avait une correspondance ou non. – BlackHat