Coincidencia de cadena difusaEn el panel Recodificar, hay una opción para agrupar cadenas que permite la coincidencia aproximada.
¿Existe una función JSL para hacer coincidencias de cadenas aproximadas? Si lo hay, estoy teniendo problemas para encontrarlo. ¡Ayudar!
John
Re: Coincidencia de cadenas aproximadasDebido a que el delimitador de cadena de Python es un carácter de comillas simples (cf. comillas dobles de JSL), debe escaparse. También debe poner las siguientes dos líneas al comienzo de la función:
Substitute Into(str1, "'", "\'");
Substitute Into(str2, "'", "\'");
Re: Coincidencia de cadenas aproximadasJusto en el seguimiento, me encontré con un paquete abierto de Python que proporciona todo tipo de medidas de similitud de cadenas. Parece estar muy bien hecho. Está en:
https://github.com/luozhouyang/python-string-similaridad
Fue sencillo escribir una pequeña función JSL que incluye una de las funciones de Python en este paquete, por ejemplo, decidí usar el algoritmo Jaro-Winkler tal como se implementó allí. Mi función se ve así:
JaroWinkler = Function( {str1, str2},
{arg, rslt},
arg = Eval Insert(
"\[
from strsimpy.jaro_winkler import JaroWinkler;
jarowinkler = JaroWinkler();
rslt = jarowinkler.similarity('^str1^', '^str2^')
]\"
);
Python Init();
Python Submit( arg );
rslt = Python Get( rslt );
Python Term();
rslt;
);
<BR /><BR />
rslt = JaroWinkler( "My string", "My tsring" );
Show( rslt ); // Log displays the following: rslt = 0.974074074074074;<BR />(Estoy usando Python 3.8 en Mac. strsimpy depende de numpy, que debe estar instalado en su Python).
Re: Coincidencia de cadenas aproximadasEs posible que puedas usar Script de edición más corto para hacer uno El ejemplo en el índice de secuencias de comandos ensambla una cadena de caracteres que comparten las dos cadenas en orden.