cod*_*joy 2 python nlp stop-words word-cloud
我想在我的词云中排除“The”、“The”和“My”。我正在使用 python 库“wordcloud”,如下所示,并使用这 3 个额外的停用词更新 STOPWORDS 列表,但 wordcloud 仍然包含它们。我需要更改什么才能排除这三个词?
我导入的库是:
import numpy as np
import pandas as pd
from wordcloud import WordCloud, STOPWORDS
import matplotlib.pyplot as plt
Run Code Online (Sandbox Code Playgroud)
我已经尝试在下面的 STOPWORDS 集中添加元素,但是,即使成功添加了单词,wordcloud 仍然显示我添加到 STOPWORDS 集中的 3 个单词:
len(STOPWORDS)
输出:192
然后我跑了:
STOPWORDS.add('The')
STOPWORDS.add('They')
STOPWORDS.add('My')
Run Code Online (Sandbox Code Playgroud)
然后我跑了:
len(STOPWORDS)
输出:195
我正在运行 python 版本 3.7.3
我知道我可以在运行 wordcloud 之前修改文本输入以删除 3 个单词(而不是尝试修改 WordCloud 的 STOPWORDS 集),但我想知道 WordCloud 是否存在错误,或者我是否没有正确更新/使用 STOPWORDS?
Wordcloud 的默认设置是collocations=True,因此云中包含两个相邻单词的频繁短语 - 并且对于您的问题很重要,搭配使用停用词的删除是不同的,因此例如“谢谢”是一个有效的搭配并且可能即使“你”在默认停用词中,也会出现在生成的云中。只含有禁用词搭配被删除。
听起来不无道理的理由是,如果在构建搭配列表之前删除停用词,那么例如“非常感谢”将提供“非常感谢”作为搭配,我绝对不想要。
因此,为了让您的停用词按照您的预期工作,即云中根本没有停用词,您可以collocations=False像这样使用:
my_wordcloud = WordCloud(
stopwords=my_stopwords,
background_color='white',
collocations=False,
max_words=10).generate(all_tweets_as_one_string)
Run Code Online (Sandbox Code Playgroud)
更新:
The文本中的蛋在被删除时不会the被删除 - 这就是为什么@Balaji Ambresh代码有效,您会看到云中没有上限。这可能是 Wordcloud 中的一个缺陷,不确定。但是,The在停用词中添加 eg不会影响这一点,因为停用词总是小写,无论搭配如何 True/False这在源代码中都是可见的:-)
例如,collocations=True我得到的默认值:
代码:
from wordcloud import WordCloud
from matplotlib import pyplot as plt
text = "The bear sat with the cat. They were good friends. " + \
"My friend is a bit bear like. He's lovely. The bear, the cat, the dog and me were all sat " + \
"there enjoying the view. You should have seen it. The view was absolutely lovely. " + \
"It was such a lovely day. The bear was loving it too."
cloud = WordCloud(collocations=False,
background_color='white',
max_words=10).generate(text)
plt.imshow(cloud, interpolation='bilinear')
plt.axis('off')
plt.show()
Run Code Online (Sandbox Code Playgroud)