#fzmatch set fz() "";#bigramを格納する配列 #---------------------------------------------------------------- # bigrams # 引数 str の bigram を大域変数の配列 fz に格納する #---------------------------------------------------------------- proc bigrams {str} { global fz array unset fz set l [expr {[string length $str]-1}] set i 0 for {set x 0} {$x<$l} {incr x} { set block [string range $str $x [expr {$x+1}]] if {![info exists fz($block)]} { set fz($block) 1 } incr i } #文字列比較で使用する配列の要素数を返す return [expr $i+1] } #---------------------------------------------------------------- # fuzzy_match # 引数 str と大域変数の配列 fz に格納されているbigramの比較を行う # 引数lenはfzの長さ、返り値は両者の近似度 #---------------------------------------------------------------- proc fuzzy_match {str len} { global fz set l [expr {[string length $str]-1}] set i 0 for {set x 0} {$x<$l} {incr x} { set chunk [string range $str $x [expr {$x+1}]] if {[info exists fz($chunk)]} { incr i } } set similarity [expr (100*$i)/$len] return $similarity }