我正在寻找一种方法来使用正则表达式进行模糊匹配。 我想使用Perl,但如果有人可以推荐任何方式来做到这一点,将是有益的。模糊正则表达式
作为一个例子,我想匹配一个字符串上的单词“纽约”前面有一个2位数的数字。因为文本来自PDF的OCR,所以我想要做一个模糊匹配。我想匹配:
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 &小号MANOTAC/rURINGCOMPANY” 和“DELAY/ABE ”。 (我知道这看起来是疯狂的,但我是个乐观主义者。)一般情况下,该模式将是这个样子:
/Assignor(, by mesne assignments,)? to (company name), a corporation of (state)/i
其中,匹配是模糊的。
你有更多的例子吗?这种情况*可以使用String :: Approx - 只是将字符串拆分为数字部分和“纽约”部分。 – kennytm 2010-11-11 15:16:23
问题可能在于识别纽约部分需要模糊匹配... – 2010-11-11 15:18:32
非简化的实际案例涉及一个或多个固定字符串,如“纽约”吗?这个字符串有多长时间?您预期使用的允许距离范围是多少?你的例子只显示改变的字符;你是否需要处理额外/缺失的字符? – ysth 2010-11-11 15:28:53