दुर्भाग्य से, PHP में ऐसा करना निषेधात्मक रूप से महंगा है (उच्च CPU और मेमोरी उपयोग।) हालांकि, आप निश्चित रूप से छोटे डेटा सेट पर एल्गोरिथ्म लागू कर सकते हैं।
आप सर्वर मेल्टडाउन कैसे बना सकते हैं, इस पर विशेष रूप से विस्तार करने के लिए:कुछ अंतर्निहित PHP फ़ंक्शन स्ट्रिंग्स के बीच "दूरी" निर्धारित करेंगे:levenshtein और समान_पाठ ।
डमी डेटा:(दिखाओ कि वे समाचारों की सुर्खियाँ हैं)
$titles = <<< EOF Apple Apples Orange Oranges Banana EOF;$titles = explode("\n", $titles );
इस समय, $titles सिर्फ तार की एक सरणी होना चाहिए। अब, एक मैट्रिक्स बनाएं और समानता के लिए प्रत्येक शीर्षक की तुलना हर दूसरे शीर्षक से करें। दूसरे शब्दों में, 5 हेडलाइन के लिए, आपको 5 x 5 मैट्रिक्स (25 प्रविष्टियां) मिलेगा। यहीं पर सीपीयू और मेमोरी सिंक होता है।
इसलिए यह विधि (PHP के माध्यम से) हजारों प्रविष्टियों पर लागू नहीं की जा सकती। लेकिन अगर आप चाहते हैं:
$matches = array(); foreach( $titles as $title ) { $matches[$title] = array(); foreach( $titles as $compare_to ) { $matches[$title][$compare_to] = levenshtein( $compare_to, $title ); } asort( $matches[$title], SORT_NUMERIC ); }
इस बिंदु पर आपके पास मूल रूप से "पाठ दूरी" वाला मैट्रिक्स है। अवधारणा में (वास्तविक डेटा में नहीं) यह नीचे दी गई तालिका की तरह दिखता है। ध्यान दें कि कैसे 0 मानों का एक सेट है जो तिरछे जाते हैं - इसका मतलब है कि मिलान लूप में, दो समान शब्द हैं - ठीक है, समान।
Apple Apples Orange Oranges Banana Apple 0 1 5 6 6 Apples 1 0 6 5 6 Orange 5 6 0 1 5 Oranges 6 5 1 0 5 Banana 6 6 5 5 0
वास्तविक $matches सरणी इस तरह दिखती है (छोटा हुआ):
Array ( [Apple] => Array ( [Apple] => 0 [Apples] => 1 [Orange] => 5 [Banana] => 6 [Oranges] => 6 ) [Apples] => Array ( ...
किसी भी तरह, यह आप पर निर्भर करता है कि (प्रयोग द्वारा) यह निर्धारित करें कि एक अच्छी संख्यात्मक दूरी कटऑफ ज्यादातर मेल खा सकती है - और फिर इसे लागू करें। अन्यथा, स्फिंक्स-खोज पर पढ़ें और इसका उपयोग करें - क्योंकि इसमें PHP पुस्तकालय हैं।
ऑरेंज आपको खुशी है कि आपने इसके बारे में पूछा?