メインコンテンツへスキップ

VillageSQL is a drop-in replacement for MySQL with extensions.

All examples on this page work on VillageSQL. Install Now →
このガイドには VillageSQL 0.0.4 以降が必要です。
同じもの(人名、会社、場所)を指す 2 つの文字列は、実際にはしばしば異なる見た目をしています。綴りの誤り、音訳、転記の誤り、および地域による差異はすべて、= と LIKE が見逃す違いを生みます。VillageSQL の vsql_fuzzystrmatch 拡張機能は 4 つのアプローチを提供します。Soundex(似た音のグループ化)、Levenshtein 編集距離(文字ごとのコスト)、Metaphone(発音に基づく符号化)、および Double Metaphone(複数の言語的起源によるあいまいな発音を扱う)です。

インストール

関数は修飾なしで機能します。所有する拡張機能の名前で修飾して vsql_fuzzystrmatch.soundex(...) として呼び出すこともできます。これは VEF の名前解決であり、実際のスキーマではありません。vsql_fuzzystrmatch は SHOW DATABASES には現れません。いずれかの引数が NULL のとき、すべての関数は NULL を返します。

Soundex

Soundex は、英単語をその音に基づいて 4 文字のコードに縮約します。同じコードを持つ単語は音声的に一致するとみなされます。
difference は、2 つの文字列が Soundex コードの文字をいくつ共有するかを 0~4 のスコアで返します。4 = 同一のコードです。
Soundex を使うのは、単純な似た音のグループ化が欲しく、データが主に英語の名前である場合です。高速で説明しやすいのですが、無関係な名前を混同することがあり、英語以外の音声は見逃します。

テーブル内の音声的一致を見つける

音声的に近い一致(必ずしも同一のコードではない)であるすべての名前を見つけるには:

Levenshtein 編集距離

Levenshtein は、ある文字列を別の文字列に変えるために必要な 1 文字の編集(挿入、削除、置換)の最小回数を数えます。
編集距離を使うのは、少数の入力ミスだけが異なる文字列を一致させたく、距離のしきい値を正確に制御したい場合です。

カスタムの操作コスト

levenshtein_cost を使うと、挿入、削除、および置換に異なる重みを付けられます。

早期終了のしきい値

levenshtein_less_equal は、距離がしきい値を超えた時点で計算を打ち切ります。フィルタリングにはこちらのほうが効率的です。実際の距離が max_d を超えると、完全な距離を計算する代わりに max_d + 1 を返します。
カスタムコストと組み合わせる場合:
両方の入力文字列は 255 文字以下でなければなりません。コストは負でない値でなければなりません。

編集距離による重複排除

Metaphone

Metaphone は Soundex より多くの英語の発音規則を適用し、可変長の出力を生成します。max_output_length パラメータが結果の長さを制限します。
Metaphone を使うのは、Soundex が誤検出を多く生むか、あまり一般的でない名前の一致を見逃す場合です。より多くの発音パターン(TH → 0、無音の文字など)を扱います。

Double Metaphone

Double Metaphone は、複数の言語的起源によるあいまいな発音を扱います。ドイツ語、スラブ語、スペイン語、ヘブライ語、およびその他の起源を持ち、異なる形で英語化された名前です。プライマリと代替の 2 つのコードを生成します。
代替が存在しない場合、dmetaphone_alt はプライマリのコードにフォールバックします。 Double Metaphone を使うのは、データに複数の言語的背景を持つ名前が含まれる場合、または人間なら同等とみなす一致を Metaphone が見逃す場合です。

両方のコードによる一致

アプローチの選択

関数リファレンス

既知の制限

関数のオーバーロードはありません。 VEF は関数を名前だけで登録します。同じ名前の 2 つの関数は共存できません。PostgreSQL がオーバーロード(2 引数と 5 引数の levenshtein)を使うところで、この拡張機能は別個の名前(levenshtein と levenshtein_cost)を使います。 文字列長の制限。 levenshtein の入力は 255 文字以下でなければなりません。

関連項目