はじめに
「PC」と「ノートPC」の表層一致度は何%でしょうか?
40%?100%?
この記事では部分的な類似度(100%の方)を計算する方法を解説します。
difflibとは
difflibは様々な差を計算することができる便利ライブラリです。
今回は文字列間類似度を測るSequenceMatcher
を使います。
from difflib import SequenceMatcher
src, trg = 'PC' ,'ノートPC'
r = SequenceMatcher(None, src, trg).ratio()
しかし、この方法では文字列全体どうしの類似度を測るため、、部分一致している文字列間も類似度が小さくなってしまう仕様となっています。(r≒0.57)
部分的な類似度を計算する
早速コードをどうぞ。
from difflib import SequenceMatcher
src, trg = 'PC', 'ノートPC'
s_len, t_len = len(src), len(trg)
r = max([SequenceMatcher(None, src, trg[i:i+s_len]).ratio() for i in range(t_len-s_len+1)])
短い方の文字列を軸に、長い方の文字列から短い方の文字列長分取り出して比較、その後最大値を出力します。今回は文句無しで r=1.0 です。