essere d'accordo con penalità di parte


16

Sto usando tre-agrep (manpage) , un'implementazione di agrep (manpage) , per eseguire una corrispondenza approssimativa del modello. Questa utility cerca corrispondenze in base alla distanza di Levenshtein e l'utente può configurare la penalità applicata per le modifiche di sostituzione, inserimento o cancellazione.

Vorrei, tuttavia, applicare pesi in modo diverso su tutta la lunghezza della query, in particolare con un peso inferiore per le eliminazioni all'inizio (estremità sinistra) della query rispetto a destra. La manpagina per questa utility non indica che un tale livello di controllo è possibile.

Esistono altri strumenti da riga di comando in cui è possibile una corrispondenza approssimativa con un controllo più preciso delle penalità di mancata corrispondenza?


5
AFAIK, agrep è l'unico. Sono sorpreso che tu lo sappia anche, data la sua relativa oscurità nel mondo UNIX (che è troppo male). In teoria, è possibile regolare questi pesi nel codice sorgente, ma se ciò sia pratico o no, non lo so. Hai provato a contattare gli autori degli strumenti o anche i documenti originali su cui sono basati? Intendiamoci, probabilmente sono vecchie scoregge ora :)
Otheus

3
@Otheus Le vecchie scoregge sono ancora in grado di scrivere codice ;-)
Kusalananda

Non sarebbe difficile scrivere un'utilità di abbinamento Levenshtein con i costi di inserimento / cancellazione / sostituzione definiti come espressioni in Python o Awk. La parte noiosa, in realtà, sono tutte le possibili opzioni della riga di comando. Se l'OP è disposto a mostrare una tipica linea di comando e dire quali opzioni di agrepcui hanno effettivamente bisogno, probabilmente potrei creare qualcosa. Calcolare la distanza di Levenshtein di due stringhe è molto semplice, davvero. Suggerirei uno script shell avvolto attorno all'invocazione di GNU awk.
Animale nominale,

Risposte:


1

No. Questo tipo di personalizzazione non rientra nello scopo di uno strumento Linux e nello scopo di scrivere il tuo codice. L'uso di un linguaggio popolare di alto livello (Java, JavaScript, Python, Perl) utilizzerà un po 'più di memoria rispetto a C e sarà un po' più lento per i linguaggi con script ma probabilmente sarà trascurabile per il tuo caso d'uso. Quindi, chiedi nuovamente su StackOverflow con i dettagli esatti di cui hai bisogno e qualcuno potrebbe offrirti un unico liner.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.