Estoy tratando de asignar una puntuación de similitud basada en la comparación entre 2 cadenas. ¿Existe una función para el mismo en R. Soy consciente de tal función en SAS con el nombre de SPEDIS. Por favor, hágamelo saber si existe tal función en R.Puntuaciones de similitud basadas en la comparación de cadenas en R (distancia de edición)
Respuesta
La función adist calcula el Levenshtein edit distance entre dos cadenas. Esto se puede transformar en una métrica de similitud como 1 - (distancia de edición de Levenshtein/longitud de cuerda más larga).
La función levenshteinSim
en el paquete RecordLinkage también lo hace directamente, y puede ser más rápido que adist
.
library(RecordLinkage)
> levenshteinSim("apple", "apple")
[1] 1
> levenshteinSim("apple", "aaple")
[1] 0.8
> levenshteinSim("apple", "appled")
[1] 0.8333333
> levenshteinSim("appl", "apple")
[1] 0.8
ETA: Curiosamente, mientras levenshteinDist
en el paquete RecordLinkage parece ser ligeramente más rápido que adist
, levenshteinSim
es considerablemente más lento que tampoco. Utilizando el rbenchmark paquete:
> benchmark(levenshteinDist("applesauce", "aaplesauce"), replications=100000)
test replications elapsed relative
1 levenshteinDist("applesauce", "aaplesauce") 100000 4.012 1
user.self sys.self user.child sys.child
1 3.583 0.452 0 0
> benchmark(adist("applesauce", "aaplesauce"), replications=100000)
test replications elapsed relative user.self
1 adist("applesauce", "aaplesauce") 100000 4.277 1 3.707
sys.self user.child sys.child
1 0.461 0 0
> benchmark(levenshteinSim("applesauce", "aaplesauce"), replications=100000)
test replications elapsed relative
1 levenshteinSim("applesauce", "aaplesauce") 100000 7.206 1
user.self sys.self user.child sys.child
1 6.49 0.743 0 0
Esta sobrecarga se debe simplemente al código para levenshteinSim
, que es sólo una envoltura alrededor de levenshteinDist
:
> levenshteinSim
function (str1, str2)
{
return(1 - (levenshteinDist(str1, str2)/pmax(nchar(str1),
nchar(str2))))
}
FYI: si siempre está comparando dos cadenas en lugar de vectores , puede crear una nueva versión que utiliza max
lugar de pmax
y afeitar ~ 25% de descuento en el tiempo de ejecución:
mylevsim = function (str1, str2)
{
return(1 - (levenshteinDist(str1, str2)/max(nchar(str1),
nchar(str2))))
}
> benchmark(mylevsim("applesauce", "aaplesauce"), replications=100000)
test replications elapsed relative user.self
1 mylevsim("applesauce", "aaplesauce") 100000 5.608 1 4.987
sys.self user.child sys.child
1 0.627 0 0
Resumen breve: hay poca diferencia entre adist
y levenshteinDist
en términos de rendimiento, aunque la primera es preferible si no desea agregar dependencias de paquete. Cómo convertirlo en una medida de similitud tiene un poco de efecto en el rendimiento.
Hola, Sí, la función es útil. Además, ¿es posible usar esta función directamente en una consulta SQL? Estoy usando el paquete sqldf para escribir una consulta sql y asignar su resultado a un marco de datos en R.example title_score <-sqldf ("seleccione a.id como mp_id, b.id como sp_id, case cuando levenshteinSim (a .title, b.title) entre 0 y 100 then ((100-levenshteinSim (a.title, b.title))/100) * c.weights else 0 finaliza como title_score de allproducts a join allproducts b on a. subcategory_id = b.subcategory_id y a.id> b.id join filterweights c en b.subcategory_id = c.subcategory y c.filter_name = 'title' "); –
- 1. Similitud de cadenas -> distancia de Levenshtein
- 2. C# - Comparación de similitud de cadenas
- 3. Métricas de similitud de cadenas en Python
- 4. Prueba de comparación "similitud" de cadena C#
- 5. Comparación de polígonos para similitud
- 6. ¿Cómo calcular la medida de similitud de distancia de dos cadenas dadas?
- 7. Comparación de cadenas en Java
- 8. Algoritmos de similitud de cadenas?
- 9. Fast Levenshtein distancia en R?
- 10. Similitud entre cadenas de líneas
- 11. Rubí comparar dos cadenas porcentaje de similitud
- 12. Comparación de cadenas en Cocoa
- 13. agrupando cadenas por similitud
- 14. Analizar texto (lematización, distancia de edición)
- 15. Distancia de Hamming en cadenas binarias en SQL
- 16. Limitaciones de las técnicas de clasificación basadas en comparación
- 17. Rendimiento de comparación de cadenas en C#
- 18. Similitud de cadenas: ¿cómo funciona exactamente Bitap?
- 19. Comparación de cadenas MySQL
- 20. ¿Cómo calculo la distancia de edición de árbol?
- 21. ¿Cómo se mide la similitud entre cadenas?
- 22. Comparación de cadenas y prácticas de cadenas en Java
- 23. Calculando la distancia de Hamming para dos vectores en R?
- 24. comparación de cadenas rápido en C
- 25. distancia euclidiana vs Pearson similitud de correlación vs coseno?
- 26. comparación de cadenas en script bash
- 27. Comparación de cadenas en dotnet framework 4
- 28. Comparación de cadenas en .Net: "+" vs "-"
- 29. comparación de cadenas exacta en MySQL consulta
- 30. comparación de cadenas en un bool
¿Ha explorado 'adist' y' agrep'? No estoy familiarizado con SPEDIS. – A5C1D2H2I1M1N2O1R2T1