2012-05-08 10 views
6

मान लें कि मेरे पास स्ट्रिंग text = "A compiler translates code from a source language" है।पायथन में स्ट्रिंग की वाक्य के माध्यम से कैसे पुनरावृत्ति करें?

  1. मैं प्रत्येक शब्द के माध्यम से पुनरावृति और NLTK लाइब्रेरी का उपयोग स्टेम करने की जरूरत है: मैं दो बातें करना चाहते हैं। स्टेमिंग के लिए कार्य PorterStemmer().stem_word(word) है। हमें तर्क 'शब्द' पारित करना होगा। मैं प्रत्येक शब्द कैसे लगा सकता हूं और स्टेमड वाक्यों को वापस कैसे प्राप्त कर सकता हूं?

  2. मुझे text स्ट्रिंग से कुछ स्टॉप शब्दों को हटाने की आवश्यकता है। बंद शब्दों से युक्त सूची एक पाठ फ़ाइल में संग्रहीत है (रिक्ति द्वारा विभाजित)

    stopwordsfile = open('c:/stopwordlist.txt','r+') 
    stopwordslist=stopwordsfile.read() 
    

    मैं कैसे text से उन रोकने वाले शब्द को हटाने और एक साफ नया स्ट्रिंग मिल सकता है?

+0

' text.split (''): stemmer.stem_word (शब्द) '? – birryree

+0

stemmed = text.split ('') में शब्द के लिए: stemmer.stem_word (शब्द) यह काम करेगा? – ChamingaD

+1

बिल्कुल नहीं। यदि आप उपभेदों की एक सूची चाहते हैं, तो आप text.split ('')] w में w के लिए 'stemmed = [stemmer.stem_word (w) कर सकते हैं। यदि आप इसकी एक वाक्य चाहते हैं, तो आप 'sente =' '.join (stemmed)' कर सकते हैं, जो सभी उपभेदों की एक वाक्य वापस कर देगा। यदि इससे सहायता मिलती है तो मुझे बताएं। – birryree

उत्तर

9

मैं एक टिप्पणी के रूप में इस पोस्ट, लेकिन सोचा था कि मैं के साथ-साथ यह शरीर से बाहर हो सकता है कुछ स्पष्टीकरण के साथ एक पूर्ण जवाब में:

आप str.split() उपयोग करने के लिए शब्दों में स्ट्रिंग विभाजित करने के लिए, और फिर स्टेम चाहते प्रत्येक शब्द:

for word in text.split(" "): 
    PorterStemmer().stem_word(word) 

आप एक साथ सभी उपजी शब्दों की एक स्ट्रिंग प्राप्त करना चाहते हैं, यह तुच्छ है तो शामिल होने के लिए इन वापस एक साथ उपजी है। यह आसानी से ऐसा करने के लिए और कुशलता से हम str.join() का उपयोग करें और एक generator expression:

" ".join(PorterStemmer().stem_word(word) for word in text.split(" ")) 

संपादित करें:

अपने अन्य समस्या के लिए:

with open("/path/to/file.txt") as f: 
    words = set(f) 

यहाँ हम the with statement का उपयोग कर (जो सबसे अच्छा है फ़ाइल को खोलने के फ़ाइलों को खोलने का तरीका, क्योंकि यह उन्हें अपवादों पर भी सही तरीके से बंद कर देता है, और अधिक पठनीय है) और सामग्री को एक सेट में पढ़ें। हम एक सेट का उपयोग करते हैं क्योंकि हमें शब्दों, या डुप्लिकेट के क्रम की परवाह नहीं है, और यह बाद में अधिक कुशल होगा। मैं प्रति पंक्ति एक शब्द मान रहा हूं - यदि यह मामला नहीं है, और वे अल्पविराम से अलग हैं, या str.split() का उपयोग करते हुए वेइटस्पेस अलग हो गए हैं जैसा कि हमने पहले किया था (उचित तर्क के साथ) शायद एक अच्छी योजना है।

stems = (PorterStemmer().stem_word(word) for word in text.split(" ")) 
" ".join(stem for stem in stems if stem not in words) 

यहाँ ऐसे शब्द हैं जो शब्द हम एक फ़ाइल से लोड के सेट में हैं अनदेखी करने के लिए एक जनरेटर अभिव्यक्ति की अगर खंड का उपयोग करें। एक सेट पर सदस्यता जांच ओ (1) हैं, इसलिए यह अपेक्षाकृत कुशल होना चाहिए।

संपादित करें 2:

शब्द निकालने के लिए इससे पहले कि वे उपजी रहे हैं, यह और भी आसान है:

" ".join(PorterStemmer().stem_word(word) for word in text.split(" ") if word not in words) 

दिए गए शब्दों को हटाने के लिए बस है:

filtered_words = [word for word in unfiltered_words if not in set_of_words_to_filter] 
में शब्द के लिए
+0

मुझे एक और चीज करने की ज़रूरत है। उस स्ट्रिंग से स्टॉप शब्द को निकालने के लिए। Stopwords की सूची पाठ फ़ाइल (स्पेस द्वारा पृथक) stopwordsfile = खुला में संग्रहीत ('c: /stopwordlist.txt', 'r +') stopwordslist = stopwordsfile.read() मैं 'पाठ से उन रोकने वाले शब्द को हटाने की जरूरत 'और नई स्ट्रिंग साफ़ करें। – ChamingaD

+0

@ चिमिंग डी मैं सुझाव दूंगा कि यह एक अलग समस्या है और आपको एक नया प्रश्न खोलना चाहिए। यदि आप ऐसा करते हैं, तो भविष्य में अन्य लोगों के लिए यह एक समान समस्या के साथ और अधिक उपयोगी होगा, और हमारे साथ काम करना आसान होगा। –

+0

समस्या है कि मुझे नया qustion शुरू करने के लिए 20 मिनट का इंतजार करना होगा:/ – ChamingaD

4

स्ट्रिंग में प्रत्येक शब्द पर के माध्यम से जाने के लिए:

for word in text.split(): 
    PorterStemmer().stem_word(word) 

उपयोग स्ट्रिंग के शामिल होने के विधि (Lattyware द्वारा अनुशंसित) एक बड़ा स्ट्रिंग के लिए टुकड़े जोड़ सकते हैं।

" ".join(PorterStemmer().stem_word(word) for word in text.split(" ")) 
+2

प्रश्न पूछता है 'और एक स्टेमड वाकई वापस प्राप्त करें' तो एक पूर्ण जवाब text.split ("") में शब्द के लिए 'join "(जॉइनर (पोर्टरस्टेमर()। stem_word (शब्द) होगा। –

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

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