Python匹配许可证板

时间:2013-07-03 19:09:24

标签: python comparison

我正在进行交通研究,我遇到以下问题:

我有一个CSV文件,其中包含某个位置的汽车的时间戳和车牌号以及包含相同内容的另一个CSV文件。我试图在两个文件之间找到匹配的牌照,然后找到两者之间的时差。我知道如何匹配字符串,但有没有办法找到匹配的匹配可能是为了检测车牌号码的用户输入错误?

基本上,数据如下所示:

A = [['09:02:56','ASD456'],...] B = [...,['09:03:45','ASD456'],...]

我想找到两次目击之间的时差,但是说如果输入的数据稍微不正确,B的牌照说“ASF456'它会抓住那个

4 个答案:

答案 0 :(得分:1)

你应该看看difflib。您可以执行以下匹配:

>>> import difflib
>>> a='ASD456'
>>> b='ASF456'
>>> seq=difflib.SequenceMatcher(a=a.lower(), b=b.lower())
>>> seq.ratio()
0.83333333333333337

答案 1 :(得分:1)

你所问的是关于模糊搜索,听起来是什么。您可以检查被比较的两个字符串是否具有1或更小的levenshtein距离,而不是检查字符串相等性。 Levenshtein距离基本上是一种奇特的方式,说明从单词A到B需要多少次插入,删除或更改。这应该是小错字号的原因。

希望这就是你要找的东西。

答案 2 :(得分:0)

就个人而言,对于部分匹配,我强烈建议使用nltk它是一个通用的自然语言工具包,其中包含许多用于确定两个字符串之间差异的有用算法。它包括编辑距离(levenshtein距离)以及许多其他距离以及实现自定义指标的能力。

http://nltk.googlecode.com/svn/trunk/doc/api/nltk.metrics.distance-module.html

但是,根据您正在寻找的确切内容,寻找拼写检查可能更有意义。为此,根据您的具体要求,我可能会建议PyEnchant假设您有许多牌照,而您试图与其他牌照相匹配,那么您应该制作一个由“真实”牌照,然后在你想要匹配的牌照上调用enchant.suggest,这将按照相关性的顺序返回多个牌照。

http://pythonhosted.org/pyenchant/

如果你不是使用外部库的忠实粉丝(可以理解)而宁愿只写一些普通的python,Peter Norvig写了一篇很棒的文章,用20行编写一个拼写检查器,这对于应用。 (基本上它寻找2层插入,删除和翻译)

http://norvig.com/spell-correct.html

答案 3 :(得分:0)

您可以在new regex module中使用模糊匹配(很快就会在您附近的new Python发行版中!)

>>> a='ASD456'
>>> b='ASF456'
>>> c='AXF456'
>>> regex.fullmatch('(?:{}){{s<=1}}'.format(a),b).group(0)
'ASF456'
>>> regex.fullmatch('(?:{}){{s<=2}}'.format(a),c).group(0)   # Note 2 substitutions allowed
'AXF456'