In meiner Arbeit habe ich mit guten Ergebnissen ungefähre String-Matching-Algorithmen wie Damerau-Levenshtein verwendet, um meinen Code weniger anfällig für Rechtschreibfehler zu machen.Fuzzy Reguläre Ausdrücke
Jetzt muss ich Zeichenfolgen mit einfachen regulären Ausdrücken wie TV Schedule for \d\d (Jan|Feb|Mar|...)
übereinstimmen. Dies bedeutet, dass die Zeichenfolge TV Schedule for 10 Jan
zurückgeben sollte 0, während T Schedule for 10. Jan
2.
zurückkehren soll dies durch die Generierung alle Strings in der Regex (in diesem Fall 100x12) und finden Sie die beste Übereinstimmung getan werden könnte, aber das praktisch keine Naht.
Haben Sie Ideen, wie Sie das effektiv machen können?
Ich denke, Lexer sind mehr zum Tokenizing als zum Matching. Wenn ich meine Zeichenfolge aufspalte, kann ich keine Zeichen erkennen, die von einem Token zu einem anderen verschoben wurden. –
Möglicherweise müssen Sie Ihr Problem als Lexing/Parsing-Problem und nicht als einfachen regulären Ausdruck definieren. Dann könntest du die Levenshtein-Distanz auf den einzelnen Wertmarken verwenden. – Avi
Ich verstehe. Aber der Lexer-Link, den Sie gesendet haben, ist ziemlich deterministisch. Was wäre, wenn statt "TV-Spielplan für 10 Jan" 'TV-Plan für Jan 10' eintreffen würde? Dieser sollte einen Abstand von 2 haben, da zwei Zeichen transponiert wurden. Vielleicht könnte der Lexer Teilstrings identifizieren, die wie Zahlen oder Monate aussehen, aber dann würde "TV-Plan für Jan 10" oder "TV-Plan für 10 Jan 2010" Probleme bereiten .. –