mb_levenshtein 二つの文字列のレーベンシュタイン距離を計算する(マルチバイト対応版)

More than 3 years have passed since last update.



この関数は文字数制約のある雑な実装になっています。制約のない実装は@mpywさんの
[マルチバイト対応] レーベンシュタイン距離を求めるをご覧ください。

levenshtein()のマルチバイト対応版

<?php

function mb_levenshtein($string1, $string2)
{
$tokens1 = preg_split('/(?<!^)(?!$)/u', $string1);
$tokens2 = preg_split('/(?<!^)(?!$)/u', $string2);
$tokens = array_unique(array_merge($tokens1, $tokens2));

if ( count($tokens) > 26 )
{
return false;
}

$ascii = 'a';

foreach ( $tokens as $token )
{
$string1 = str_replace($token, $ascii, $string1);
$string2 = str_replace($token, $ascii, $string2);
$ascii ++;
}

$arguments = func_get_args();
$arguments[0] = $string1;
$arguments[1] = $string2;

return call_user_func_array('levenshtein', $arguments);
}

var_dump(mb_levenshtein('あとうかい', 'かとうあい')); // int(2)