1. ホーム
  2. python

Python: 別の文字列に最も近い文字列を (リストから) 探す

2023-08-26 17:07:23

質問

例えば、私が string "Hello" とリスト

words = ['hello', 'Hallo', 'hi', 'house', 'key', 'screen', 'hallo','question', 'Hallo', 'format']

どうすれば n words に最も近い "Hello" に最も近く、リスト中に存在する words ?

この場合、次のようになります。 ['hello', 'hallo', 'Hallo', 'hi', 'format'...]

つまり、リスト単語を近い単語から遠い単語へと並べ替えるという戦略です。

このようなことを考えました。

word = 'Hello'
for i, item in enumerate(words):
    if lower(item) > lower(word):
      ...

を使用しますが、大きなリストでは非常に遅くなります。

アップデイト difflib は動作しますが、これも非常に遅いです。( words list には630000以上の単語が含まれています(ソートされており、1行に1つずつあります)。そのため、最も近い単語を検索するたびに、リストのチェックに5~7秒かかってしまいます。

どのように解決するのですか?

使用方法 difflib.get_close_matches .

>>> words = ['hello', 'Hallo', 'hi', 'house', 'key', 'screen', 'hallo', 'question', 'format']
>>> difflib.get_close_matches('Hello', words)
['hello', 'Hallo', 'hallo']

この関数はデフォルトで3つ以下の最も近いマッチを返しますので、ドキュメントをご覧ください。