2014-05-22 1 views
0

J'ai entréeR Correspondance pertinente entre deux ensembles de données volumineux. Même avec des fautes d'orthographe

« Je voyage moi-même, je viens apporté un billet de monde pour aller à singapour, darwin, perth, adelaide, melbourne, brisbane, le coût de l'or, sydney Opra, christchurch , côte d'or Richland, Aukland, Austrlia, et fji C'est un voyage de 10 mois Je vais y aller seul, je n'ai pas peur mais mes amis et ma famille semblent être contre l'idée J'ai expliqué que c'est sûr et que je vais probablement rencontrer des gens le long du chemin et les auberges ne sont pas aussi mauvaises que ce qu'elles ont été faites pour être au moins un tiers de mon voyage je resterai avec mes amis et ma famille. Les vues me font douter de la sécurité, je viens du Royaume-Uni, je serai loin de chez moi, et ils ont peur que je sois dans le pétrin ... Je n'ai jamais été aux Etats-Unis "

J'ai une liste de lieux aussi grande que 5000 lignes. Comme Londres, Singapour, Sydney, Aukland, Fidji, Gold Coast, Sydney Opera, Australie, Royaume-Uni, Etats-Unis ....

Problème Obtenez les places sur l'entrée en faisant correspondre de la liste des lieux. Avec des erreurs d'orthographe et le match le plus proche. Une optimisation est requise.

sortie Singapour | Darwin | perth | adelaide | melbourne | brisbane | gold coast | sydney Opera | christchurch | Aukland | Austrlia | fidji | Royaume-Uni | USA

Méthodes Essayé

library(RecordLinkage) 
library(stringdist) 
input=tolower(gsub('[[:punct:]]', " ", input)) 
Places <- read.delim("\\Data\\Places_List.csv", row.names =NULL,header=TRUE,sep=",") 
Places <-as.matrix(Places) 
##################Different Methods Tried########################## 
ClosestMatch2 = function(string, stringVector){ 

distance = levenshteinSim(string, stringVector); 
stringVector[distance == max(distance)] 
} 
ClosestMatch2(input,Places) 
###############The above 1 doesn't Work################## 
ClosestMatch <- function(string,StringVector) { 
matches <- agrep(string,StringVector,value=TRUE) 
distance <- sdists(string,matches,method = "",weight = c(1, 0, 2)) 
matches <- data.frame(matches,as.numeric(distance)) 
matches <- subset(matches,distance==min(distance)) 
as.character(matches$matches) 
} 
ClosestMatch(input,Places) 
########This work but not proper Results########### 
k=as.matrix((sapply(input,agrep,places))) 
###### Ce travail na pas non plus
agrep, pmatch , str_detect(wont work for spelling Mistakes) doesn't work for bigger data sets 

Répondre

1

le plus proche Match2 fonctionne, en plus de cela ajouter le nombre de caractères di Correspondance partielle de la fence et de la sous-chaîne pour la correspondance avec les fautes d'orthographe

Questions connexes