like_text 類似度を計算する際の正規化に関する質問
2 つの文字列の長さを計算していたとき、この関数が正規化するときに異なるアプローチをとっているように見えることがわかりました。
初めて、長さの異なる 2 つの文字列を試し、編集距離を計算しました。
echo "levenshtein Calculation: n";echo levenshtein("seller_id","selr_id");echo "n ";
結果は次のようになります: 2
次に、同じ 2 つの文字列を使用し、PHP の類似テキスト関数を使用して類似性を見つけます。
echo "similar_text Calculation: n";similar_text(" seller_id","selr_id",$パーセント);
echo $percent;
類似度が 87.5 の場合に表示されます。
2 の距離を正規化すると、次の式に正確に適合します: 1-( 距離の編集/(長さの合計2 つの文字列のうち))
2 回目は、同じ長さの 2 つの文字列を試し、それぞれの編集距離と類似度を計算しました
similar_text ("abcd","1234",$percent) );echo $percent;echo "n";
echo levenshtein("abcd","1234");
取得された値は次のとおりです: 4 と 0
式に正確に適合します: 1-(編集距離/(任意の文字列の長さ))
私の質問は、分母が 2 つの文字列の長さの合計である場合、長さの異なる 2 つの文字列が似ているのはなぜですか?
オンラインでいくつかの PDF ドキュメントを見つけたところ、編集距離を正規化する場合、分母は最長の文字列の長さになることがわかりました。
-----解決策のアイデア----------------------
言われているように、similar_text 関数の設計者は非常に思慮深いです
渡された 2 つの文字列が同じ長さの場合、計算された類似度は理論と変わりません
渡された 2 つの文字列の長さが異なる場合、結果として生じる類似度は、理論的な類似度ほど急峻ではありません。つまり、一致する確率が高くなります
もちろん、これを望まない場合は、文字列を自分で計算することもでき、一致した数も返します。計算するのは難しくありません