菜鳥學(xué)Python 2018-09-04 10:22:01 是不是有的時(shí)候懶得自己看新聞?那么不妨試試用 Python 來朗讀給你聽吧。 網(wǎng)頁轉(zhuǎn)換成語音,步驟無外乎:
01:網(wǎng)頁正文識(shí)別 之所以用 Python,就是因?yàn)?Python 有著豐富的庫,網(wǎng)頁正文識(shí)別也不在話下。這里我嘗試了 readability、goose3。 1.1 readability readability 支持 Python3,使用 pip install readability-lxml 安裝即可。 readability 使用起來也很方便: import requests 但是 readability 提取到的正文內(nèi)容不是文本,里面仍包含 HTML 標(biāo)簽。 當(dāng)然也可以結(jié)合其他組件再對(duì) HTML 進(jìn)行處理,如 html2text,我們這里就不再延伸,有興趣的可以自行嘗試。 1.2 goose3 Goose 本來是一個(gè)用 Java 編寫的文章提取器,后來就有了 Python 實(shí)現(xiàn)版: goose3 。 使用起來也很方便,同時(shí)對(duì)中文支持也不錯(cuò)。使用 pip install goose3 即可安裝。 >>> from goose3 import Goose 可以看出網(wǎng)頁正文提取效果還不錯(cuò),基本滿足我們的要求,可以使用! 注意:goose 還有另外一個(gè) Python2 的版本:Python-Goose,使用方法和 goose3 基本一樣。 02:文本轉(zhuǎn)語音 文本轉(zhuǎn)語音,百度、阿里、騰訊、訊飛等都有提供 REST API 接口,阿里和騰訊的申請(qǐng)相對(duì)時(shí)間較長(zhǎng),阿里的貌似還要收費(fèi),百度和訊飛的在線申請(qǐng)后即可使用。 沒辦法,好的東西得來總是要曲折一些。其中百度的沒有調(diào)用量的限制(其實(shí)默認(rèn)是 200000 次/天),訊飛有每天 500 次的限制。 這里我們使用百度的 REST API 接口中的語言合成接口,一方面原因是百度的調(diào)用次數(shù)沒有限制,另一方面,我看了下訊飛的接口文檔,接口限制還是比較多的。還有就是百度提供了 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 接口參數(shù): 接口對(duì)單次傳入的文本進(jìn)行了限制,合成文本長(zhǎng)度必須小于 1024 字節(jié),如果文本長(zhǎng)度過長(zhǎng),就需要進(jìn)行切割處理,采用多次請(qǐng)求的方式,分別轉(zhuǎn)換成語音文件,最后再將多個(gè)語音文件合并成一個(gè)。 2.2 文本切割 可以使用如下代碼將文本分割成多個(gè)長(zhǎng)度為 500 的文本列表 # 將文本按 500 的長(zhǎng)度分割成多個(gè)文本 2.3 語言文件合并 我們使用 pydub 來處理生成的音頻文件。使用 pip install pydub 即可安裝。 另外還 Ubuntu 環(huán)境需要安裝依賴的,使用 sudo apt-get install libav-tools 安裝即可.而在 Windows 環(huán)境需要到 https://ffmpeg./builds/ 下載 FFmpeg,并將其配置到環(huán)境變量中。 若還有問題,可以參考官網(wǎng)配置:https://github.com/jiaaro/pydub。 # 合并音頻文件 通過百度的接口,我們可以將文字轉(zhuǎn)化成音頻文件,下面的問題就是如何播放音頻文件。 03:音頻文件播放 網(wǎng)上獲取到 Python 播放 wav 文件的方式由好幾種,包括 pyaudio、pygame、winsound、playsound。不過測(cè)試下來,只有 playsound 成功。其他方式有興趣的可以試下,有問題可以留言交流。 使用 pip install playsound 安裝后即可使用。 使用也很簡(jiǎn)單: >>> from playsound import playsound 說明:音頻的播放需要在圖形化頁面下運(yùn)行,因?yàn)槊钚心J较拢瑳]有播放聲音的出口。 python page2voice.py -u "https://so.gushiwen.org/shiwenv_c244fc77f6fb.aspx" 運(yùn)行后,代碼就會(huì)自動(dòng)解析網(wǎng)頁并進(jìn)行朗讀啦。 04:總結(jié) 至此,網(wǎng)頁到音頻的轉(zhuǎn)換就結(jié)束了。當(dāng)然程序沒有這么完美,比如中英文混合的網(wǎng)頁解析和轉(zhuǎn)換的結(jié)果就不怎么理想,但是純中文的新聞頁面效果還是不錯(cuò)的。源碼已上傳至 GitHub: https://github.com/hoxis/to_voice/blob/master/page2voice.py
|
|