All Projects → mgsky1 → FG

mgsky1 / FG

Licence: Apache-2.0 License
基于Nonebot的QQ群机器人🤖️,特色功能是利用机器学习算法,基于每日聊天记录生成每日总结。可在酷Q/Mirai平台上运行

Programming Languages

python
139335 projects - #7 most used programming language

Projects that are alternatives of or similar to FG

mirai-class-notice
🥳 这是一款基于 mirai 的班级 QQ 群课程通知机器人,拥有简单的 web 管理页面,尽量实现一键安装简易操作等功能。
Stars: ✭ 25 (-66.22%)
Mutual labels:  mirai, mirai-bot, qqbot
Mirai.Net
Mirai.Net是基于mirai-api-http实现的轻量级mirai社区sdk。
Stars: ✭ 132 (+78.38%)
Mutual labels:  mirai, mirai-bot, qqbot
ABot-Graia
一个使用 Graia Ariadne 搭建的 QQ 功能性机器人。
Stars: ✭ 194 (+162.16%)
Mutual labels:  mirai, mirai-bot, qqbot
GreenOnions
一个Mirai的QQ机器人, 实现了搜图, RSS订阅转发, 根据PixivID下载原图, 翻译, setu等功能
Stars: ✭ 109 (+47.3%)
Mutual labels:  mirai-bot, qqbot, cqhttp-mirai
mirai-setu
一个mirai-console的简单的色图插件
Stars: ✭ 105 (+41.89%)
Mutual labels:  mirai, mirai-bot, qqbot
HoshinoBot-Plugins
nonebot1 RSS、B站解析、自定义回复……
Stars: ✭ 34 (-54.05%)
Mutual labels:  mirai, qqbot, nonebot
accenbot
基于Onebot-kotlin实现的QQ群聊天机器人,遵循OneBot标准。极简、高效的框架。
Stars: ✭ 17 (-77.03%)
Mutual labels:  qqbot, cqhttp-mirai
Shiro
基于OneBot协议的QQ机器人快速开发框架
Stars: ✭ 78 (+5.41%)
Mutual labels:  mirai-bot, qqbot
ColorMirai
一个基于mirai的机器人
Stars: ✭ 78 (+5.41%)
Mutual labels:  mirai, qqbot
Black-Cat-qqbot
一个qq机器人,基于graia
Stars: ✭ 16 (-78.38%)
Mutual labels:  mirai, qqbot
sagiri-bot
基于Graia Ariadne和Mirai的QQ机器人 SAGIRI-BOT
Stars: ✭ 557 (+652.7%)
Mutual labels:  mirai, qqbot
takker
一个基于Nonebot2和go-cqhttp的娱乐性qq机器人,持续维护更新中
Stars: ✭ 79 (+6.76%)
Mutual labels:  qqbot, nonebot
MShell
一个Mirai机器人插件,用来连接QQ聊天窗口和系统Shell
Stars: ✭ 23 (-68.92%)
Mutual labels:  mirai, qqbot
zhenxun bot
基于 Nonebot2 和 go-cqhttp 开发,以 postgresql 作为数据库,非常可爱的绪山真寻bot
Stars: ✭ 2,505 (+3285.14%)
Mutual labels:  qqbot, nonebot
hoshino xcw
自用的PCRBOT,基于hoshino,yobot,mirai,集合了很多插件
Stars: ✭ 233 (+214.86%)
Mutual labels:  qqbot, nonebot
commspt-bot
LittleSkin Community Support QQ bot
Stars: ✭ 21 (-71.62%)
Mutual labels:  mirai, qqbot
nonebot-plugin
一些 NoneBot 即开即用、良好兼容的插件——自定义表情包、早晚安、Vtuber今日运势等
Stars: ✭ 101 (+36.49%)
Mutual labels:  qqbot, nonebot
Ariadne
一个优雅且完备的 Python QQ 自动化框架,基于 Mirai API HTTP v2。 Powered by Graia Project.
Stars: ✭ 234 (+216.22%)
Mutual labels:  mirai, qqbot
kukubot
A bot.
Stars: ✭ 177 (+139.19%)
Mutual labels:  mirai, mirai-bot
Application
一个可自定义的,基于Graia和Mirai的集群管、功能、娱乐为一体的QQ插件式机器人
Stars: ✭ 55 (-25.68%)
Mutual labels:  mirai, qqbot

FG-Mirai

关于支持Nonebot2

现已支持nonebot2,仓库地址:FG-plugin

移植说明

  • 此版本可在Mirai+cqhttp-mirai支持下运行
  • 与酷Q不同,Mirai是在底层代码中实现了Android QQ 8.2.7客户端,不需要连接第三方服务器,能活得更久些,除非tx终止Android QQ登陆,就像塞班一样。同时支持当时酷Q pro的发图等高级功能
  • 本次移植的改动就是由链接发图修改为CQ码发图

Summary

一个基于Nonebot的QQ群每日总结生成插件,可以根据每日的聊天信息生成每日热词,并以词云方式可视化展示

Technology

这是一个简单的文本挖掘实验,首先会获取群内聊天记录进行数据预处理,包括Q号什么的进行数据脱敏。

FG的核心是一个称为TextRank的算法,它源自于Google的PageRank,基本思想采用类似投票机制来找出一篇文章的关键词,这里为了稳定性,所以是调库,最后会返回关键词+权重,权重是已经按降序排列过的,所以可以直接用来生成词云。

如果想要更深入了解TextRank算法,可以阅读这篇论文《TextRank: Bringing Order into Texts》。同时,我自己也对论文的关键词提取做了实现MyTextRankDemo.py。步骤上基本还原了论文的步骤。对于词组的匹配,由于我是使用结巴分词,可以用户自定义,所以这一步并没有按照论文实现。

自写代码运行效果如下所示:

Dependency

  • Python >= 3.7
  • nonebot >= 1.5.0 (需安装定时器插件,具体可见官方文档)
  • wordcloud >= 1.6.0
  • textrank4zh(内置)
  • CQHTTP Mirai >= 0.1.9
  • Mirai OK

Install

进入项目根目录,然后运行

pip install -r requirements.txt

Configuration

如果文件夹不存在,需自行创建

配置文件位置

  • cn/acmsmu/FG/data/config.json

词云输出位置

  • cn/acmsmu/FG/data/asssets/wc

词云原图与Mask位置

  • cn/acmsmu/FG/data/asssets/images

自定义词典位置

  • cn/acmsmu/FG/data/myDict.txt

自定义停顿词位置

  • cn/acmsmu/FG/data/stopwords.txt

config.json

下面是一个配置样例

{
    "windowSize":5,//设置TextRank算法的窗口大小,默认为5
    "keyWordLen":3,//小于此长度的词将不会被显示,默认为3
    "keyWordNum":50,//热词数量,默认50
    "fontPath":"C:/Windows/Fonts/msyh.ttc",//字体,用于生成词云
    "nonebotHost":"127.0.0.1",//Nonebot监听地址,具体可参考官方文档的“开始使用小节”
    "nonebotPort":8080,//Nonebot监听端口
    "cqhttpHost":"127.0.0.1",//CQHttp运行端口
    "cqhttpPort":5700,//CQHttp监听端口
    "groupInfo":[//群信息数组
        {
            "timer":"timer1",//定时器名称
            "beginHour":23,
            "beginMinutes":0,//beginHour和beginMinutes的意思是,FG将会在每日的23:00分播报每日总结
            "groupId":"123456"//群号
        }
    ],
    "wcImg":[//用于生成词云的图片数组
        {
            "desc":"刘慈欣",//图片描述
            "fileNameO":"lcx.jpg",//原始图片,用于展示,存放位置cn/acmsmu/FG/data/assets/images文件夹下
            "fileNameU":"lcx.png"//使用图片,即真正用来生成词云的图片,要求除了主体之外,背景为白色,存放位置cn/acmsmu/FG/data/assets/images文件夹下
        }
    ],
    "template":[{//总结模板数组,一个群要定义两个,一个正常模式,另外一个用于没有热词生成时使用,模板里出现的time,content等非数字标签请不要修改,但是位置可以随意,并没有要求要全部出现,出现其中的某些也是可以的
        "groupId":"123456",//群号
        "content":[
        {
            "0":"@所有人",
            "1":"大家好,我是FG,第五代电子计算机",
            "2":"这是FG在向群里所有成员广播:",
            "3":"欢迎每晚XX点锁定XXX群,收看由每日聊天信息自动生成的每日热词",
            "time":"收入时间为:{string}到{string},今日的热点关键词为",//time标签中一定要有两个{string},出现位置随意
            "content":"{string}",//用于显示热点关键词,建议不做改动,但是出现位置随意
            "wcImg":"今日词云:{img}",//一定要有{img}
            "wcImgDesc":"今日背景图为 {string}",//一定要有{string}
            "oriImg":"原图:{img}",//一定要有{img}
            "9":"热词生成的宗旨是为您节约时间,让您无需时时在线就能了解动态",
            "10":"如果您对此感兴趣,欢迎每晚XX点进入XXX群~再见!"
        },
        {
            "0":"@所有人",
            "1":"大家好,我是FG,第五代电子计算机",
            "2":"这是FG在向群里所有成员广播:",
            "3":"欢迎每晚XX点锁定XXX群,收看由每日聊天信息自动生成的每日热词",
            "4":"今日群里不够热闹,因此今日无热词",
            "5":"热词生成的宗旨是为您节约时间,让您无需时时在线就能了解动态",
            "6":"如果您对此感兴趣,欢迎每晚XX点进入XXX群~再见!"
        }]
    }]
}

自定义词典配置

用户可以设置自定义词典,来避免一些专有词被分词工具分割的情况。

例如:三体人是一整个词,如果不使用自定义词典,那么可能被分词工具分割成三体两个词,这是不合适的。

自定义词典的格式如下:

终产者 n // 空格前为词名,空格后为词性,由于关键词一般是名词,所以使用n(noun)

自定义停顿词配置

有时候我们聊天的时候会出现:的、吗、不然等之类的词,这些都属于没有意义的词,我们把它归结为停顿词,在仓库中已经内置了一部分停顿词,这类词不会参与到图结构的构建中,因此不会出现在最终的结果中。如果有需要可以在 stopwords.txt中修改。

Run

配置完成后,在根目录下运行

python bot.py

ScreenShots

每日总结

词云

TODO

  • 支持自定义字典

  • 将定制分支中的微软小冰聊天功能加入

Support

这个项目的开发环境由JetBrains提供,感谢对本项目的支持!

Credits

Note

FG也即Fifth Generation,第五代超级计算机,灵感来自于刘慈欣长篇科幻,《超新星纪元》

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].