レーベンシュタイン距離を使用した文字列の類似度を調べるモジュール。類似度が高いと0に近くなります。
詳しい説明とかは 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
レーベンシュタイン距離を使用した文字列の類似度を調べるモジュール。類似度が高いと0に近くなります。
詳しい説明とかは 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
// Wikipediaに記載の擬似コードから変換しています // 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 #module #defcfunc min3 int p1, int p2, int p3 if p1 > p2{ if p2 > p3{ res = p3 }else{ res = p2 } }else{ if p1 > p3{ res = p3 }else{ res = p1 } } return res return #defcfunc LevenshteinDistance str _s1, str _s2 s1 = _s1 : s2 = _s2 dim d, strlen(s1)+1, strlen(s2)+1 i1 = 0 : i2 = 0 : cost = 0 repeat strlen(s1) i1 = cnt d(i1, 0) = i1 loop repeat strlen(s2) i2 = cnt d(0, i2) = i2 loop repeat strlen(s1), 1 i1 = cnt repeat strlen(s2), 1 i2 = cnt if peek(s1, i1) == peek(s2, i2) : cost = 0 : else : cost =1 d(i1, i2) = min3( d(i1-1, i2) + 1, d(i1, i2-1) + 1, d(i1-1, i2-1) + cost) loop loop return d(strlen(s1), strlen(s2)) #global mes LevenshteinDistance("HotSoupProcessor","HotSoupProcessor") mes LevenshteinDistance("HotSoupProcessor","ColdSoupProcessor") mes LevenshteinDistance("熱いスープ","冷たいスープ") mes LevenshteinDistance("オニオン","たまねぎ")