2013-07-03 42 views
0

我工作的一個交通研究,我有以下問題:Python的匹配車牌

我有一個包含時間戳和汽車的車牌號碼的位置,含有另一個CSV文件CSV文件一樣的東西。我試圖在兩個文件之間找到匹配的車牌,然後找出兩者之間的時間差。我知道如何匹配字符串,但有沒有一種方法可以找到接近的匹配,以檢測車牌號碼的用戶輸入錯誤?

本質上,數據如下所示:

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

而且我想找到兩個蹤跡之間的時間差,但說,如果數據輸入稍有不正確的,對於B車牌說' ASF456'它會捕捉到

+0

能任何人都可以幫我減去兩個字符串的時間戳?例如,我想要09:42:00 - 09:41:00返回00:01:00 – user2547977

+0

datetime模塊就是你要找的。 datetime.datetime對象支持減法並返回一個可以轉換爲秒的datetime.timedelta對象: from datetime import datetime; tdelta =日期時間。strptime(timestamp1,'%H:%M:%S') - datetime.strptime(timestamp2,'%H:%M:%S'); travel_time = tdelta.days * 60 * 60 * 24 - tdelta.seconds 然後根據需要做任何事情。 – thomas

回答

1

你應該檢查出difflib。你可以執行這樣的匹配:

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

你在問什麼是關於模糊搜索,從它聽起來像。您可以檢查被比較的兩個字符串是否具有1或更小的Levenshtein距離,而不是檢查字符串是否相等。 Levenshtein距離基本上是一種奇特的方式,說明從A字到B字需要多少次插入,刪除或更改。這應該是小錯別字。

希望這是你正在尋找。

0

就個人而言,對於部分匹配,我強烈建議使用nltk這是一個通用自然語言工具包,其中包含許多用於確定兩個字符串之間差異的有用算法。它包括編輯距離(levenshtein距離)以及其他許多功能以及實現自定義指標的功能。

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

但是,根據您正在尋找的內容,查找拼寫檢查可能更有意義。爲此,取決於你想要做什麼,我可能會建議PyEnchant假設你有一些牌照,你試圖與其他牌照匹配,你應該做一個字典,包括「真正的」許可證然後在你試圖匹配的那個上打電話enchant.suggest,這將按照相關性順序返回一些板塊。

http://pythonhosted.org/pyenchant/ 

如果你不使用外部庫(可以理解),而寧願只寫了一些普通的Python的大風扇,彼得·諾維格寫了一大篇的製作在20行拼寫檢查,將工作這個應用程序非常好。 (基本上它尋找的插入,刪除2層和翻譯)

http://norvig.com/spell-correct.html 
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'