0
0

【Python】difflibモジュールのSequenceMatcherを使って類似度計算を行う

Posted at

概要

difflibモジュールのSequenceMatcherクラスというツールを使って、類似度計算を行いました。
このクラスは、テキスト処理に関連する多くの処理を行うことができます。

サンプルコード

以下のサンプルコードは、2つの文字列の類似度を計算し、特定の比率を超える場合に "重複発見!"というメッセージを表示するものです。

from difflib import SequenceMatcher

phrase1 = "あいうえおかきくけこ"
phrase2 = "あいうえお"

def similar(a, b):
    match_ratio = SequenceMatcher(None, a, b).ratio()
    print(match_ratio)
    return match_ratio

def check_for_duplicate(ratio):
    if similar(phrase1, phrase2) > ratio:
        print("重複発見!")

ratio = 0.6
check_for_duplicate(ratio)

## 出力結果 ##
# 0.6666666666666666
# 重複発見!

最初ちょっと「?」となったことがあります。
上記のひらがなのように10文字中5文字が同じであれば、同じ文字は50%なので、ratio0.6の場合は重複発見!が表示されないのかなと思いました。しかし、実際の公式は以下の公式ドキュメントに記載してあります。

6.3. difflib --- 差分の計算を助ける — Python 3.5.10 ドキュメント

T が2つのシーケンスの要素数の総計だと仮定し、M をマッチした数とすると、この値は 2.0*M / T であらわされます。もしシーケンスがまったく同じ場合、値は 1.0 となり、まったく異なる場合には 0.0 となります。

上記の例で言うと、Mは5であり、Tは15になります。つまり、以下の計算が行われていたのです。

2 * 5 / 15 = 0.6666666666666666...

言われてみればそれはそうか、と思いました...。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0