python - Wordcloud 仅适用于表情符号
问题描述
我有一个充满表情符号的文本。
import matplotlib.pyplot as plt
from wordcloud import WordCloud
wordcloud = WordCloud().generate(text)
plt.imshow(wordcloud)
plt.axis("off")
plt.show()
当我尝试像上面的代码那样为那些表情符号获取 wordcloud 时,它会返回如下错误:
ValueError: We need at least 1 word to plot a word cloud, got 0.
我认为 wordcloud 库无法读取表情符号。我想得到这样的输出(当然有表情符号):
任何人都知道如何解决这个问题?
解决方案
如果您想创建表情符号的文字云,您首先必须获得支持表情符号的字体,例如Symbola,并将otf
orttf
文件放在您的工作目录中。
然后你需要安装所需的库:
pip install emojis matplotlib wordcloud
之后,您可以使用此代码创建包含表情符号的 Wordcloud。
from wordcloud import WordCloud
from collections import Counter
import matplotlib.pyplot as plt
import emojis
class EmojiCloud:
def __init__(self, font_path='Symbola.otf'):
self.font_path = font_path
self.word_cloud = self.initialize_wordcloud()
self.emoji_probability = None
def initialize_wordcloud(self):
return WordCloud(font_path=self.font_path,
width=2000,
height=1000,
background_color='white',
random_state=42,
collocations=False)
def color_func(self, word, font_size, position, orientation, random_state=None,
**kwargs):
hue_saturation = '42, 88%'
current_emoji_probability = self.emoji_probability[word]
if current_emoji_probability >= 0.10:
opacity = 50
else:
opacity = 75 - current_emoji_probability/0.2 * 5
return f"hsl({hue_saturation},{opacity}%)"
def generate(self, text):
emoji_frequencies = Counter(emojis.iter(text))
total_count = sum(emoji_frequencies.values())
self.emoji_probability = {emoji: count/total_count for emoji, count in emoji_frequencies.items()}
wc = self.word_cloud.generate_from_frequencies(emoji_frequencies)
plt.figure(figsize=(20,10))
plt.imshow(wc.recolor(color_func=self.color_func, random_state=42))
plt.axis("off")
此代码可按如下方式使用:
text = 'a lot of emojis '
emoji_cloud = EmojiCloud(font_path='./Symbola.otf')
emoji_cloud.generate(text)
推荐阅读
- qt - 无法在 QML 中设置文本字段以填充宽度
- javascript - 使用 AJAX 更新返回错误并直接进入路由显示“MethodNotAllowedHttpException No message”
- r - 重命名文件,使其包含日期
- angular - 我可以在 Ionic/Angular 的 HTML 模板中访问当前组件吗?
- node.js - Google Actions MediaResponse 回调在 iPhone Google Assistant 应用程序上不起作用,在模拟器和 Google Home Mini 上工作
- android - 我无法读取/写入 NFC 标签 (NfcV)
- typescript - 打字稿无法设置未定义的属性
- python - pandas_datareader "无法导入名称数据"
- javascript - 如何在危险的SetInnerHTML中使用组件
- python - sqlalchemy 一对多没有唯一约束