2009年3月28日土曜日

PHPでJaro-Winkler

Levenshtein距離は割とシンプルで、日本語対応版も簡単にカスタム関数で作れた。
さらに精度の高いJaro-Winkler距離(以下J/W距離)というものがある。
J/W距離もPerlのサンプルなど素材はあるのでPHPに移植してみてもいいのだが、どうもテンションが上がらない。

Levenshtein距離に比べて、正解を検算するのがしづらい。
「2文字を同じ文字列にするために必要な転置の回数」
って、分かるけど、直感的には距離が出てこない。

Jaro-Winklerを採用できたとしても、まだまだ先は長い。
もともと、Levenshtein距離もJ/W距離も英語圏の発明で日本語はどうなんだろうか?

日本語は漢字というものがあり、一文字で英語の数文字分の意味を持っている漢字がほとんどだ。
日本語の二つの言葉の距離を測るには、さらに進化させた公式が必要なような気がする。
って、Googleやはてなはその辺も考慮してチューニングしているようだ。これは結構な時間と知恵が必要だ。そこまで踏み込む段階ではないのかと。

最後に、FUJIWARAの原西孝幸が編集距離を使ったギャグをときどきテレビで披露しているので参考までに引用してしめようか。

♪「チンコ」と「インコ」は一文字違い、「おしり」と「メガネ」は
…
…
…
三文字違い♪

0 件のコメント:

コメントを投稿