2011-01-24 8 views
10

मेरे पास स्ट्रिंग्स का एक बड़ा सेट है जिसका उपयोग मैं प्राकृतिक भाषा प्रसंस्करण अनुसंधान के लिए कर रहा हूं, और मुझे इसे पायथन में स्टोर करने का एक अच्छा तरीका चाहिए।पायथन में बड़ी (~ 10 जीबी) सूचियों को स्टोर और एक्सेस करने के तरीके?

मैं अचार इस्तेमाल कर सकते हैं, लेकिन स्मृति में पूरे सूची लोड तो, एक असंभव (मेरा मानना ​​है कि) होगा के रूप में इसके बारे में 10 जीबी बड़ी है, और मैं इतना मुख्य स्मृति नहीं है। वर्तमान में मेरे पास शेल्व लाइब्रेरी के साथ संग्रहित सूची है ... शेल्फ को तारों, "0", "1", ..., "n" द्वारा अनुक्रमित किया गया है जो थोड़ा सा गुंजाइश है।

क्या ऐसी ऑब्जेक्ट को एक फ़ाइल में स्टोर करने के अच्छे तरीके हैं, और अभी भी इसमें यादृच्छिक (आईएसएच) पहुंच है?

यह हो सकता है कि इसे सबसे अच्छा विकल्प कई सूचियों में विभाजित करना है।

धन्यवाद!

उत्तर

9

इस बात पर निर्भर करता है कि आप डेटा पर कैसे पहुंचना चाहते हैं, SQLite3 सबसे अच्छा तरीका हो सकता है। SQLite3 संबंधपरक डेटा के लिए यादृच्छिक पहुंच पर उत्कृष्ट है, लेकिन यदि आपका डेटा बहुत संबंधपरक नहीं है, तो यह अधिक समझ में नहीं आता है। (भले ही आपके पास सभी 'आईडी' नंबर और फिर आपकी स्ट्रिंग है, मुझे लगता है कि आपके तारों के अंतर्निहित भंडारण के लिए SQLite3 बहुत अच्छा हो सकता है।)

यदि आप किसी तरीके से अपने तारों को एक साथ समूहबद्ध करने के लिए कुछ तंत्र को समझ सकते हैं कि आप उनका उपयोग करेंगे (कहें, अगर आपके कुछ वाक्यों ने वस्तुओं या विषयों को निहित किया है, और आप विशेष रूप से उन पर शोध करना चाहते हैं; या अपने तारों के स्रोत के आधार पर, चाहे वह औपचारिक या अनौपचारिक या हाइपरिनफॉर्मल हो) या ऐसा कुछ, तो आप इसे विभाजित करके महत्वपूर्ण रूप से अपने डेटा के 'कामकाजी सेट' को कम कर सकते हैं, और संभावित रूप से आपके शोध के थ्रूपुट में काफी सुधार कर सकते हैं। लेकिन यदि आप वास्तव में यादृच्छिक पहुंच का इरादा रखते हैं तो एक बड़ा ढेर सबसे अच्छा हो सकता है।

उम्मीद है कि इससे मदद मिलती है।

+0

मुझे लगता है कि एक डेटाबेस वास्तव में इस तरह के कार्य के लिए अधिक उपयुक्त है। मुझे लगता है कि मैं इसे एक शॉट दूंगा: डी –

+1

बस SQLite3 पर पोर्ट किया गया। प्रसंस्करण बहुत तेज़ है, और डिस्क स्पेस का एक तिहाई हिस्सा लेता है जो एक शेल्फ उठाता है! –

+2

हा! तेज़ _and_ छोटा। मुझे SQLite3 पसंद है। : डी – sarnold

3

आप डेटाबेस का उपयोग करने पर विचार कर सकते हैं; शायद प्रत्येक स्ट्रिंग के लिए एक पंक्ति के साथ एक वाक्य या स्ट्रिंग तालिका।

कुछ वस्तु संबंधपरक मैपर (जैसे sqlalchemy) आप डेटा पर एक वस्तु उन्मुख दृश्य हो सकता था और तार से अधिक पुनरावृति, या अपने डाटा को अनुक्रम के बड़े सबसेट के साथ काम (कि यदि आपके कार्य के लिए लागू होता है) की मदद से

इसके अलावा, आप प्रत्येक वाक्य के लिए अतिरिक्त डेटा स्टोर कर सकते हैं ताकि आप जिन वस्तुओं के साथ काम करना चाहते हैं, उनके सेट पर अधिक बढ़िया नियंत्रण प्राप्त कर सकें।

+0

मैंने sqlalchemy के बारे में नहीं सुना है, लेकिन यह दिलचस्प लग रहा है। –

1

मैं शेल्व का उपयोग कहूंगा (जो एक बीडीबी बैकएंड का उपयोग करता है) या स्क्लाइट 3।
मैं एक सरल सूची के लिए SQLite3 के साथ जाऊंगा, CREATE TABLE list(idx int primary key, value text); जैसी तालिका पर्याप्त होनी चाहिए।

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

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