基本功能都做了一遍,因为浏览器版本兼容和效率,并未使用chromedriver这种方式,想着前期将流程打通,后面再做优化和算法去优化。受限于网络和免费服务,不然可以加入语音合成功能,整个在线文章语音播报,翻译让NLP模型来做,让懒的人更懒,哈哈哈,努力不就是为了懒么,人类的进步就是因为懒,所以才去创造噶。
-
抓取文章内容: Medium的https://medium.com/_/graphql接口 并发抓取文章内容列表。然后根据clapCount排序,获取top10. 在并发去获取这10个文章的内容并解析,形成用于翻译的数据列表。
-
使用翻译服务翻译内容: 考虑使用一些在线翻译服务的 API,百度翻译 API,tps较低,后续考虑本地量化模型来提供服务。
-
将翻译后的内容保存成 PDF 文件: 使用reportlab,并发的将翻译后的内容,以及标题排版后 写入 PDF 文件。fpdf、docx2pdf都有点坑~
-
生成语音文件: 使用智能模型为每个文章生成语音文件,可以在线播放,也可以下载,让用户在眼睛忙的时候,可以用耳朵听。
-
打包成 ZIP 文件: 使用 zipfile将生成的 PDF 文件打包成一个 ZIP 文件。
-
界面集成 使用gradio构建简单界面,多线程交互的时候gradio、webbrowser和streamlit都试过,花了好些时间。
- 爬取medium网页信息(分析其后端接口,模拟请求获取数据,再解析数据),rank,top10
- 获取文章段落和标题(同上)
- 翻译-百度API(限制多,考虑到模型推理性能、成本、网络、幻觉和指令遵循约束问题,还是API快一点)
- 生成pdf,目前没把图片搞进去,其实也简单
- 为文章生成音频文件
- 打zip包
- 界面展示下载
- 并发和优化
- medium网页目前取了100页的top10,后续要找到更快的方式,适当使用算法提升性能。
- 翻译API需要换掉
- pdf目前没把图片搞进去,其实也简单,就是懒
graph TB;
ui--点击生成-->gen_top10_articles并发取文章列表排序取top
gen_top10_articles并发取文章列表排序取top-->get_article_paragraph并发取文章段落
get_article_paragraph并发取文章段落--queue解耦-->translate_consumer多线程消费
translate_consumer多线程消费-->gen_pdf_by_reportlab多线程生成pdf
gen_pdf_by_reportlab多线程生成pdf-->gen_tts生成语音文件
gen_tts生成语音文件-->zip_files打包
zip_files打包-->界面展示download下载和音频播放
环境:python 3.10
操作
安装依赖
pip install reportlab gradio zipfile
运行
python ui.py
注意,翻译api 替换为 自己的id和密钥。