0

私はトラフィック調査に取り組んでおり、次の問題があります。

場所の車のタイムスタンプとナンバー プレート番号を含む CSV ファイルと、同じものを含む別の CSV ファイルがあります。2 つのファイル間で一致するナンバー プレートを探し、2 つのファイル間の時差を見つけようとしています。文字列を一致させる方法は知っていますが、ナンバープレート番号のユーザー入力エラーを検出するために、近い一致を見つける方法はありますか?

基本的に、データは次のようになります。

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

そして、2 つの目撃情報の時間差を見つけたいのですが、データがわずかに間違って入力されていて、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 に答える
0

個人的には、部分一致についてはnltk、2 つの文字列の違いを判断するための多数の有用なアルゴリズムを含む汎用の自然言語ツールキットを使用することを強くお勧めします。これには、編集距離 (レーベンシュタイン距離) や他の多くの機能、およびカスタム メトリックを実装する機能が含まれます。

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 に答える
0

新しい regex モジュールでファジー マッチングを使用できます (近くの新しい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 に答える