(PHP 8 >= 8.5.0)
grapheme_levenshtein — 二つの文字列のレーベンシュタイン距離を書記素単位で計算する
手続き型
$string1,$string2,$insertion_cost = 1,$replacement_cost = 1,$deletion_cost = 1,$locale = ""
レーベンシュタイン距離は、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)