Coder Social home page Coder Social logo

mgsky1 / fg Goto Github PK

View Code? Open in Web Editor NEW
100.0 1.0 9.0 4.18 MB

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

License: Apache License 2.0

Python 100.00%
nonebot textrank qqbot bot xiaoice mirai mirai-bot cqhttp-mirai

fg's Introduction

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,第五代超级计算机,灵感来自于刘慈欣长篇科幻,《超新星纪元》

fg's People

Contributors

dependabot[bot] avatar mgsky1 avatar oocococo avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar

fg's Issues

安装需求库时报错

您好,请问安装需求库时报错该怎么破(用的清华镜像源)
ERROR: Command errored out with exit status 1: 'c:\users\administrator\appdata\local\programs\python\python38\python.exe' -u -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'C:\Users\Administrator\AppData\Local\Temp\pip-install-31gcfy8w\wordcloud_93c47f8d610b4076afa38262a64e3b71\setup.py'"'"'; file='"'"'C:\Users\Administrator\AppData\Local\Temp\pip-install-31gcfy8w\wordcloud_93c47f8d610b4076afa38262a64e3b71\setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(file);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, file, '"'"'exec'"'"'))' install --record 'C:\Users\Administrator\AppData\Local\Temp\pip-record-dv83qfg4\install-record.txt' --single-version-externally-managed --compile --install-headers 'c:\users\administrator\appdata\local\programs\python\python38\Include\wordcloud' Check the logs for full command output.

无法处理消息

处理消息函数handleGroupMsg(session)在整个项目里面没有调用过,chatA.txt和chaB.txt都是空的,删除后不能自动重新创建

找不到使用json的ujson模块

我按照前面的环境要求安装完了依赖(python版本3.8,wordcloud版本1.8.0),但到了最后一步执行python bot.py的时候,出现了报错,提示找不到使用json的ujson模块,以下为报错内容:

ujson module not found, using json
Traceback (most recent call last):
  File "bot.py", line 10, in <module>
    import config
  File "C:\software\Mirai\plugins\FG-mirai\config.py", line 11, in <module>
    configuration = JsonUtils.json2Dict(os.path.join(os.getcwd(),'cn','acmsmu','FG','data','config.json'))
  File "C:\software\Mirai\plugins\FG-mirai\Utils\JsonUtils.py", line 15, in json2Dict
    jsonDict = json.loads(f.read())
  File "C:\Users\Administrator\AppData\Local\Programs\Python\Python38\lib\json\__init__.py", line 357, in loads
    return _default_decoder.decode(s)
  File "C:\Users\Administrator\AppData\Local\Programs\Python\Python38\lib\json\decoder.py", line 337, in decode
    obj, end = self.raw_decode(s, idx=_w(s, 0).end())
  File "C:\Users\Administrator\AppData\Local\Programs\Python\Python38\lib\json\decoder.py", line 353, in raw_decode
    obj, end = self.scan_once(s, idx)
json.decoder.JSONDecodeError: Invalid control character at: line 29 column 42 (char 629)

我代码水平不行,不过还是想挣扎一下,了解一下是哪里出了错误,有没有解决的办法,麻烦大佬有时间的话可以解答一下,非常感谢

无法生成总结

Prefix dict has been built successfully.
Traceback (most recent call last):
File "E:\bot\FG\cn\acmsmu\FG\DailyConclusion.py", line 94, in __generateWC
wc.to_file(os.path.join(os.getcwd(),'cn','acmsmu','FG','data','assets','wc',figName))
File "C:\Users\Administrator\AppData\Local\Programs\Python\Python38\lib\site-packages\wordcloud\wordcloud.py", line 706, in to_file
img.save(filename, optimize=True)
File "C:\Users\Administrator\AppData\Local\Programs\Python\Python38\lib\site-packages\PIL\Image.py", line 2131, in save
fp = builtins.open(filename, "w+b")
FileNotFoundError: [Errno 2] No such file or directory: 'E:\bot\FG\cn\acmsmu\FG\data\assets\wc\2021-01-1923-10-08-58.png'
Executing <Task pending name='Task-19' coro=<run_coroutine_job() running at C:\Users\Administrator\AppData\Local\Programs\Python\Python38\lib\site-packages\apscheduler\executors\base_py3.py:29> cb=[AsyncIOExecutor._do_submit_job..callback() at C:\Users\Administrator\AppData\Local\Programs\Python\Python38\lib\site-packages\apscheduler\executors\asyncio.py:39] created at C:\Users\Administrator\AppData\Local\Programs\Python\Python38\lib\site-packages\apscheduler\executors\asyncio.py:51> took 8.171 seconds

可以看出结巴分词还有算法中的连成文章部分成功了 但是WC生成失败了

FG里面如何将misfire_grace_time进行设置调整

首先很抱歉再一次打扰了大佬,之前FG运行一直报错Run time of job "handle Timer (trigger: cron [ hour ='23', minute ='0'], next run at: 2020-09-07 23:00:00 CST)" was missed by 0:00:02.962467 ,我自己看了一下,应该是nonebot计划任务功能APScheduler的问题,于是去查阅了apscheduler的文档,找到了一个解决方法Missed job executions and coalescing,此方法为增加执行程序中的线程/进程数或者将misfire_grace_time设置调整为更高的值,但是我翻遍了FG的所有配置文件,都没有找到可以修改misfire_grace_time的配置文件,所以想麻烦大佬指路一下,或者,在FG里面是否有其他的解决方法?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.