文字列の類似度

2019年7月21日

はじめに

文字列の類似度を出したい場合は、Python モジュールの difflib を用いる。

文字列の類似度

文字列の類似度は difflib の SequenceMatcher で求めることができる。

>>>from difflib import SequenceMatcher
>>>s = SequenceMatcher(None, "猫", "犬")
>>>print(s.ratio())
0.0
>>>s = SequenceMatcher(None, "猫", "子猫")
>>>print(s.ratio())
0.6666666666666666

ratio() の値が 1 に近いほど類似度が高い。全く別物であると 0 である。公式ドキュメントでは、0.6 以上だと似ていると言えるとされているが、おそらくそれは文章同士の話なので、単語同士だともう少し大きく見た方がよいかもしれない。

>>>s = SequenceMatcher(None, "ヨークシャーテリア", "ブルガリアヨーグルト")
>>>print(s.ratio())
0.21052631578947367
>>>s = SequenceMatcher(None, "ヨークシャーテリア", "シャンデリア")
>>>print(s.ratio())
0.5333333333333333
>>>s = SequenceMatcher(None, "ヨークシャーテリア", "ヨークシャープディング")
>>>print(s.ratio())
0.6
>>>s = SequenceMatcher(None, "スコティッシュ", "スコッティティッシュ")
>>>print(s.ratio())
0.8235294117647058
>>>s = SequenceMatcher(None, "スコティッシュフォールド", "スコッティティッシュ")
>>>print(s.ratio())
0.6363636363636364
>>>s = SequenceMatcher(None, "メインクーン", "メイクイーン")
>>>print(s.ratio())
0.8333333333333334

参考