accepter les sanctions biaisées directionnellement


16

J'utilise tre-agrep (manpage) , une implémentation de agrep (manpage) , pour effectuer une correspondance approximative des motifs. Cet utilitaire recherche des correspondances basées sur la distance de Levenshtein , et l'utilisateur peut configurer la pénalité appliquée pour les modifications de substitution, d'insertion ou de suppression.

Je voudrais, cependant, appliquer des pondérations différentielles sur la longueur de la requête, à savoir avec un poids plus faible pour les suppressions au début (extrémité gauche) de la requête qu'à droite. La manpage de cet utilitaire n'indique pas qu'un tel niveau de contrôle est possible.

Existe-t-il d'autres outils de ligne de commande permettant une correspondance approximative avec un contrôle plus fin des pénalités de non-concordance?


5
AFAIK, acceptp est le seul. Je suis surpris que vous le sachiez même, étant donné sa relative obscurité dans le monde UNIX (ce qui est dommage). En théorie, vous pouvez ajuster ces poids dans le code source, mais que ce soit pratique ou non, je ne sais pas. Avez-vous essayé de contacter les auteurs des outils ou même les articles originaux sur lesquels ils sont basés? Attention, ce sont probablement de vieux pets maintenant :)
Otheus

3
@Otheus Les vieux pets sont toujours capables d'écrire du code ;-)
Kusalananda

Il ne serait pas difficile d'écrire un utilitaire de correspondance Levenshtein avec des coûts d'insertion / suppression / remplacement définis comme des expressions en Python ou Awk. La partie fastidieuse est vraiment toutes les options de ligne de commande possibles. Si l'OP est disposé à afficher une ligne de commande typique et à indiquer les options dont agrepils ont réellement besoin, je pourrais probablement préparer quelque chose. Calculer la distance Levenshtein de deux chaînes est vraiment très simple. Je suggérerais un script shell enroulé autour de l'invocation de awk GNU.
Nominal Animal

Réponses:


1

Non. Ce type de personnalisation n'entre pas dans le cadre d'un outil Linux et dans le cadre de l'écriture de votre propre code. L'utilisation d'un langage de haut niveau populaire (Java, JavaScript, Python, Perl) utilisera un peu plus de mémoire que C et sera un peu plus lent pour les langages de script, mais cela sera probablement négligeable pour votre cas d'utilisation. Alors réinterrogez sur stackoverflow avec les détails exacts dont vous avez besoin et quelqu'un pourrait vous offrir une doublure.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.