2010-10-15 9 views
14

मैं अपनी समस्या की व्याख्या करूंगा:PHP में गलत वर्तनी वाले के लिए एक समान शब्द कैसे ढूंढें?

मेरे पास country नामक डेटाबेस तालिका है। इसमें दो कॉलम हैं: ID और name

जब मैं 'paris' लिए खोज करना चाहते हैं, लेकिन शब्द गलत वर्तनी: 'pares' ('e''i' के बजाय), मैं डीबी से किसी भी परिणाम नहीं मिलेगा।

मैं चाहता हूं कि सिस्टम समान शब्दों का सुझाव दे जो खोज में मदद कर सके। पेरिस, पेरेडेस, ... आदि

उत्तर

20

पीएचपी में आप metaphone का उपयोग करना चाहिए यह से अधिक सटीक है soundex

लेकिन आपकी समस्या डेटाबेस से डेटा प्राप्त कर रही है। आपने डीबी का उल्लेख नहीं किया है। MySQL में आप SOUNDEX फ़ंक्शन का उपयोग कर सकते हैं। तुम बस आप आप MySQL उपयोग कर रहे हैं के रूप में

... where city sounds like '$input_city' 
+0

** नोट **: 'soundex' के लिए अच्छा है अंग्रेजी शब्द और पूर्णांक, लेकिन अन्य भाषाओं की समस्या। – Eray

+0

@ कोडडिक्ट प्रासंगिकता के अनुसार आदेश देने का कोई तरीका है? –

4

मूल रूप से आप के लिए एक वैध सरणी के खिलाफ समानता जांच करने की आवश्यकता:

तो, मैं एक स्क्रिप्ट है कि डीबी से सुझाव है कि जैसे समान शब्द होते हैं बनाता लेखन मदद के लिए देख रहा हूँ नाम जब आपको अपने डीबी से कोई परिणाम नहीं मिला।

मेरा विचार:

  • उपयोगकर्ता कुछ नाम खोज
  • कोई सटीक परिणाम
  • से db
  • levenshtein का उपयोग करते हुए सभी के नाम लायें सबसे सटीक टिप की गणना उपयोगकर्ता
9
वापस जाने के लिए के लिए

soundex एक ऐसे शब्द के लिए एक संख्यात्मक कोड लौटाएगा जो इसकी ध्वनि का प्रतिनिधित्व करता है। समान शब्द वाले शब्द में समान ध्वनि कोड होगा। आपके पास शब्दों और उनके साउंडएक्स कोड के साथ एक टेबल हो सकती है जिसका उपयोग आप समान ध्वनि शब्दों को देखने के लिए कर सकते हैं। फिर आप उन्हें levenshtein दूरी का उपयोग करके सॉर्ट कर सकते हैं।

आप सरल कुछ के लिए देख रहे हैं और आप केवल अपने डीबी प्रश्नों में लिखने की त्रुटियों को संभालने के लिए चाहते हैं, तो आप कर सकते हैं

बजाय select * from country where city SOUNDS LIKE 'Paris'select * from country where city='Paris'

2

SOUNDS LIKE ऑपरेटर का उपयोग कर सकते

... where soundex(city) = soundex('$input_city') 

या और भी बेहतर करने के लिए

...where city = '$input_city' 

से क्वेरी में आपके जहां खंड बदलने की जरूरत है, आप MATCH() AGAINST() कथन का उपयोग करना चाहेंगे, जहां MATCH() को FULLTEXT कॉलम की एक अल्पविराम-सीमित सूची दी गई है और AGAINST() है giv के खिलाफ मैच करने के लिए अपनी स्ट्रिंग। बयान आपके मिलान (0 और 1 के बीच) की प्रासंगिकता देता है जिसका उपयोग आप यह निर्धारित करने के लिए कर सकते हैं कि पंक्तियों को वापस करना है या नहीं।

MySQL site पर अधिक जानकारी।

संपादित करें: ध्वनि सुझाव अच्छे विचार हैं, हालांकि कुछ गलत वर्तनी पूरी तरह से एक शब्द का उच्चारण बदल जाएगी और इस प्रकार यदि आप उस विधि का उपयोग करते हैं तो आप अच्छे सुझाव नहीं दे पाएंगे।

2

के बाद से पीएचपी आंतरिक तरीकों में से सबसे पहले से ही शामिल किया जाता है, तो आप भी याहू बॉस वर्तनी सुझाव सेवा पर एक नज़र ले जा सकते हैं, इसकी काफी उपयोगी ->http://developer.yahoo.com/search/boss/boss_guide/Spelling_Suggest.html

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