Я ищу способ сделать нечеткое сопоставление с использованием регулярных выражений. Я бы хотел использовать Perl, но если кто-то может порекомендовать какой-либо способ сделать это, это было бы полезно.
В качестве примера я хочу сопоставить строку со словами «Нью-Йорк», которым предшествует 2 -цифровой номер. Трудность возникает из-за того, что текст взят из OCR PDF, поэтому я хочу сделать нечеткое соответствие. Я бы хотел сопоставить:
12 New York
24 Hew York
33 New Yobk
и другие "близкие" совпадает (в смысле расстояния Левенштейна), но не:
aa New York
11 Detroit
Очевидно, мне нужно будет указать допустимое расстояние ("нечеткость") для совпадения.
Насколько я понимаю, я не могу используйте Perl-модуль String :: Approx
для этого, потому что мне нужно включить регулярное выражение в мое совпадение (чтобы соответствовать предыдущим цифрам).
Также я должен отметить, что это очень упрощенный пример того, что я действительно пытаюсь сопоставить, так что я не ищу подхода грубой силы.
Отредактировано для добавления:
Хорошо, мой первый пример был слишком простым. Я не хотел, чтобы люди зацикливались на предыдущих цифрах - извините за плохой пример. Вот лучший пример. Рассмотрим эту строку:
ASSIGNOR, BY MESHS ASSIGN1IBNTS, TO ALUSCHALME & S MANOTAC / rURINGCOMPANY, COBPOBATIOH ЗАДЕРЖКИ / ABE.
На самом деле здесь говорится:
ПРЕИМУЩЕСТВЕННЫЙ ПРАВО НАЗНАЧЕНИЯ ДЛЯ АЛЛИС-ЧАЛМЕРС ПРОИЗВОДСТВЕННОЙ КОМПАНИИ, КОРПОРАЦИЯ ДЕЛАВЭРА
Что мне нужно сделать, так это извлечь фразу "ALUSCHALME & S MANOTAC / rURINGCOMPANY" и "ЗАДЕРЖКА" / ABE ". (Я понимаю, что это может показаться безумием. Но я оптимист.) В общем, шаблон будет выглядеть примерно так:
/ Assignor (, by mesne assignments,)? в (название компании), корпорацию (штат) / i
, где соответствие нечеткое.