mit direktional voreingenommenen Strafen einverstanden sein

16

Ich verwende tre-agrep (manpage) , eine Implementierung von agrep (manpage) , um einen ungefähren Mustervergleich durchzuführen. Dieses Dienstprogramm sucht nach Übereinstimmungen basierend auf der Entfernung von Levenshtein und der Benutzer kann die Strafe konfigurieren, die für das Ersetzen, Einfügen oder Löschen von Änderungen angewendet wird.

Ich möchte jedoch Wägungen differenziell über die Länge der Abfrage anwenden, und zwar mit einer geringeren Gewichtung für Löschungen am Anfang (linkes Ende) der Abfrage als am rechten. Die manSeite für dieses Dienstprogramm gibt nicht an, dass eine solche Kontrollebene möglich ist.

Gibt es andere Kommandozeilen-Tools, bei denen eine ungefähre Übereinstimmung mit einer genaueren Kontrolle über die Fehlpaarungsstrafen möglich ist?

user001
quelle
5
AFAIK, einverstanden ist der einzige. Ich bin überrascht, dass Sie das überhaupt wissen, da es in der UNIX-Welt relativ dunkel ist (was zu schade ist). Theoretisch können Sie diese Gewichte im Quellcode anpassen, aber ob das praktisch ist oder nicht, weiß ich nicht. Haben Sie versucht, die Autoren der Tools oder sogar die Originalarbeiten, auf denen sie basieren, zu kontaktieren?
Wohlgemerkt
3
@ Theus Alte Fürze können immer noch Code schreiben ;-)
Kusalananda
Es wäre nicht schwierig, ein Levenshtein-Matching-Dienstprogramm mit Einfüge- / Lösch- / Ersetzungskosten zu schreiben, die als Ausdrücke in Python oder Awk definiert sind. Der mühsame Teil sind wirklich alle möglichen Befehlszeilenoptionen. Wenn das OP bereit ist, eine typische Befehlszeile anzuzeigen und zu sagen, welche Optionen agreptatsächlich benötigt werden, könnte ich wahrscheinlich etwas ausdenken. Die Berechnung der Levenshtein-Distanz zweier Saiten ist wirklich sehr einfach. Ich würde ein Shell-Skript vorschlagen, das sich um den Aufruf von GNU awk dreht.
Nominale Tier

Antworten:

1

Nein. Diese Art der Anpassung fällt nicht in den Geltungsbereich eines Linux-Tools und fällt in den Geltungsbereich des Schreibens Ihres eigenen Codes. Die Verwendung einer gängigen Hochsprache (Java, JavaScript, Python, Perl) benötigt etwas mehr Speicher als C und ist für Skriptsprachen etwas langsamer, dies ist jedoch für Ihren Anwendungsfall wahrscheinlich vernachlässigbar. Fragen Sie also beim Stackoverflow erneut nach den genauen Details, die Sie benötigen, und jemand könnte Ihnen einen Einzeiler anbieten.

user1133275
quelle