$str=”超あいまいに検索したいけどなかなか完全一致でない場合の文字列の一致度って計算しにくいんですよねー”;
$q=”あいまい検索したいにんけどなんかパーフェクトに一致しない場合の文字列の一致度は計算しにくいねん”;
こんな文字列が何%くらい一致しているか調べます。
もっと改善できそうですが・・・
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
$str="超あいまいに検索したいけどなかなか完全一致でない場合の文字列の一致度って計算しにくいんですよねー"; $q="あいまい検索したいにんけどなんかパーフェクトに一致しない場合の文字列の一致度は計算しにくいねん"; function c_rate($str,$q){ $ar_qs = preg_split("//u", $q, -1, PREG_SPLIT_NO_EMPTY); $pre_match=0; $match_cnt=0; foreach($ar_qs as $ar_q){ $match_len = strpos($str,$ar_q); $match_cnt += 1; if($match_len !== false){ $match_len += 1; $c_rate += (strlen($ar_q)+$pre_match)/strlen($str) * min($pre_match/abs($match_len-$match_cnt),1); $pre_match += 1; }elseif($pre_match > 0){ $pre_match -= 1; } } return $c_rate; } //end function c_rate $c_rate=c_rate($str,$q); echo $c_rate; //結果 3.232503970465 |
コメント