Я ищу способ выполнить нечеткое совпадение с использованием регулярных выражений. Я хотел бы использовать Perl, но если кто-то может порекомендовать любой способ сделать это, это будет полезно.
В качестве примера я хочу совместить строку над словами "Нью-Йорк", которой предшествует двузначный номер. Трудность возникает из-за того, что текст от OCR PDF, поэтому я хочу выполнить нечеткое совпадение. Я хотел бы соответствовать:
12 New York
24 Hew York
33 New Yobk
и других "близких" совпадений (в смысле расстояния Левенштейна), но не:
aa New York
11 Detroit
Очевидно, мне нужно будет указать допустимое расстояние ( "нечеткость" ) для матча.
Как я понимаю, я не могу использовать модуль String::Approx
Perl для этого, потому что мне нужно включить регулярное выражение в мое соответствие (чтобы соответствовать предыдущим цифрам).
Кроме того, я должен отметить, что это очень упрощенный пример того, что я действительно пытаюсь сопоставить, поэтому я не ищу подход грубой силы.
Отредактировано для добавления:
Хорошо, мой первый пример был слишком простым. Я не имел в виду, чтобы люди зацикливались на предыдущих цифрах - извините за плохой пример. Вот лучший пример. Рассмотрим эту строку:
ASSIGNOR, BY MESHS ASSIGN1IBNTS, TO ALUSCHALME&S MANOTAC/rURINGCOMPANY, A COBPOBATlOH OF DELAY/ABE.
Что это на самом деле говорит:
ASSIGNOR, BY MESNE ASSIGNMENTS, TO ALLIS-CHALMERS MANUFACTURING COMPANY, A CORPORATION OF DELAWARE
Что мне нужно сделать, так это извлечь фразу "ALUSCHALME & S MANOTAC/rURINGCOMPANY" и "DELAY/ABE". (Я понимаю, что это может показаться безумием, но я оптимист.) В общем, шаблон будет выглядеть примерно так:
/Assignor(, by mesne assignments,)? to (company name), a corporation of (state)/i
где совпадение нечеткое.