Nel mio lavoro ho con grandi risultati utilizzati algoritmi approssimati corrispondenza stringa, come Damerau-Levenshtein distanza per fare il mio codice meno vulnerabili a errori di ortografia.espressioni regolari Fuzzy
ora ho bisogno di abbinare stringhe contro semplici espressioni regolari tali TV Schedule for \d\d (Jan|Feb|Mar|...)
. Ciò significa che la stringa TV Schedule for 10 Jan
deve restituire 0 mentre T Schedule for 10. Jan
dovrebbe restituire 2.
Ciò potrebbe essere fatto mediante la generazione di tutte le stringhe nella regex (in questo caso 100x12) e trovare la migliore corrispondenza, ma questo non cucitura pratico.
Avete qualche idea su come farlo in modo efficace?
Penso che i lexer siano più per la tokenizzazione che per la corrispondenza. Se inizio a dividere la mia stringa, non sarò in grado di riconoscere i personaggi spostati da un token all'altro. –
Potrebbe essere necessario definire il problema come problema di lexing/parsing, piuttosto che come semplice espressione regolare. Quindi potresti usare la distanza di Levenshtein sui singoli token. – Avi
Vedo. Ma il link lessico che hai inviato cuciture è abbastanza deterministico. E se invece di 'TV Schedule for 10 Jan' ottengo' TV Schedule for Jan 10'? Questo dovrebbe avere una distanza di 2, dal momento che sono stati trasposti due personaggi. Forse il lexer potrebbe identificare sottostringhe simili a numeri o mesi, ma poi "Programma TV per Jan 10" o "Programma TV per il 10 gennaio 2010" darebbe dei problemi .. –