سلام و درود
دو تا رشته داریم که شما فرض کنید عنوان دو مطلب خبری هست.
من یه تابعی میخوام که بتونه این دو رشته فارسی رو کلمه به کلمه با هم مقایسه کنه و درصد تشابه بده.
لطفا راهنمایی کنید.
تشکر
سلام و درود
دو تا رشته داریم که شما فرض کنید عنوان دو مطلب خبری هست.
من یه تابعی میخوام که بتونه این دو رشته فارسی رو کلمه به کلمه با هم مقایسه کنه و درصد تشابه بده.
لطفا راهنمایی کنید.
تشکر
بچه ها هیچ کدی به نظرتون نمیاد که باهاش بتونم درصد بگیرم از تشابه دو عبارت فارسی؟
رشته بزرگتر رو با استفاده از strlen پیدا کن
با explode هر رشته رو به آرایه ای از کلمه در بیار
با حلقه for یا while کلمه های رشته کوچکتر رو در بزرگتر جستجو کن و برابری رو پیدا کن
درصد رو بر حسب تعداد برابری در تعداد کلمات رشته دوم بدست بیار.
جشنواره وب ایران یا جشنواره معرفی دوستان!!!
درود
راستش طبق چیزهایی که گفتید من یه کدی نوشتم.
https://pastebin.com/hv5bztvx
ولی توی while اش موندم.
میشه یه راهنمایی بکنید؟
ویرایش توسط naghmesra : March 31st, 2017 در ساعت 02:28
امتحانش نکردم همینجوری نوشتم.کد 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;
}
جشنواره وب ایران یا جشنواره معرفی دوستان!!!
ساده ترین و بهترین راه تابعیه که از پیش رزرو شده و توسط خود php تهیه شده : similar_text
نمونه :
پارامتر اول کلمه یا جمله اول . پارامتر دوم کلمه یا جمله دوم . پارامتر سوم درصد تشابه جمله که در کش ذخیره میشه و میتونید هر جا و هر زمان صداش بزنیدکد PHP:
$brothers=array();
$brothers[0]="amirali esteki";
$brothers[1]="amirabas esteki";
similar_text($brothers[0],$brothers[1],$output);
echo $output;
با تشکر
ویرایش توسط phpcoding : March 31st, 2017 در ساعت 04:01
انجام پروژه های:php-c#-c++-java-basic-css-html-javascript-python
مشاوره با مسئول پروژه ها-حامد دعایی:+989901567129
تماس با برنامه نویس-امیرعلی استکی:+989017735378
سلام و درود
بله تابع ارسالی توسط MJmoonwalk البته با نکات omid1991 کار کرد.
فقط نفهمیدم دلیل استفاده از تابع trim چی هست؟
به نظر شما از تابع similar_text استفاده کنم یا تابع ارسالی توسط دوستان؟ساده ترین و بهترین راه تابعیه که از پیش رزرو شده و توسط خود php تهیه شده : similar_text
توجه کنید ما دو عبارت فارسی داریم.
تشکر
دلیل استفاده از trim به احتمال زیاد این بوده که کاراکتر های اضافی حذف بشن
و اما در مورد سوالتون خطاب به من :
مسلما چیزی که خود php طراحی کرده باشه تا تابع دست نویس دوستان زمین تا آسمون فرقشه . به قول داداش دوقلوی من فرقش مث پیکانو پیکان وانته
تابع دست نویس دوستان هم خوبه به نظرم . من طرز کد نویسیشون رو یه بررسی جزئی کردم . اگر کد رو واقعا خودشون نوشتن باشن کارشون خوبه کدشون هم خوبه مشکلی نداره
ولی در این مورد : خود من به شخصه به عنوان یه برنامه نویس تا زمانی که تابع similar_text هست و میشه ازش استفاده کرد هیچ موقع اقدام به نوشتن توابع دست نویس نمیکنم
برای عبارت فارسی هم بسیار کار راحتیه . اصلا مشکلی نیست که . کلمات خود را از تابع mb_strtolower رد کنید و پارامتر دومش رو هم utf-8 قرار بدید . اینم نمونه کد نوشته شده توسط خودم + توضیحاتی که دادم :
کد PHP:
$brothers=array();
$brothers[0]="amirali esteki";
$brothers[1]="amirabas esteki";
similar_text(mb_strtolower($brothers[0],"utf-8"),mb_strtolower($brothers[1],"utf-8"),$output);
echo $output;
ویرایش توسط phpcoding : March 31st, 2017 در ساعت 14:42
انجام پروژه های:php-c#-c++-java-basic-css-html-javascript-python
مشاوره با مسئول پروژه ها-حامد دعایی:+989901567129
تماس با برنامه نویس-امیرعلی استکی:+989017735378
درود
کد بالا گاها درصد بالای 100 در 100 میده.کد 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;
}
مثلا اگر عبارت اول رو بزنید "سلام درود سلام" و عبارت دوم رو بزنید "درود سلام درود" درصد میشه 133 درصد.
کاریش میشه کرد؟
تشکر
در حال حاضر 1 کاربر در حال مشاهده این موضوع است. (0 کاربران و 1 مهمان ها)