concordar com penalidades direcionadas direcionalmente

16

Estou usando tre-agrep (manpage) , uma implementação de agrep (manpage) , para executar uma correspondência aproximada de padrões. Este utilitário procura correspondências com base na distância de Levenshtein e o usuário pode configurar a penalidade aplicada para edições de substituição, inserção ou exclusão.

Eu gostaria, no entanto, de aplicar pesagens diferentemente no comprimento da consulta, ou seja, com um peso menor para exclusões no início (extremidade esquerda) da consulta do que na direita. A manpágina deste utilitário não indica que esse nível de controle é possível.

Existem outras ferramentas de linha de comando em que é possível uma correspondência aproximada com um controle mais preciso sobre as penalidades de incompatibilidade?

user001
fonte
5
AFAIK, concorda é o único. Estou surpreso que você saiba disso, dada sua relativa obscuridade no mundo UNIX (o que é muito ruim). Em teoria, você pode ajustar esses pesos no código fonte, mas se isso é prático ou não, eu não sei. Você já tentou entrar em contato com os autores das ferramentas ou mesmo com os documentos originais em que se baseiam? Lembre-se, eles são provavelmente peidos velhos agora :)
Otheus
3
@Otheus Old peidos ainda são capazes de escrever código ;-)
Kusalananda
Não seria difícil escrever um utilitário de correspondência de Levenshtein com os custos de inserção / exclusão / substituição definidos como expressões em Python ou Awk. A parte tediosa, na verdade, são todas as opções de linha de comando possíveis. Se o OP estiver disposto a mostrar uma linha de comando típica e dizer quais opções agreprealmente precisam, eu provavelmente poderia criar algo. Calcular a distância de duas cordas de Levenshtein é realmente muito fácil. Eu sugeriria um script de shell envolvido na invocação do GNU awk.
Nominal Animal

Respostas:

1

Não. Esse tipo de personalização está fora do escopo de uma ferramenta Linux e no escopo de escrever seu próprio código. O uso de uma linguagem popular de alto nível (Java, JavaScript, Python, Perl) usará um pouco mais de memória que C e será um pouco mais lento para linguagens de script, mas provavelmente isso será insignificante para o seu caso de uso. Portanto, pergunte novamente no stackoverflow com os detalhes exatos de que você precisa e alguém poderá lhe oferecer uma lista.

user1133275
fonte