-->

2009-12-07

phpのlevenshtein関数のマルチバイト化

この記事はphpのlevenshtein関数のマルチバイト化の例です。
(phpのlevenshtein関数は2バイトの文字を1バイトの文字2つとして扱います)

例えば、UTF8の「あいうお」と「あいうお」の距離を3から1に変更する関数です。
渡す文字コードと内部の設定が違うと使えません。
なお、かなり遅く5~50倍かかります。
さらに、長い文字を扱うために、例えば、define("__MB_LEVENSHTEIN__LEVENSHTEIN_MAX_LENGTH", 65535);などを設定してから長い文字で実行すると、さらに遅くなります。

https://docs.google.com/open?id=0BwK7sPpG0c5ZNWNjMzE5OWQtNWZmZC00ZTdlLTgzOTgtMWIwNTNlYmU4NDBi

テスト方法はダウンロードしたファイルと同じディレクトリでコマンドを実行します。
$ php test.mb_levenshtein.php

2011-11-30: JISの場合の不具合を修正。

2 件のコメント:

匿名 さんのコメント...

mb_levenshtein.2010-04-01.tar.gz
ってダウンロード出来ないんですか?
リンク先で先に進めなかったのですが

insn さんのコメント...

ファイルを設置しているサービスのサーバー障害かもしれませんので後日お試し下さい。
もしくはセキュリティソフトやプロキシでhttpからhttpsなどへのLocationヘッダーがブロックされていませんか?
もしくはhttp://www.google.co.jp/search?num=100&hl=ja&gbv=2&biw=1272&bih=746&q=mb_levenshtein.2010-04-01.tar.gz&oq=mb_levenshtein.2010-04-01.tar.gz&aq=f&aqi=&aql=&gs_sm=e&gs_upl=492903l492903l0l493684l1l1l0l0l0l0l204l204l2-1l1l0でどうでしょう?