我正在寻找一种使用正则表达式进行模糊匹配的方法。我想使用 Perl,但如果有人可以推荐任何方法来做这将是有帮助的。
例如,我想匹配单词“New York”上的一个字符串,前面有一个 2 位数字。困难在于文本来自PDF的OCR,所以我想做一个模糊匹配。我想匹配:
12 New York
24 Hew York
33 New Yobk
和其他“近距离”匹配(在 Levenshtein 距离的意义上),但不是:
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
其中匹配是模糊的。