2011-02-09 9 views
9

नरक,सबसे समान तार खोजने के लिए php में सबसे अच्छा तरीका है?

PHP में बहुत सारे स्ट्रिंग फ़ंक्शंस हैं जैसे लेवेनशेटिन, समान_टेक्स्ट और साउंडएक्स जो समानता के लिए स्ट्रिंग की तुलना कर सकते हैं। http://www.php.net/manual/en/function.levenshtein.php

सटीकता और प्रदर्शन के लिए सबसे अच्छा कौन सा है?

+1

मुझे लगता है कि यह एक समुदाय विकी –

+2

के रूप में बेहतर होगा, विभिन्न कार्यों के कार्यान्वयन विवरणों के बारे में बहुत कुछ जानने के बिना, मुझे लगता है कि आप सटीकता और प्रदर्शन दोनों का लक्ष्य नहीं रख सकते हैं। वे शायद विपरीत आनुपातिक हैं। –

+0

@ एंड्रस आप उत्तर देने में सक्षम हो सकते हैं जो प्रदर्शन के लिए बेहतर है, और जो सटीकता के लिए बेहतर है। – Adam

उत्तर

8

समान_टेक्स्ट में जटिलता ओ (अधिकतम (एन, एम) ** 3) और लेवेनशेटिन ओ (एम * एन) की जटिलता है, जहां एन और एम तारों की लंबाई हैं, इसलिए लेवेनशेटिन बहुत तेज होना चाहिए। दोनों 100% सटीक हैं, जिसमें वे एक ही इनपुट के लिए एक ही आउटपुट देते हैं, लेकिन प्रत्येक फ़ंक्शन के लिए आउटपुट अलग-अलग होंगे। यदि आप सटीकता के एक अलग उपाय का उपयोग कर रहे हैं, तो आपको अपना खुद का तुलना फ़ंक्शन बनाना होगा।

+0

दरअसल, केवल PHP पर जांच की गई और उनकी जटिलता अलग है: "(लेवेनशेटिन) एल्गोरिदम की जटिलता ओ (एम * एन) है, जहां एन और एम str1 और str2 की लंबाई हैं (इसी तरह की _text() की तुलना में अच्छा है , जो ओ (अधिकतम (एन, एम) ** 3) है, लेकिन अभी भी महंगा है। " – giorgio79

+0

यह आपके लिए अलग-अलग पर निर्भर करता है। मुझे अपने मामले के अनुरूप बेहतर बनाने के लिए 'similar_text' मिला। यदि स्ट्रिंग्स एक ही लंबाई के हैं तो 'लेवेनशेटिन' अधिक समानता लौटाएगी। उदाहरण के लिए: 'रॉब ब्लैबला' की तुलना में 'मार्को ब्लब्ला' ने 81.8% (समान_टेक्स्ट) और 4 (लेवेनशेटिन) दिया। और 'लबान ब्लब्ला' की तुलना में 'जन ब्लब्ला' ने 70% (समान_टेक्स्ट) और 3 (लेवेनशेटिन) दिया। तो 'लेवेनशेटिन' सोचता है कि आखिरी लोग समान हैं और 'समान_टेक्स्ट' सोचता है कि पहले वाले लोग समान हैं। – Lode

संबंधित मुद्दे