CONTENT
こんにちは、エンジニアのS.Wです。
ユーザー入力の文字列や外部からの入力データなどを扱っていると「ゆらぎ」という問題に悩まされることはよくあります。
Pythonではdifflibという標準ライブラリを使って、文字列の類似度を調べることができます。
◆サンプル
difflibで二つの文字列の類似度を調べるには以下のようにします。
・コード
str1 = 'Test01'
str2 = 'Test02'
retio = difflib.SequenceMatcher(None, str1, str2).ratio()
print(f'{str1}と{str2}の類似度:{retio}')
・実行結果
Test01とTest02の類似度:0.8333333333333334
類似度は0.0以上1.0以下の一致率で表されるので、この場合は83%の一致率ということになります。
◆テキスト内から検索する
このdifflibを使って、テキスト内から、一定の一致率を満たす文字列が存在するかを判定するメソッドを作ってみました。
・コード
・実行結果
search_strメソッドでは、search変数の文字列分をtextから切り取り、一致率を求めて判定しています。textは弊社住所になりますが、正しくはアイランドタワーのところをアイランドビルで検索した場合、MAXで71%の一致率で検索できました。
一定の割合を超えたところでTrueを返せば、判定メソッドとして使えるかもしれません。