الدالة similar_text()‎ في PHP

من موسوعة حسوب
< PHP
مراجعة 11:50، 9 أبريل 2018 بواسطة عبد اللطيف ايمش (نقاش | مساهمات) (إضافة عنوان الصفحة والتصنيفات)

(PHP 4, PHP 5, PHP 7)

تحسب الدالة similar_text()‎ عدد الأحرف المتشابهة في سلسلتين نصيتين.

الوصف

int similar_text ( string $first , string $second [, float &$percent ] )

تحسب الدالة similar_text()‎ نسبة التشابه بين سلسلتين كما هو مذكور في كتاب Programming Classics: Implementing the World's Best Algorithms by Oliver‏ (ISBN 0-131-00413-1). لاحظ أن هذا التنفيذ لا يَستخدِم مكدسًا (stack) كما في الشفرة التي ذكرها المؤلف في كتابه، ولكن تجري استدعاءات تكرارية (recursive calls) مما قد يساهم أو قد لا يساهم في تسريع العملية بأكملها. لاحظ أيضًا أن تعقيد هذه الخوارزمية هو O(N**3)‎ حيث N هو طول أطول سلسلة نصية.

المعاملات

first

السلسلة النصية الأولى.

second

السلسلة النصية الثانية.

ملاحظة: قد يؤدي تبديل السلسلة الأولى بالثانية أو العكس إلى تغيرٍ في النتيجة (نسبة التشابه). انظر المثال أدناه.

percent

بتمرير مرجع (reference) كوسيط ثالث، فستحسب الدالة similar_text()‎ التشابه في النسبة المئوية بقسمة النتيجة على متوسط أطوال السلسلتين المعطيَين مضروبًا (أي المتوسط) بالعدد 100.

القيم المعادة

تعيد الدالة similar_text()‎ عدد المحارف المتطابقة في السلسلتين المدخلتين.

يُحسب عدد المحارف المتطابقة بالعثور على أطول سلسلة فرعية مشتركة، ثم إعادة إجراء هذه العملية للسلسلة النصية التي تسبق السلسلة النصية الفرعية المشتركة والتي تليها تكراريًا (recursively). ثم ستُجمَع أطوال جميع الأجزاء الفرعية المشتركة.

أمثلة

المثال 1: مثال على تبديل معاملات الدالة similar_text()‎

يُظهِرُ المثال الآتي تبديل المعامل first والمعامل second وتأثير ذلك على النتيجة:

<?php

$sim = similar_text('bafoobar', 'barfoo', $perc);

echo "similarity: $sim ($perc %)\n";

$sim = similar_text('barfoo', 'bafoobar', $perc);

echo "similarity: $sim ($perc %)\n";

تكون نتيجة المثال السابق كالآتي:

similarity: 5 (71.428571428571 %)

similarity: 3 (42.857142857143 %)

انظر أيضًا

  • الدالة levenshtein()‎: حساب مسافة Levenshtein بين سلسلتين.
  • الدالة soundex()‎: حساب مفتاح soundex لسلسلة.

مصادر