在群组管理中,了解成员最常讨论的话题能有效提升社群运营质量。词云统计通过可视化高频词汇,让群聊热点一目了然。本文将为你的Telegram机器人添加词云统计功能,实现自动收集消息、生成词云并回复图片的完整流程。
一、准备工作:创建Telegram机器人与获取Token
在Telegram中与官方机器“@BotFather”对话,发送/newbot指令,按提示设置机器人昵称和用户名。创建成功后,你会获得一个API Token,格式如123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11,请妥善保存。
二、安装Python依赖库
本教程使用Python编写,需要安装以下库:
python-telegram-bot:与Telegram API交互的官方异步库。jieba:中文分词库,用于中文词云统计。wordcloud:生成词云图片。Pillow:图像处理依赖。
执行命令安装:
pip install python-telegram-bot jieba wordcloud Pillow三、编写词云统计机器人代码
下面是一个完整的示例机器人,它监听群聊消息并保存文本,当收到/wordcloud指令时生成词云图片发送给群聊。
import re
import io
from collections import Counter
from telegram import Update
from telegram.ext import ApplicationBuilder, CommandHandler, ContextTypes, MessageHandler, filters
import jieba
from wordcloud import WordCloud
# 按群组ID存储消息
messages_dict = {}
async def handle_message(update: Update, context: ContextTypes.DEFAULT_TYPE):
chat_id = update.effective_chat.id
text = update.message.text
if not text or text.startswith('/'):
return
messages_dict.setdefault(chat_id, []).append(text)
async def wordcloud(update: Update, context: ContextTypes.DEFAULT_TYPE):
chat_id = update.effective_chat.id
if chat_id not in messages_dict or not messages_dict[chat_id]:
await update.message.reply_text("还没有足够的消息,先去聊聊天吧~")
return
text = ' '.join(messages_dict[chat_id])
# 中文分词
words = jieba.cut(text)
# 简单停用词表,可自定义扩充
stopwords = {'的', '了', '是', '我', '你', '他', '这', '那', '就', '都', '也', '很', '在', '有', '和', '啊', '吧', '吗', '呢'}
filtered = [w for w in words if w.strip() and w not in stopwords and len(w) > 1]
freq = Counter(filtered)
if not freq:
await update.message.reply_text("没有统计到有效词语。")
return
# 生成词云图片
wc = WordCloud(font_path='simhei.ttf', width=800, height=600, background_color='white')
wc.generate_from_frequencies(freq)
img = wc.to_image()
buf = io.BytesIO()
img.save(buf, format='PNG')
buf.seek(0)
await update.message.reply_photo(photo=buf, caption="群聊词云统计")
messages_dict[chat_id].clear()
if __name__ == '__main__':
app = ApplicationBuilder().token("YOUR_TOKEN").build()
app.add_handler(MessageHandler(filters.TEXT & ~filters.COMMAND, handle_message))
app.add_handler(CommandHandler('wordcloud', wordcloud))
print("Bot running...")
app.run_polling()注意:请将YOUR_TOKEN替换为你的机器人Token。代码中的simhei.ttf是黑体字体文件,用于词云显示中文,需提前下载并放置在脚本同目录下(或指定系统字体路径)。
四、运行机器人并测试
保存代码为wordcloud_bot.py,在终端执行python wordcloud_bot.py启动机器人。将机器人加入群聊并设置为管理员(建议),然后让群成员发送一些消息。当消息积累到一定数量后,在群里输入/wordcloud,机器人就会生成词云图片并发送。
五、扩展与优化建议
- 定时生成:使用
JobQueue实现每日固定时间自动生成词云,无需手动触发。 - 停用词优化:针对行业或群聊主题定制停用词表,提高统计准确性。
- 多群组支持:上述代码已按
chat_id区分,可同时服务于多个群组。 - 隐私保护:建议在统计后自动清除消息记录,避免存储过多个人数据。
- 性能提升:若群聊消息量极大,可改用数据库存储消息,并异步处理分词与图片生成。
总结
通过以上步骤,你已成功为Telegram机器人添加词云统计功能。这不仅让群聊热点可视化,还能为内容策划和用户运营提供数据支持。你可以在此基础上继续扩展,比如生成词频趋势、导出分析报告等。现在就动手打造你的专属群聊分析助手吧!