پاسخ : مقایسه دو رشته فارسی چند کلمه ای با هم و دریافت درصد تشابه
کد PHP:
function similar_check ($str1, $str2) {
$str1_len = mb_strlen($str1, 'UTF-8');
$str2_len = mb_strlen($str2, 'UTF-8');
if ($str1_len > $str2_len) {
$big_str = $str1;
$small_str = $str2;
}
else {
$big_str = $str2;
$small_str = $str1;
}
$length = 0;
$big_arr = explode (" ", $big_str);
$small_arr = explode (" ", $small_str);
$big_count = count ($big_arr);
$small_count = count ($small_arr);
$same_found = 0;
foreach($small_arr as $word)
{
$word = trim($word);
foreach($big_arr as $word2)
{
$word2 = trim($word2);
if($word == $word2) $same_found++;
}
}
$length = $big_count + $small_count;
var_dump($length, $same_found);
$percent = ($same_found*100)/$length;
return $percent;
}
پاسخ : مقایسه دو رشته فارسی چند کلمه ای با هم و دریافت درصد تشابه
نقل قول:
نوشته اصلی توسط
naghmesra
درود
کد PHP:
function similar_check ($str1, $str2) {
$str1_len = mb_strlen($str1, 'UTF-8');
$str2_len = mb_strlen($str2, 'UTF-8');
if ($str1_len > $str2_len) {
$big_str = $str1;
$small_str = $str2;
}
else {
$big_str = $str2;
$small_str = $str1;
}
$big_arr = explode (" ", $big_str);
$small_arr = explode (" ", $small_str);
$big_count = count ($big_arr);
$small_count = count ($small_arr);
$same_found = 0;
foreach($small_arr as $word)
{
$word = trim($word);
foreach($big_arr as $word2)
{
$word2 = trim($word2);
if($word1 == $word2) $same_found++;
}
}
$percent = ($same_found/$big_count)*100;
}
کد بالا گاها درصد بالای 100 در 100 میده.
مثلا اگر عبارت اول رو بزنید "سلام درود سلام" و عبارت دوم رو بزنید "درود سلام درود" درصد میشه 133 درصد.
کاریش میشه کرد؟
تشکر
از تابعی که بنده پیشنهاد کردم استفاده کنیم خروجی دو کلمه "سلام درود سلام" و درود "سلام درود سلام" میشه : 65.384615384615
که میتونید با توابعی مثل round یا ceil و floor روندش کنید . اینم نمونه کد :
من سه بار این نمونه کدو به شما دادم ولی شما بازم دنبال کد های دست ساز و کم مصرف و غیر اصولی سایر دوستانید . دلیلش چیز خاصیه ؟
کد PHP:
<?php
$brothers=array();
$brothers[0]="سلام درود سلام";
$brothers[1]="درود سلام درود";
similar_text(mb_strtolower($brothers[0],"utf-8"),mb_strtolower($brothers[1],"utf-8"),$output);
echo $output;