Nltk veya python kullanarak durdurma kelimeleri nasıl kaldırılır


110

Bu yüzden, durdurulan kelimelerin kullanımını kaldırmak istediğim bir veri kümem var

stopwords.words('english')

Bunu sadece bu kelimeleri çıkarmak için kodum içinde nasıl kullanacağım konusunda mücadele ediyorum. Bu veri setindeki kelimelerin bir listesi zaten var, uğraştığım kısım bu listeyle karşılaştırmak ve durdurma kelimelerini kaldırmak. Herhangi bir yardım takdir edilmektedir.


4
Engellenecek kelimeleri nereden aldın? Bu NLTK'dan mı?
tumultous_rooster

37
@ MattO'Brien from nltk.corpus import stopwordsgeleceğin Google çalışanları için
danodonovan

13
nltk.download("stopwords")Engellenecek sözcük sözlüğünün kullanılabilir olması için çalıştırılması da gereklidir .
sffc


1
"Değil" gibi bir sözcüğün de nltk'de engellenecek sözcük olarak kabul edildiğine dikkat edin. Duygu analizi, spam filtreleme gibi bir şey yaparsanız, bir olumsuzluk cümlenin tüm anlamını değiştirebilir ve onu işleme aşamasından çıkarırsanız doğru sonuçlar alamayabilirsiniz.
Darkov

Yanıtlar:


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

Her iki cevap sayesinde, ikisi de işe yarıyor, ancak kodumda durdurma listesinin düzgün çalışmasını engelleyen bir kusur var gibi görünse de. Bu yeni bir soru gönderimi olmalı mı? henüz burada işlerin nasıl yürüdüğünden emin değilim!
Alex

51
Performansı iyileştirmek için stops = set(stopwords.words("english"))bunun yerine düşünün .
isakkarlsson

1
>>> nltk içe aktar >>> nltk.download () Kaynak

2
stopwords.words('english')küçük harftir. Bu nedenle, listede yalnızca küçük harfli sözcükler kullandığınızdan emin olun, örneğin[w.lower() for w in word_list]
AlexG

19

Ayrıca bir set fark da yapabilirsiniz, örneğin:

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

16
Not: Bu, cümleyi tüm yinelenen kelimeleri kaldıran bir SET'e dönüştürür ve bu nedenle sonuç üzerinde sıklık sayma kullanamazsınız
David Dehghan

1
Bir kümeye dönüştürmek, önemli bir kelimenin birden fazla geçtiği yeri kazıtarak cümledeki geçerli bilgileri kaldırabilir.
Ujjwal

14

Engellenecek kelimeleri kaldırmak istediğiniz bir kelime listeniz (kelime_listesi) olduğunu varsayalım. Bunun gibi bir şey yapabilirsiniz:

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
bu Daren Thomas'ın liste anlayışından çok daha yavaş olacak ...
drevicko

12

Nltk durdurma kelimeleri dahil her tür durdurma kelimesini hariç tutmak için, bunun gibi bir şey yapabilirsiniz:

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')) == 174Vs alıyorumlen(stopwords.words('english')) == 179
rubencart

6

stop-wordsSadece bunun için çok basit, hafif bir python paketi var .

İlk olarak paketi kullanarak kurun: pip install stop-words

Ardından, liste anlama özelliğini kullanarak sözcüklerinizi tek satırda kaldırabilirsiniz:

from stop_words import get_stop_words

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

Bu paket indirmesi çok hafiftir (nltk'den farklı olarak), her ikisi için de çalışır Python 2ve aşağıdakiler Python 3gibi diğer birçok dil için durdurma sözcükleri vardır:

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

3

Verilerinizden engellenecek kelimeleri kaldırmak için textcleaner kitaplığını kullanın .

Şu bağlantıyı izleyin: https://yugantm.github.io/textcleaner/documentation.html#remove_stpwrds

Bunu bu kitaplıkla yapmak için şu adımları izleyin.

pip install textcleaner

Kurduktan sonra:

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

Durdurma kelimelerini kaldırmak için yukarıdaki kodu kullanın.


2

filtre kullanarak :

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

3
eğer word_listbüyük bu kod çok yavaş. Kullanmadan önce bir dizi engellenecek kelimeler listesini dönüştürmek için daha iyidir: .. in set(stopwords.words('english')).
Robert

1

bu işlevi kullanabilirsiniz, tüm kelimeleri azaltmanız gerektiğini fark etmelisiniz.

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

Cevabı hemen bir dizeye almak istemeniz durumunda (filtrelenmiş kelimelerin bir listesi yerine) bu konuyu ele alıyorum:

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

Bu yaklaşımı fransızca kullanmayın l 'yoksa yakalanmayacaktır.
David Beauchemin

0

Durumda verileriniz olarak saklanır Pandas DataFramekullanabileceğiniz remove_stopwordstarafından NLTK engellenecek kelimeler listesini kullanın textero gelen varsayılan .

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 ("ingilizce") eklemek, kaldırmanız gereken her kelimeyi belirtmekten daha iyidir.
Led
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.