मैं गलत उपयोगकर्ता इनपुट का निवारण करना चाहता/चाहती हूं। यह "डेटाबेस" से निकटतम मिलान खोजने के बारे में है।

database = ["dog", "cat", "bird"]
user_input = ["dog", "ccat", "ddogg", "horse", "fish"]
for i in user_input:
   match = difflib.get_close_matches('i', words)
match

लेकिन मुझे एक खाली सूची मिलती है। क्या इस समस्या का कोई सरल उपाय है? मुझे कहीं भी नहीं मिला है कि difflib का उपयोग करके सूची में परिणाम कैसे प्राप्त करें।

1
Grzegorz Witek 2 फरवरी 2021, 23:27
समीक्षा करें: यहां एक अजगर विशेषज्ञ नहीं है। कोड काफी अधूरा लगता है। "शब्द" क्या है? डेटाबेस कहाँ आता है? क्या आप user_input[i] के बजाय "i" की तुलना नहीं कर रहे हैं?
 – 
H.Hasenack
2 फरवरी 2021, 23:49

1 उत्तर

सबसे बढ़िया उत्तर

इसे प्राप्त करने का आसान तरीका सूची समझ का उपयोग करना है:

import difflib
database = ["dog", "cat", "bird"]
user_input = ["dog", "ccat", "ddogg", "horse", "fish"]

new_list = [difflib.get_close_matches(word, database) for word in user_input]

जहां new_list, database के मानों के आधार पर, user_input से शब्द का निकटतम मेल रखता है:

[['dog'], ['cat'], ['dog'], [], []]

आपके कोड के साथ समस्या यह है कि आप i को स्ट्रिंग 'i' के रूप में get_close_matches फ़ंक्शन में पास कर रहे हैं। इसे चर के रूप में पास करें, और फिर सूची में match शब्द जोड़ें। उदाहरण के लिए, यहाँ कोड का कार्यशील संस्करण है:

new_list = []
for i in user_input:
    match = difflib.get_close_matches(i, database)
                                  #   ^ don't pass this as string
    new_list.append(match)

# new_list: [['dog'], ['cat'], ['dog'], [], []]
   
3
Anonymous 2 फरवरी 2021, 23:38