मेरी वर्तमान साइड परियोजनाओं में से एक में, मैं शब्द ट्रिपलेट की आवृत्ति को देखते हुए कुछ पाठ के माध्यम से स्कैन कर रहा हूं। मेरे पहले में, मैंने डिफ़ॉल्ट शब्दकोश का उपयोग तीन स्तरों को गहराई से किया था। दूसरे शब्दों में, topDict[word1][word2][word3]
रिटर्न समय की संख्या इन शब्दों पाठ में दिखाई देते हैं, topDict[word1][word2]
पाइथन शब्दकोशों के लिए मेमोरी कुशल विकल्प
यह कार्यों सभी शब्दों की सही, आदि है कि 1 शब्द और 2 निम्नलिखित दिखाई दिया के साथ एक शब्दकोश देता है, लेकिन यह बहुत अच्छी मेमोरी की है। मेरे प्रारंभिक परीक्षणों में यह टेक्स्ट फ़ाइल में ट्रिपलेट्स को संग्रहीत करने की स्मृति की 20 गुणा की तरह कुछ उपयोग करता था, जो कि स्मृति ओवरहेड की अत्यधिक मात्रा में लगता है।
मेरा संदेह यह है कि इनमें से कई शब्दकोश वास्तव में उपयोग किए जाने वाले कई स्लॉट के साथ बनाए जा रहे हैं, इसलिए मैं शब्दकोशों को किसी अन्य चीज़ से बदलना चाहता हूं जो इस तरह से उपयोग किए जाने पर अधिक मेमोरी कुशल है। मैं दृढ़ता से एक समाधान पसंद करूंगा जो शब्दकोशों की रेखाओं के साथ मुख्य लुकअप की अनुमति देता है।
मुझे डेटा संरचनाओं के बारे में क्या पता है, लाल-काले या एवीएल जैसे कुछ का उपयोग करके एक संतुलित बाइनरी खोज पेड़ शायद आदर्श होगा, लेकिन मैं वास्तव में उन्हें स्वयं लागू नहीं करना चाहूंगा। यदि संभव हो, तो मैं मानक पायथन पुस्तकालयों के साथ रहना पसंद करूंगा, लेकिन अगर वे सबसे अच्छा काम करेंगे तो मैं निश्चित रूप से अन्य विकल्पों के लिए खुला हूं।
तो, क्या किसी के पास मेरे लिए कोई सुझाव है? जोड़ने
संपादित करने के लिए:
धन्यवाद प्रतिक्रिया के लिए अब तक। अब तक के कुछ उत्तरों ने टुपल्स का उपयोग करने का सुझाव दिया है, जो वास्तव में मेरे लिए बहुत कुछ नहीं करता था जब मैंने पहले दो शब्दों को टुपल में घनत्व दिया था। मैं तीनों को एक कुंजी के रूप में उपयोग करने में संकोच कर रहा हूं क्योंकि मैं चाहता हूं कि पहले दो दिए गए सभी तीसरे शब्दों को देखना आसान हो। (यानी मुझे topDict[word1, word2].keys()
के परिणाम की तरह कुछ चाहिए)।
वर्तमान डेटासेट जो मैं खेल रहा हूं वह Wikipedia For Schools का नवीनतम संस्करण है। उदाहरण के लिए, पहले हजार पृष्ठों को पार्स करने के नतीजे एक टेक्स्ट फ़ाइल के लिए 11 एमबी की तरह हैं, जहां प्रत्येक पंक्ति तीन शब्द है और सभी टैब अलग-अलग हैं। शब्दकोश प्रारूप में पाठ को संग्रहीत करना अब मैं 185 एमबी का उपयोग कर रहा हूं। मुझे पता है कि पॉइंटर्स और व्हाट्नॉट के लिए कुछ अतिरिक्त ओवरहेड होगा, लेकिन अंतर अत्यधिक लगता है।
आप अपने नमूना शब्द सूची लिए एक लिंक प्रदान कर सकते हैं? विकिपीडिया के लिए स्कूलों को डाउनलोड अक्षम कर दिया गया है। आपकी 11 एमबी फ़ाइल और आप इससे बाहर निकलने की योजना बना रहे हैं (शायद आपका वर्तमान कार्यान्वयन) परीक्षण के लिए बहुत अच्छा होगा। – Dustin