Levenshtein 距離
以前も書いたものですが、再び登場します。
#! /usr/bin/gawk -f BEGIN { str1 = ARGV[1] ""; str2 = ARGV[2] ""; print levenshtein_distance(str1, str2); } ### 2 つの文字列のレーベンシュタイン距離を返す ### http://ja.wikipedia.org/wiki/%E3%83%AC%E3%83%BC%E3%83%99%E3%83%B3%E3%82%B7%E3%83%A5%E3%82%BF%E3%82%A4%E3%83%B3%E8%B7%9D%E9%9B%A2 function levenshtein_distance(s1, s2) { len_s1 = length(s1); len_s2 = length(s2); split(str1, a_str1, ""); split(str2, a_str2, ""); for (i = 0; i <= len_s1; i++) { distance[i, 0] = i; } for (j = 0; j <= len_s2; j++) { distance[0, j] = j; } for (i = 1; i <= len_s1; i++) { for (j = 1; j <= len_s2; j++) { if (a_str1[i] == a_str2[j]) { cost = 0; } else { cost = 1; } distance[i, j] = min3(distance[i - 1, j ] + 1,\ distance[i , j - 1] + 1,\ distance[i - 1, j - 1] + cost); } } return distance[len_s1, len_s2]; } ### 3 つの最小値を返す function min3(a, b, c, min) { min = a; if (b <= min) { min = b; } if (c <= min) { min = c; } return min; }
飼育しているヘルマンリクガメが口から血を流していたので、急遽、御茶ノ水のレプタイルクリニック に連れて行ったのですが、その際に嫁が「高田馬場」と「御茶ノ水」って似てるよねと言ったので思い出しました。
$ gawk -f levenshtein_distance.awk たかたのばば おちゃのみず 5
要するに文字距離が 5 なので、というか要するに「の」しか合っていません。orz
結局ヘルマンリクガメの太郎丸は・・・
ヘルマンリクガメの太郎丸 (後からメスと分かったのですが命名が先でした) 方はかなりひどい口内炎で、注射をしてもらい、しばらく薬で様子を見ることにしました。実は近所の超有名爬虫類病院 (テレビでも紹介されたことあるくらい有名です) に行かないのにはわけがあります。
違いは「愛」なのですが、約 6 年前に目から泡を吹いていて、最初に近所で診てもらったときに「もうこりゃダメだね。すぐ死ぬよ」と言われたのに対し、「レプタイルクリニック」では「大丈夫でしょう。ひととおり検査しておきますね」と言って、診察が終わった後にすーっと「かわいいねぇ」を連呼しているあたりに愛の差があるんだと思います。(実際に「レプタイルクリニック」が正しい診断をしているわけですが、人間で前者のような診察をされたら大問題になると思います)
これは仕事も同じで、「ダメ」でスタートしたらダメなのです。何も見ないで判断したらダメだと思います。
そんな中、来週末は法事で田舎に戻らなければならず不安です。