我们可以从nltk.corpus 导入stopwords,如下所示。有了这个,我们排除了 Python 的列表理解和 pandas.DataFrame.apply 的停用词。
# Import stopwords with nltk.
from nltk.corpus import stopwords
stop = stopwords.words('english')
pos_tweets = [('I love this car', 'positive'),
('This view is amazing', 'positive'),
('I feel great this morning', 'positive'),
('I am so excited about the concert', 'positive'),
('He is my best friend', 'positive')]
test = pd.DataFrame(pos_tweets)
test.columns = ["tweet","class"]
# Exclude stopwords with Python's list comprehension and pandas.DataFrame.apply.
test['tweet_without_stopwords'] = test['tweet'].apply(lambda x: ' '.join([word for word in x.split() if word not in (stop)]))
print(test)
# Out[40]:
# tweet class tweet_without_stopwords
# 0 I love this car positive I love car
# 1 This view is amazing positive This view amazing
# 2 I feel great this morning positive I feel great morning
# 3 I am so excited about the concert positive I excited concert
# 4 He is my best friend positive He best friend
也可以使用pandas.Series.str.replace排除。
pat = r'\b(?:{})\b'.format('|'.join(stop))
test['tweet_without_stopwords'] = test['tweet'].str.replace(pat, '')
test['tweet_without_stopwords'] = test['tweet_without_stopwords'].str.replace(r'\s+', ' ')
# Same results.
# 0 I love car
# 1 This view amazing
# 2 I feel great morning
# 3 I excited concert
# 4 He best friend
如果不能导入停用词,可以如下下载。
import nltk
nltk.download('stopwords')
另一种回答方法是从sklearn.feature_extraction 导入text.ENGLISH_STOP_WORDS。
# Import stopwords with scikit-learn
from sklearn.feature_extraction import text
stop = text.ENGLISH_STOP_WORDS
请注意,scikit-learn 停用词和 nltk 停用词中的单词数量不同。