在我的工作中,我得到了很好的结果,使用了近似字符串匹配算法,如Damerau-Levenshtein距离,使我的代码不易受到拼写错误的影响.
现在我需要将字符串与简单的正则表达式匹配TV Schedule for \d\d (Jan|Feb|Mar|...).这意味着字符串TV Schedule for 10 Jan应返回0,同时T Schedule for 10. Jan应返回2.
这可以通过在正则表达式中生成所有字符串(在这种情况下为100x12)并找到最佳匹配来完成,但这并不实用.
您有任何想法如何有效地做到这一点?
我试图在python中使用TRE -library来匹配拼写错误的输入.
重要的是,它确实能很好地处理utf-8编码的字符串.
一个例子:
德国首都的名字是柏林,但是从发音来看它是一样的,如果人们会写"Bärlin"
它到目前为止工作,但如果非ASCII字符位于检测到的字符串的第一个或第二个位置,则范围和检测到的字符串本身都不正确.
# -*- coding: utf-8 -*-
import tre
def apro_match(word, list):
fz = tre.Fuzzyness(maxerr=3)
pt = tre.compile(word)
for i in l:
m = pt.search(i,fz)
if m:
print m.groups()[0],' ', m[0]
if __name__ == '__main__':
string1 = u'Berlín'.encode('utf-8')
string2 = u'Bärlin'.encode('utf-8')
string3 = u'B\xe4rlin'.encode('utf-8')
string4 = u'Berlän'.encode('utf-8')
string5 = u'London, Paris, Bärlin'.encode('utf-8')
string6 = u'äerlin'.encode('utf-8')
string7 = u'Beälin'.encode('utf-8')
l = ['Moskau', string1, string2, string3, string4, string5, string6, string7]
print '\n'*2
print "apro_match('Berlin', l)"
print "="*20 …Run Code Online (Sandbox Code Playgroud) 在最近的一个项目中,我真的需要lib tre匹配库.
然而,该项目是在PHP,并没有该库的PHP绑定.
我试图谷歌如何为c库创建一个接口,但我找到的只是dl加载只有php扩展的接口的功能.
我错过了什么?