0

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

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

本质上,数据如下所示:

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

我想找出两次目击事件之间的时间差,但如果输入的数据稍有不正确,并且 B 的车牌上写着“ASF456”,它就会发现

4

4 回答 4

1

您应该检查difflib。您可以像这样执行匹配:

>>> import difflib
>>> a='ASD456'
>>> b='ASF456'
>>> seq=difflib.SequenceMatcher(a=a.lower(), b=b.lower())
>>> seq.ratio()
0.83333333333333337
于 2013-07-03T19:15:06.397 回答
1

你要问的是关于模糊搜索,从它的声音来看。您可以检查被比较的两个字符串的 levenshtein 距离是否为 1 或更小,而不是检查字符串是否相等。Levenshtein 距离基本上是一种奇特的方式,表示从单词 A 到 B 需要多少次插入、删除或更改。这应该考虑到小的拼写错误。

希望这就是你要找的。

于 2013-07-03T19:16:40.043 回答
0

您可以在新的正则表达式模块中使用模糊匹配(即将在您附近的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'
于 2013-07-03T20:00:53.283 回答
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
于 2013-07-03T19:19:03.793 回答