すべてが一意の文字列である数千の名前を含む長いリストがありますが、類似した名前がある場合に 1 つだけが保持されるように、それらをフィルタリングして短いリストを作成したいと考えています。たとえば、元のリストには次のものが含まれる可能性があります。
ミッキーマウス
ミッキー・M・マウス
ミッキー・M・マウス
新しいリストには、そのうちの 1 つだけが含まれます。この時点でどれが重要であるかは問題ではありません。以下のコード ( aとbは比較対象のテキスト)を使用して類似性スコアを取得することができるため、適切な比率を選択すれば、包含/除外の決定を下すことができます。
difflib.SequenceMatcher(None, a, b).ratio()
私が苦労しているのは、最初のリストから2番目のリストを作成する方法です。些細なことだと思いますが、初心者の脳を困惑させます。
これに沿って何かがうまくいくと思っていたのですが、2番目のリストには何も入力されません。
for p in ppl1:
for pp in ppl2:
if difflib.SequenceMater(None, p, pp).ratio() <=0.9:
ppl2.append(p)
実際、それがリストに入力されたとしても、それはまだ間違っています. 最初のリストの名前を 2 番目のリストのすべての名前と比較し、スコアの最も高い比率を追跡し、最高の比率がカットオフ基準を下回った場合にのみ追加する必要があると思います。
どんなガイダンスもありがたく受け取った!