Nltk या python का उपयोग करके स्टॉप शब्द कैसे हटाएं


110

इसलिए मेरे पास एक डेटासेट है जिसे मैं उपयोग करने से रोकना चाहता हूं

stopwords.words('english')

मैं संघर्ष कर रहा हूं कि अपने कोड के भीतर इसे कैसे उपयोग करना है बस इन शब्दों को बाहर निकालना है। मेरे पास पहले से ही इस डेटासेट के शब्दों की एक सूची है, मैं जिस भाग से जूझ रहा हूं वह इस सूची की तुलना कर रहा है और स्टॉप शब्दों को हटा रहा है। किसी भी मदद की सराहना की है।


4
आपको स्टॉपवार्ड कहां से मिला? क्या यह एनएलटीके से है?
tumultous_rooster

37
@ from nltk.corpus import stopwordsभविष्य के गोगलर्स के लिए मैटो ब्रायन
डैनोडोनोवैन

13
nltk.download("stopwords")स्टॉपवर्ड शब्दकोश उपलब्ध कराने के लिए इसे चलाना भी आवश्यक है।
sffc


1
ध्यान दें कि "नहीं" जैसे शब्द को nltk में एक स्टॉपवार्ड भी माना जाता है। यदि आप भावना विश्लेषण, स्पैम फ़िल्टरिंग जैसे कुछ करते हैं, तो एक निषेध वाक्य के पूरे अर्थ को बदल सकता है और यदि आप इसे प्रसंस्करण चरण से हटाते हैं, तो आपको सटीक परिणाम नहीं मिल सकते हैं।
डार्कोव

जवाबों:


206
from nltk.corpus import stopwords
# ...
filtered_words = [word for word in word_list if word not in stopwords.words('english')]

दोनों उत्तरों के लिए धन्यवाद, वे दोनों काम करते हैं, हालांकि ऐसा लगता है कि मेरे कोड में एक दोष है जो स्टॉप सूची को सही तरीके से काम करने से रोकता है। क्या यह एक नया प्रश्न पोस्ट होना चाहिए? यकीन नहीं कैसे चीजें अभी भी यहाँ के आसपास काम करती हैं!
एलेक्स

51
प्रदर्शन में सुधार करने के लिए, stops = set(stopwords.words("english"))इसके बजाय पर विचार करें ।
isakkarlsson

1
>>> आयात nltk >>> nltk.download () स्रोत

2
stopwords.words('english')लोअर केस है। इसलिए सूची में केवल निचले मामलों के शब्दों का उपयोग करना सुनिश्चित करें जैसे[w.lower() for w in word_list]
एलेक्सजी

19

आप एक सेट अंतर भी कर सकते हैं, उदाहरण के लिए:

list(set(nltk.regexp_tokenize(sentence, pattern, gaps=True)) - set(nltk.corpus.stopwords.words('english')))

15
नोट: यह वाक्य को एक SET में परिवर्तित करता है जो सभी डुप्लिकेट शब्दों को हटाता है और इसलिए आप परिणाम पर आवृत्ति की गिनती का उपयोग नहीं कर पाएंगे
डेविड डेहान

एक सेट में परिवर्तित करने से एक महत्वपूर्ण शब्द की कई घटनाओं को स्क्रैप करके वाक्य से व्यवहार्य जानकारी को हटाया जा सकता है।
उज्जवल

14

मुझे लगता है कि आपके पास शब्दों (word_list) की एक सूची है जिसमें से आप स्टॉपवार्ड निकालना चाहते हैं। आप ऐसा कुछ कर सकते हैं:

filtered_word_list = word_list[:] #make a copy of the word_list
for word in word_list: # iterate over word_list
  if word in stopwords.words('english'): 
    filtered_word_list.remove(word) # remove word from filtered_word_list if it is a stopword

5
यह डैरन थॉमस की सूची की समझ से पूरी तरह धीमी होगी ...
drevicko

12

Nltk stop-words सहित सभी प्रकार के रोक-शब्दों को बाहर करने के लिए, आप कुछ इस तरह से कर सकते हैं:

from stop_words import get_stop_words
from nltk.corpus import stopwords

stop_words = list(get_stop_words('en'))         #About 900 stopwords
nltk_words = list(stopwords.words('english')) #About 150 stopwords
stop_words.extend(nltk_words)

output = [w for w in word_list if not w in stop_words]

मैं हो रही है len(get_stop_words('en')) == 174बनामlen(stopwords.words('english')) == 179
rubencart

6

stop-wordsइस खातिर एक बहुत ही सरल हल्के वजन का अजगर पैकेज है ।

मुट्ठी का उपयोग कर पैकेज स्थापित करें: pip install stop-words

तब आप सूची बोध का उपयोग करके अपने शब्दों को एक पंक्ति में हटा सकते हैं:

from stop_words import get_stop_words

filtered_words = [word for word in dataset if word not in get_stop_words('english')]

इस पैकेज, डाउनलोड (विपरीत nltk) करने के लिए बहुत हल्के वजन है दोनों के लिए काम करता Python 2है और Python 3है, और यह की तरह कई अन्य भाषाओं के लिए रोकने वाले शब्द हैं:

    Arabic
    Bulgarian
    Catalan
    Czech
    Danish
    Dutch
    English
    Finnish
    French
    German
    Hungarian
    Indonesian
    Italian
    Norwegian
    Polish
    Portuguese
    Romanian
    Russian
    Spanish
    Swedish
    Turkish
    Ukrainian

3

अपने डेटा से स्टॉपवर्ड्स निकालने के लिए टेक्स्टक्लाइनर लाइब्रेरी का उपयोग करें ।

इस लिंक का पालन करें: https://yugantm.github.io/textcleaner/documentation.html#remove_stpwrds

इस लाइब्रेरी के साथ ऐसा करने के लिए इन चरणों का पालन करें।

pip install textcleaner

स्थापित करने के बाद:

import textcleaner as tc
data = tc.document(<file_name>) 
#you can also pass list of sentences to the document class constructor.
data.remove_stpwrds() #inplace is set to False by default

स्टॉप-शब्द हटाने के लिए उपरोक्त कोड का उपयोग करें।


1

आप इस फ़ंक्शन का उपयोग कर सकते हैं, आपको ध्यान देना चाहिए कि आपको सभी शब्दों को कम करने की आवश्यकता है

from nltk.corpus import stopwords

def remove_stopwords(word_list):
        processed_word_list = []
        for word in word_list:
            word = word.lower() # in case they arenet all lower cased
            if word not in stopwords.words("english"):
                processed_word_list.append(word)
        return processed_word_list

1

फिल्टर का उपयोग :

from nltk.corpus import stopwords
# ...  
filtered_words = list(filter(lambda word: word not in stopwords.words('english'), word_list))

3
यदि word_listयह बड़ा है तो यह कोड बहुत धीमा है। उपयोग करने से पहले स्टॉपवार्ड सूची को सेट में बदलना बेहतर है .. in set(stopwords.words('english')):।
रॉबर्ट

1

यहाँ इस पर मेरी राय है, यदि आप तुरंत एक स्ट्रिंग में उत्तर प्राप्त करना चाहते हैं (फ़िल्टर्ड शब्दों की सूची के बजाय):

STOPWORDS = set(stopwords.words('english'))
text =  ' '.join([word for word in text.split() if word not in STOPWORDS]) # delete stopwords from text

इस दृष्टिकोण का प्रयोग फ्रेंच l 'में न करें वरना कब्जा नहीं होगा।
डेविड ब्यूकेमिन

0

यदि आपका डेटा एक के रूप में संग्रहीत किया जाता है Pandas DataFrame, तो आप remove_stopwordsटेक्सटेरो से उपयोग कर सकते हैं जो डिफ़ॉल्ट रूप से एनएलटीके स्टॉपवार्ड सूची का उपयोग करते हैं ।

import pandas as pd
import texthero as hero
df['text_without_stopwords'] = hero.remove_stopwords(df['text'])

0
from nltk.corpus import stopwords 

from nltk.tokenize import word_tokenize 

example_sent = "This is a sample sentence, showing off the stop words filtration."

  
stop_words = set(stopwords.words('english')) 
  
word_tokens = word_tokenize(example_sent) 
  
filtered_sentence = [w for w in word_tokens if not w in stop_words] 
  
filtered_sentence = [] 
  
for w in word_tokens: 
    if w not in stop_words: 
        filtered_sentence.append(w) 
  
print(word_tokens) 
print(filtered_sentence) 

-3
   import sys
print ("enter the string from which you want to remove list of stop words")
userstring = input().split(" ")
list =["a","an","the","in"]
another_list = []
for x in userstring:
    if x not in list:           # comparing from the list and removing it
        another_list.append(x)  # it is also possible to use .remove
for x in another_list:
     print(x,end=' ')

   # 2) if you want to use .remove more preferred code
    import sys
    print ("enter the string from which you want to remove list of stop words")
    userstring = input().split(" ")
    list =["a","an","the","in"]
    another_list = []
    for x in userstring:
        if x in list:           
            userstring.remove(x)  
    for x in userstring:           
        print(x,end = ' ') 
    #the code will be like this

इसके लिए सबसे अच्छा है कि आप अपने द्वारा हटाए जाने वाले प्रत्येक शब्दों को निर्दिष्ट करने की तुलना में stopwords.words ("अंग्रेज़ी") को जोड़ दें।
एलईडी
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.