2011-01-29 11 views
6

मैंने विकिपीडिया लेख शीर्षक फ़ाइल डाउनलोड की जिसमें प्रत्येक विकिपीडिया आलेख का नाम शामिल है। मुझे उन सभी लेख शीर्षकों की खोज करने की आवश्यकता है जो संभव मिलान हो सकते हैं। उदाहरण के लिए, मेरे पास "हॉकी" शब्द हो सकता है, लेकिन हॉकी के लिए विकिपीडिया लेख जो मैं चाहता हूं वह "Ice_hockey" है। यह एक मामूली असंवेदनशील खोज भी होनी चाहिए।स्ट्रिंग्स (पायथन) की बड़ी फ़ाइल में आंशिक स्ट्रिंग मैचों को खोजने का सबसे प्रभावी तरीका

मैं पाइथन का उपयोग कर रहा हूं, और क्या लाइन खोज द्वारा लाइन करने के बजाय एक और अधिक प्रभावी तरीका है? मैं इस खोज को 500 या 1000 बार प्रति मिनट आदर्श रूप से करूँगा। यदि रेखा से रेखा मेरा एकमात्र विकल्प है, तो क्या मैं इसमें कुछ अनुकूलन कर सकता हूं?

मुझे लगता है कि फ़ाइल में कई मिलियन लाइनें हैं।

कोई विचार?

धन्यवाद।

+1

कृपया अपेक्षित इनपुट दिखाएं। फ़ाइल में किस प्रारूप में है? उन लोगों को न बनाएं जो आपको स्वयं के लिए फ़ाइल डाउनलोड करने में मदद करना चाहते हैं। – aaronasterling

+0

यह प्रत्येक शीर्षक के साथ अपनी लाइन पर बस एक साधारण पाठ फ़ाइल है – apexdodge

उत्तर

3

ग्रेग का जवाब अच्छा है यदि आप व्यक्तिगत शब्दों से मेल खाना चाहते हैं। यदि आप सबस्ट्रिंग्स पर मिलान करना चाहते हैं तो आपको कुछ और जटिल होना चाहिए, जैसे प्रत्यय पेड़ (http://en.wikipedia.org/wiki/Suffix_tree)। एक बार निर्मित होने के बाद, एक प्रत्यय वृक्ष मनमाने ढंग से सबस्ट्रिंग के लिए क्वेरी का जवाब दे सकता है, इसलिए आपके उदाहरण में यह "आइस_ हॉकी" से मेल खाता है जब किसी ने "हॉक" की खोज की।

3

यदि आपके पास एक निश्चित डेटा सेट और चरणीय प्रश्न हैं, तो सामान्य तकनीक डेटा सेट को पुनर्गठित करना है जिसे आसानी से खोजा जा सकता है। एक अमूर्त स्तर पर, आप प्रत्येक लेख शीर्षक को अलग-अलग लोअरकेस शब्दों में विभाजित कर सकते हैं, और उनमें से प्रत्येक को पाइथन शब्दकोश डेटा संरचना में जोड़ सकते हैं। फिर, जब भी आप कोई प्रश्न प्राप्त करते हैं, क्वेरी शब्द को कम मामले में परिवर्तित करें और इसे शब्दकोश में देखें। यदि प्रत्येक शब्दकोश प्रविष्टि मान शीर्षक की एक सूची है, तो आप किसी दिए गए क्वेरी शब्द से मेल खाने वाले सभी शीर्षक आसानी से पा सकते हैं।

यह सरल शब्दों के लिए काम करता है, लेकिन आपको यह विचार करना होगा कि क्या आप "धूम्रपान" करते समय "धूम्रपान" ढूंढने जैसे समान शब्दों पर मिलान करना चाहते हैं।

1

मेरा सुझाव है कि आप अपना डेटा एक SQL डेटाबेस में रखें, और अपनी खोजों के लिए SQL 'जैसे' ऑपरेटर का उपयोग करें।

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

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