grapheme_levenshtein

(PHP 8 >= 8.5.0)

grapheme_levenshtein — 二つの文字列のレーベンシュタイン距離を書記素単位で計算する

説明

手続き型

function grapheme_levenshtein(
    string $string1,
    string $string2,
    int $insertion_cost = 1,
    int $replacement_cost = 1,
    int $deletion_cost = 1,
    string $locale = ""
): int|false

レーベンシュタイン距離は、string1 を string2 に変換するために置換、挿入、削除 しなければならない書記素クラスターの最小数として定義されます。 アルゴリズムの計算量は O(m*n) です。 ここで、n および m はそれぞれ string1 および string2 の書記素単位での長さです。

バイト単位で動作する levenshtein() とは異なり、 この関数は Unicode の書記素クラスターを数えます。 そのため、同じ文字の合成形式と分解形式 (たとえば U+00E9 と U+0065 U+0301 は、どちらも é を表します) は等価なものとして扱われ、距離はゼロになります。

insertion_cost、replacement_cost かつ/または deletion_cost が 1 以外の場合、 アルゴリズムは最もコストの小さい変換を選ぶように動作します。 たとえば、$insertion_cost + $deletion_cost < $replacement_cost の場合、 置換をせず、挿入と削除が行われます。

パラメータ

string1

レーベンシュタイン距離を計算する文字列のひとつ。 有効な UTF-8 でなければなりません。

string2

レーベンシュタイン距離を計算する文字列のひとつ。 有効な UTF-8 でなければなりません。

insertion_cost

挿入のコストを指定します。0 より大きくなければなりません。

replacement_cost

置換のコストを指定します。0 より大きくなければなりません。

deletion_cost

削除のコストを指定します。0 より大きくなければなりません。

locale

使用するロケール。

戻り値

二つの文字列のレーベンシュタイン距離を書記素単位で返します。 失敗した場合は false を返します。 失敗の詳細を取得するには intl_get_error_message() を使用します。

エラー / 例外

insertion_cost、replacement_cost、 deletion_cost のいずれかが 0 以下の場合、 ValueError をスローします。

入力文字列のいずれかが有効な UTF-8 でない場合、 locale が正しいロケール識別子でない場合、 あるいは ICU の内部エラーが発生した場合は、 false を返し、intl のエラーを設定します。

変更履歴

バージョン 説明
8.5.0 この関数が追加されました。

例

例1 grapheme_levenshtein() の例

<?php

// 合成形式 (NFC): U+00E9 LATIN SMALL LETTER E WITH ACUTE
$e_composed = "\u{00E9}";

// 分解形式 (NFD): U+0065 + U+0301 (e + 結合文字のアキュートアクセント)
$e_decomposed = "\u{0065}\u{0301}";

// grapheme_levenshtein はこれらを同じ書記素クラスターとして扱います
var_dump(grapheme_levenshtein($e_composed, $e_decomposed));

// levenshtein() はバイト単位で動作するため、これらを異なるものとみなします
var_dump(levenshtein($e_composed, $e_decomposed));

?>

上の例の出力は以下となります。

int(0)
int(3)

参考

+add a note

User Contributed Notes

There are no user contributed notes for this page.