ホームページ > データベース > mysql チュートリアル > 重複する単語とレーベンシュタイン距離を使用して MySQL で文字列の類似性を測定する方法

重複する単語とレーベンシュタイン距離を使用して MySQL で文字列の類似性を測定する方法

Patricia Arquette
リリース: 2024-12-02 20:39:13
オリジナル
392 人が閲覧しました

How to Measure String Similarity in MySQL Using Overlapping Words and Levenshtein Distance?

MySQL で文字列の類似性を計算する方法

MySQL で 2 つの文字列間の類似性を計算するには、文字列操作関数と数式を利用できます。 。 2 つの文字列がある次の例を考えてみましょう。

SET @a = "Welcome to Stack Overflow";
SET @b = "Hello to stack overflow";
ログイン後にコピー

重複する単語を使用した類似度の計算

両方の文字列に出現する単語の数を数えて、次を使用します。それは類似性の尺度としてです。この場合、次の単語が重複します:

  • ようこそ
  • スタック
  • オーバーフロー

類似性の計算インデックス

類似性インデックスは次のように計算されます。

similarity = count(similar words between @a and @b) / (count(@a) + count(@b) - count(intersection))
ログイン後にコピー

レーベンシュタイン関数の使用

MySQL は、次の関数をネイティブにサポートしていません。文字列の類似性。ただし、levenshtein と呼ばれるユーザー定義関数 (UDF) を使用して、ある文字列を別の文字列に変換するために必要な編集 (挿入、削除、または置換) の数を測定するレーベンシュタイン距離を計算できます。

レーベンシュタイン UDF の作成

CREATE FUNCTION `levenshtein`(s1 text, s2 text) RETURNS int(11)
DETERMINISTIC
...
ログイン後にコピー

用レーベンシュタイン UDF の詳細については、提供されているコード スニペットを参照してください。

類似性比の計算

最後に、レーベンシュタイン距離を正規化することで類似性比を計算できます。 2 つの文字列の最大長に対して:

CREATE FUNCTION `levenshtein_ratio`(s1 text, s2 text) RETURNS int(11)
DETERMINISTIC
...
ログイン後にコピー

たとえば、レーベンシュタイン比関数を使用した @a と @b の類似性比は次のように計算できます。

SELECT levenshtein_ratio(@a, @b);
ログイン後にコピー

これにより、類似性比がパーセンテージ値として返されます。

以上が重複する単語とレーベンシュタイン距離を使用して MySQL で文字列の類似性を測定する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート