如何使用 nltk 或 python 删除停止单词

所以我有一个数据集,我想删除停止使用的话

stopwords.words('english')

我正在纠结如何在我的代码中使用它来简单地删除这些单词。我已经有一个从这个数据集的单词列表,我挣扎的部分是比较这个列表和删除停止的单词。 感谢你的帮助。

244284 次浏览

我假设您有一个单词列表(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
from nltk.corpus import stopwords
# ...
filtered_words = [word for word in word_list if word not in stopwords.words('english')]

你也可以做一个 set diff,例如:

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

你可以使用这个函数,你应该注意,你需要降低所有的单词

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

使用 过滤器:

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

要排除包括 nltk 停止词在内的所有类型的停止词,可以这样做:

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]

使用 短信清洁工库从数据中删除停顿词。

点击这个链接: 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

使用以上代码删除停止词。

为此,有一个非常简单的轻量级 Python 软件包 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

下面是我对这个问题的看法,以防你想立即将答案输入一个字符串(而不是过滤后的单词列表) :

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

如果您的数据存储为 Pandas DataFrame,您可以使用来自 textero 的 remove_stopwords,它通过 违约使用 NLTK 停止词列表。

import pandas as pd
import texthero as hero
df['text_without_stopwords'] = hero.remove_stopwords(df['text'])
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)

我给你们举个例子 首先,我从数据框架(twitter_df)中提取文本数据,进一步处理如下

     from nltk.tokenize import word_tokenize
tweetText = twitter_df['text']

然后使用以下方法进行标记

     from nltk.tokenize import word_tokenize
tweetText = tweetText.apply(word_tokenize)

然后,删除停止的话,

     from nltk.corpus import stopwords
nltk.download('stopwords')


stop_words = set(stopwords.words('english'))
tweetText = tweetText.apply(lambda x:[word for word in x if word not in stop_words])
tweetText.head()

我觉得这个能帮到你

虽然这个问题有点老,但这里有一个值得一提的新库,它可以执行额外的任务。

在某些情况下,您不希望只删除停止单词。相反,您希望在文本数据中找到停止词并将其存储在一个列表中,以便能够找到数据中的噪音并使其更具交互性。

这个库名为 'textfeatures',你可以按以下方式使用它:

! pip install textfeatures
import textfeatures as tf
import pandas as pd

例如,假设您有以下一组字符串:

texts = [
"blue car and blue window",
"black crow in the window",
"i see my reflection in the window"]


df = pd.DataFrame(texts) # Convert to a dataframe
df.columns = ['text'] # give a name to the column
df

现在,调用 stop words ()函数并传递所需的参数:

tf.stopwords(df,"text","stopwords") # extract stop words
df[["text","stopwords"]].head() # give names to columns

结果将是:

    text                                 stopwords
0   blue car and blue window             [and]
1   black crow in the window             [in, the]
2   i see my reflection in the window    [i, my, in, the]

如您所见,最后一列包含该文档(记录)中的停止字。