python 文字语音朗读-教你用 Python 来朗读网页
是不是有的时候懒得自己看新闻?那么不妨试试用 Python 来朗读给你听吧。
网页转换成语音,步骤无外乎:网页正文识别,获取到正文的文本内容;
文本转语音,通过接口将文本转换成语音文件;
语音文件的发声,即将语音文件读出;
1 网页正文识别
之所以用 Python,就是因为 Python 有着丰富的库,网页正文识别也不在话下。这里我尝试了readability、goose3。1.1 readability
readability 支持 Python3,使用pip install readability-lxml安装即可。
readability 使用起来也很方便:import requests
from readability import Document
response = requests.get('http://news.china.com/socialgd/10000169/20180616/32537640_all.html')
doc = Document(response.text)
print(doc.title())
但是 readability 提取到的正文内容不是文本,里面仍包含 HTML 标签。
当然也可以结合其他组件再对 HTML 进行处理,如html2text,我们这里就不再延伸,有兴趣的可以自行尝试。
1.2 goose3
Goose 本来是一个用 Java 编写的文章提取器,后来就有了 Python 实现版: goose3 。
使用起来也很方便,同时对中文支持也不错。使用pip install goose3即可安装。>>> from goose3 import Goose
>>> from goose3.text import StopWordsChinese
>>> url = 'http://news.china.com/socialgd/10000169/20180616/32537640_all.html'
>>> g = Goose({'stopwords_class': StopWordsChinese})
>>> article = g.extract(url=url)
>>> print(article.cleaned_text[:150])
北京时间6月15日23:00(圣彼得堡当地时间18:00),2018年世界杯B组一场比赛在圣彼得堡球场展开角逐,伊朗1比0险胜摩洛哥,伊朗前锋阿兹蒙半场结束前错过单刀机会,鲍哈杜兹第95分钟自摆乌
龙。这是伊朗20年来首度在世界杯决赛圈取胜。
本届世界杯,既相继出现替补便进球,贴补梅开二度以及东道主
可以看出网页正文提取效果还不错,基本满足我们的要求,可以使用!注意:goose 还有另外一个 Python2 的版本:Python-Goose,使用方法和 goose3 基本一样。
2 文本转语音
文本转语音,百度、阿里、腾讯、讯飞等都有提供 REST API 接口,阿里和腾讯的申请相对时间较长,阿里的貌似还要收费,百度和讯飞的在线申请后即可使用。
没办法,好的东西得来总是要曲折一些。其中百度的没有调用量的限制(其实默认是 200000 次/天),讯飞有每天 500 次的限制。
这里我们使用百度的 REST API 接口中的语言合成接口,一方面原因是百度的调用次数没有限制,另一方面,我大致看了下讯飞的接口文档,接口限制还是比较多的。还有就是百度提供了 REST API 的 Python 封装,使用也更方便。
2.1 baidu-aip 的使用
百度提供了 Python SDK,使用pip install baidu-aip可以直接安装。接口的使用可以参考接口文档:http://ai.baidu.com/docs#/TTS-Online-Python-SDK/top。
使用示例如下:from aip import AipSpeech
"""
你的 APPID AK SK
均可在服务控制台中的应用列表中查看。
"""
APP_ID = '你的 App ID'
API_KEY = '你的 Api Key'
SECRET_KEY = '你的 Secret Key'
client = AipSpeech(APP_ID, API_KEY, SECRET_KEY)
result = client.synthesis('你好,你在做什么', 'zh', 3, {
'vol': 5,
})
# 识别正确返回语音二进制 错误则返回dict 参照下面错误码
if not isinstance(result, dict):
with open('auido.mp3', 'wb') as f:
f.write(result)
接口参数:参数类型描述必传texString合成的文本,使用UTF-8编码,请注意文本长度必须小于1024字节是
langString语言选择,填写zh是
ctpString客户端类型选择,web端填写1是
cuidString用户唯一标识,用来区分用户,填写机器 MAC 地址或 IMEI 码,长度为60以内否
spdString语速,取值0-9,默认为5中语速否
pitString音调,取值0-9,默认为5中语调否
volString音量,取值0-15,默认为5中音量否
perString发音人选择,0为女声,1为男声,3为情感合成-度逍遥,4为情感合成-度丫丫,默认为普通女否
接口对单次传入的文本进行了限制,合成文本长度必须小于 1024 字节,如果文本长度过长,就需要进行切割处理,采用多次请求的方式,分别转换成语音文件,最后再将多个语音文件合并成一个。
2.2 文本切割
可以使用如下代码将文本分割成多个长度为 500 的文本列表# 将文本按 500 的长度分割成多个文本
text_list = [text[i:i+500] for i in range(0, len(text), 500)]
2.3 语言文件合并
我们使用 pydub 来处理生成的音频文件。使用pip install pydub即可安装。
另外还 Ubuntu 环境需要安装依赖的,使用sudo apt-get install libav-tools安装即可,而在 Windows 环境需要到 https://ffmpeg.zeranoe.com/builds/ 下载FFmpeg,并将其配置到环境变量中。
若还有问题,可以参考官网配置:https://github.com/jiaaro/pydub。# 合并音频文件
def merge_voice(file_list):
voice_dict = {}
song = None
for i,f in enumerate(file_list):
if i == 0:
song = AudioSegment.from_file(f,"mp3")
else:
# 拼接音频文件
song += AudioSegment.from_file(f,"mp3")
# 删除临时音频
os.unlink(f)
# 导出合并后的音频文件,格式为MP3格式
file_name = str(uuid.uuid1()) + ".mp3"
song.export(file_name, format="mp3")
return file_name
这里有一个测试时生成的文件,大家可以试听一下:
通过百度的接口,我们可以将文字转化成音频文件,下面的问题就是如何播放音频文件。
3 音频文件播放
网上获取到 Python 播放 wav 文件的方式由好几种,包括 pyaudio、pygame、winsound、playsound。不过测试下来,只有 playsound 成功。其他方式有兴趣的可以试下,有问题可以留言交流。
使用pip install playsound安装后即可使用。
使用也很简单:>>> from playsound import playsound
>>> playsound('/path/to/a/sound/file/you/want/to/play.mp3')说明:音频的播放需要在图形化页面下运行,因为命令行模式下,没有播放声音的出口。python page2voice.py -u "https://so.gushiwen.org/shiwenv_c244fc77f6fb.aspx"
运行后,代码就会自动解析网页并进行朗读啦。
4 总结
至此,网页到音频的转换就结束了,当然程序没有这么完美,比如中英文混合的网页解析和转换的结果就不怎么理想,但是纯中文的新闻页面效果还是不错的。
源码已上传至 GitHub,后台回复「网页」即可获取。
原文链接:https://mp.weixin.qq.com/s/-wnWOJxSaoxdpwOqjW9btg
python 文字语音朗读-教你用 Python 来朗读网页相关推荐
- python 文字语音朗读-怎么用 Python 来朗读网页 ?
是不是有的时候懒得自己看新闻?那么不妨试试用 Python 来朗读给你听吧. 网页转换成语音,步骤无外乎:网页正文识别,获取到正文的文本内容: 文本转语音,通过接口将文本转换成语音文件: 语音文件的发 ...
- VB简单播放器与python文字语音朗读
1.VB简单播放器代码 之前在某度知道上看到的一个问题 回答了一下.代码如下: 用WindowsMediaPlayer1控件和Drive dir file做了一个简单的播放器.你可以美化界面和优化代码 ...
- python界面设计-手把手教你用Python设计一个简单的命令行界面
原标题:手把手教你用Python设计一个简单的命令行界面 对 Python 程序来说,完备的命令行界面可以提升团队的工作效率,减少调用时可能碰到的困扰.今天,我们就来教大家如何设计功能完整的 Pyth ...
- 少儿python教学_如何教少儿学习Python编程
如何给少儿讲编程? 1.首先给少儿讲编程一定要简单,通俗易懂. 因为少儿接触的事务比较少,你要用形象的少儿可以接受的方式让他们理解. 2.讲编程的速度一定要慢. 因为少儿的接受能力相对较弱一些,所以要 ...
- python离线语音转文本_使用Python将语音转换为文本的方法
使用Python将语音转换为文本的方法,语音,转换为,文本,您的,麦克风 使用Python将语音转换为文本的方法 易采站长站,站长之家为您整理了使用Python将语音转换为文本的方法的相关内容. 语音 ...
- python豆瓣影评_教你用python登陆豆瓣并爬取影评
教你用python登陆豆瓣并爬取影评 一起来 日常学python 这是我的第二篇原创文章 在上篇文章爬取豆瓣电影top250后,想想既然爬了电影,干脆就连影评也爬了,这样可以看看人们评价的电影,再加上 ...
- python opencv手册_教你用Python实现5毛钱特效(给你的视频来点料)
一.前言 请务必看到最后.Python牛已经不是一天两天的事了,但是我开始也没想到,Python能这么牛.前段时间接触了一个批量抠图的模型库,而后在一些视频中找到灵感,觉得应该可以通过抠图的方式,给视 ...
- 用python做头像_教你用python下载和拼接微信好友头像图片
相信微信大家是用得再多也不过了.那么,对于python+微信,又能玩出什么新的花样呢?下面就给大家带来一个好玩的东西.用python下载所有的微信好友的头像,然后拼接成一张大图.这样,大家就可以转载到 ...
- Python安装教程-手把手教你安装python
python介绍和安装步骤 1. Python简介 Python是一种广泛使用的解释型.高级和通用的编程语言.Python支持多种编程范型,包括函数式.指令式.结构化.面向对象和反射式编程.它拥有动态 ...
最新文章
- 数据中心小母线与列头柜供配电系统的综合比较
- 勾引百度谷歌的蜘蛛爬虫
- Refused to display http localhost8080 xxx‘in a frame because it set ‘X-Frame-Options‘ to ‘DENY‘
- 比MySQL快6倍 深度解析国内首个云原生数据库POLARDB的“王者荣耀”
- Leetcode771.Jewels and Stones宝石与石头
- FioriLaunchpad.html的三个round-trip
- python:找出两个列表中相同和不同的元素(使用推导式)
- scp命令报错-bash: scp: command not found
- python基础教程菜鸟教程-Python 基础教程
- OkHttpClient源码分析(四)—— CacheInterceptor
- Python使用requests设置headers、cookies实现猫眼实时电影票房排行榜爬取
- 编程语言Python为什么这么火?
- 如何将台式计算机连接到WiFi,台式机怎么连接wifi?台式电脑连接无线网络的方法(图文)...
- 忆龙2009:梦幻魔方V1.2.1.1正式发布
- EtherCAT 之邮箱
- UML建模基础知识点
- 每日爬虫:爬百度千千音乐
- 《Android源码设计模式解析与实战》读书笔记(二十四)
- Python 数据分析——Matplotlib相关知识
- 访问学者在新加坡访学有哪些特色小吃?
热门文章
- free pascal 修改字符集,会导致 dos 不能显示 汉字。 处理方法如下
- ubuntu14.04配置中文latex完美环境(texlive+texmaker+lyx)
- 类型名称了解typename的双重意义
- update和saveOrUpdate详解
- sdcard不可执行.
- python基础学习(二)注释和算术运算符
- 树的直径【p3629】[APIO2010]巡逻
- 虚拟网络编辑器的知识和出现的一些问题(没有VMnet0或VMnet8)
- Objective-C(十八、谓语使用及实例说明)——iOS开发基础
- 黑马程序员 oc对象的方法成员变量