aceptar penas sesgadas direccionalmente

16

Estoy usando tre-agrep (manpage) , una implementación de agrep (manpage) , para realizar una coincidencia aproximada de patrones. Esta utilidad busca coincidencias en función de la distancia de Levenshtein , y el usuario puede configurar la penalización aplicada para las ediciones de sustitución, inserción o eliminación.

Sin embargo, me gustaría aplicar ponderaciones diferenciales a lo largo de la consulta, es decir, con una ponderación menor para las eliminaciones al principio (extremo izquierdo) de la consulta que a la derecha. La manpágina de esta utilidad no indica que tal nivel de control sea posible.

¿Existen otras herramientas de línea de comando en las que es posible una coincidencia aproximada con un control más fino sobre las penalizaciones por desajuste?

user001
fuente
55
AFAIK, agrep es el único. Me sorprende que incluso lo sepas, dada su relativa oscuridad en el mundo UNIX (que es una lástima). En teoría, puede ajustar estos pesos en el código fuente, pero no sé si eso es práctico o no. ¿Has intentado contactar a los autores de las herramientas o incluso los documentos originales en los que se basan?
Eso
3
@Otheus Old farts todavía pueden escribir código ;-)
Kusalananda
No sería difícil escribir una utilidad de coincidencia de Levenshtein con costos de inserción / eliminación / reemplazo definidos como expresiones en Python o Awk. La parte tediosa, en realidad, son todas las posibles opciones de línea de comandos. Si el OP está dispuesto a mostrar una línea de comando típica y decir qué opciones agreprealmente necesitan, probablemente podría preparar algo. Calcular la distancia de Levenshtein de dos cuerdas es muy fácil, de verdad. Sugeriría un script de shell envuelto alrededor de la invocación de GNU awk.
Nominal Animal

Respuestas:

1

No. Ese tipo de personalización queda fuera del alcance de una herramienta de Linux y dentro del alcance de escribir su propio código. El uso de un lenguaje popular de alto nivel (Java, JavaScript, Python, Perl) usará un poco más de memoria que C y será un poco más lento para los lenguajes con script, pero es probable que sea insignificante para su caso de uso. Entonces, vuelva a preguntar en stackoverflow con los detalles exactos que necesita y alguien podría ofrecerle una línea.

usuario1133275
fuente