看着wordcloud.py,如果stopwords参数为None,则它使用内置的stopwords集-因此您不会禁止使用stopwords。尝试用stopwords=set()调用它。在
中的内置标记化wordcloud.py将一个单词识别为一系列字母数字字符(因此fa-so被拆分为fa-so),忽略大小写,同时合并简单的复数(例如dogs到dog)并忽略单个数字。如果您想绕过这个问题,您需要构建一个元组列表,每个元组都包含一个单词及其频率,然后调用WordCloud.generate_from_频率(频率)。在
我无法安装wordcloud,但在wordfreq函数中使用\S+(即,它将连续的非空白字符识别为一个单词)进行的这种简化标记化绝对有效:import re
from operator import itemgetter
words = "do do do do do do do do do do re re re re re mi mi fa-so fa fa fa fa fa fa fa fa fa-so fa-so fa-so fa-so fa-so so la ti do"
item1 = itemgetter(1)
def wordfreq(text):
d = {}
for word in re.findall(r"\S+", text):
# for word in re.findall(r"\w[\w']*", text):
if word.isdigit():
continue
word_lower = word.lower()
# Look in lowercase dict.
if word_lower in d:
d2 = d[word_lower]
else:
d2 = {}
d[word_lower] = d2
# Look in any case dict.
d2[word] = d2.get(word, 0) + 1
d3 = {}
for d2 in d.values():
# Get the most popular case.
first = max(d2.items(), key=item1)[0]
d3[first] = sum(d2.values())
return d3.items()
freqs = wordfreq(words)
print freqs
# prints: [('do', 11), ('la', 1), ('fa-so', 6), ('mi', 2), ('fa', 8), ('so', 1), ('ti', 1), ('re', 5)]
# pass freqs to WordCloud.generate_from_frequencies()
# maybe something like:
# wordcloud = WordCloud(ranks_only = True,stopwords=set()).generate_from_frequencies(freqs)
您可以查看的源代码wordcloud.py-您可以直接或更安全地修改它,并且可以像这个例子一样扩展/修改行为。在
本文探讨了如何在wordcloud.py中自定义停用词集,并介绍了如何处理词频分析,包括词的标准化和复数形式的合并。通过使用正则表达式进行标记化,并创建单词频率字典,可以避免内置标记化带来的问题。示例代码展示了如何生成频率字典并将其传递给WordCloud的generate_from_frequencies方法,以生成更精确的词云。

被折叠的 条评论
为什么被折叠?



