tesis - de acuerdo: solo devolver las mejores coincidencias
tesis sobre youtube pdf (2)
Estoy usando la función ''acepp'' en R, que devuelve un vector de coincidencias. Me gustaría una función similar a la que está de acuerdo que solo devuelva la mejor coincidencia, o las mejores coincidencias si hay empates. Actualmente, estoy haciendo esto usando la función ''sdist ()'' del paquete ''cba'' en cada elemento del vector resultante, pero esto parece muy redundante.
/ edit: aquí está la función que estoy usando actualmente. Me gustaría acelerarlo, ya que parece redundante calcular la distancia dos veces.
library(cba)
word <- ''test''
words <- c(''Teest'',''teeeest'',''New York City'',''yeast'',''text'',''Test'')
ClosestMatch <- function(string,StringVector) {
matches <- agrep(string,StringVector,value=TRUE)
distance <- sdists(string,matches,method = "ow",weight = c(1, 0, 2))
matches <- data.frame(matches,as.numeric(distance))
matches <- subset(matches,distance==min(distance))
as.character(matches$matches)
}
ClosestMatch(word,words)
El paquete RecordLinkage se eliminó de CRAN, use stringdist en su lugar:
library(stringdist)
ClosestMatch2 = function(string, stringVector){
stringVector[amatch(string, stringVector, maxDist=Inf)]
}
El paquete de acuerdo utiliza las distancias de Levenshtein para coincidir con las cadenas. El paquete RecordLinkage tiene una función C para calcular la Distancia Levenshtein, que se puede utilizar directamente para acelerar su cálculo. Aquí hay una función ClosestMatch
reelaborada que es aproximadamente 10 veces más rápida
library(RecordLinkage)
ClosestMatch2 = function(string, stringVector){
distance = levenshteinSim(string, stringVector);
stringVector[distance == max(distance)]
}