leveinstein(leveinsteinまたはdifflib)のようなアルゴリズムを使用すると、おおよそのmatches.egを簡単に見つけることができます。長い文字列に存在するファジー/近似部分文字列をPythonでチェックしていますか?
>>> import difflib
>>> difflib.SequenceMatcher(None,"amazing","amaging").ratio()
0.8571428571428571
ファジーマッチは、必要に応じて閾値を決定することによって検出することができる。
現在の要件:より大きな文字列のしきい値に基づいてファジー部分文字列を検索する。
例えば、
large_string = "thelargemanhatanproject is a great project in themanhattincity"
query_string = "manhattan"
#result = "manhatan","manhattin" and their indexes in large_string
つブルートフォース溶液は、長さのすべてのサブストリングを生成することであるN-1 Nは、それらに一方と参照ずつQUERY_STRINGの長さ、及び使用levensteinであるN + 1(または他の一致長)に閾値。
より良い解決策は、Pythonで利用できます。好ましくは、Python 2.7に含まれるモジュール、または外部から利用可能なモジュールです。
UPDATE:それが原因の余分な操作には明白な結果であるファジーストリングの例のための作り付けのre
モジュール、より少し遅いものの、Pythonの正規表現モジュールは、かなりうまく動作します。 希望の出力が良好で、ぼやけの大きさに対する制御を簡単に定義できます。
>>> import regex
>>> input = "Monalisa was painted by Leonrdo da Vinchi"
>>> regex.search(r'\b(leonardo){e<3}\s+(da)\s+(vinci){e<2}\b',input,flags=regex.IGNORECASE)
<regex.Match object; span=(23, 41), match=' Leonrdo da Vinchi', fuzzy_counts=(0, 2, 1)>
'regex':
収量:このようにそれに近づいてしまいました与えられた例の場合、lutionは機能します。何の問題がありますか? – Veedrac