菜单

电动查询天气并贯彻语音播发,落成网页自动化朗读

2019年5月4日 - 美高梅手机版游戏
电动查询天气并贯彻语音播发,落成网页自动化朗读

原题目:如何选拔 Python 落成网页自动化朗读?

1、写在前方

此前写过一篇用Python发送天气预告邮件的博客,可是因为要手动输入城市称号,还要打开邮箱技巧知晓天气意况,这也太辛勤了。于是乎,有了那1篇博客,这一次笔者要做的正是用Python获取本机IP地址,并基于这一个IP地址获取物理地方约等于本人所在的城郭称号,然后用事先的方法得以完成查询天气,再利用百度语音得到天气预告的mp5文本,最终播放,那样是或不是就很有利了吧?

Python TF-IDF总结十0份文书档案关键词权重

一,TF-IDF介绍

 

  TF-IDF(Term Frequency–Inverse Document
Frequency)是壹种用于资讯检索与公事开采的常用加权技能。TF-IDF是1种总计方法,用以评估三个字词对于三个文书集或三个语言材料库中的个中一份文件的最首要程度。字词的最重要随着它在文书中冒出的次数成正比增添,但与此同时会趁着它在语言材料库中现身的频率成反比降低。TF-IDF加权的各类款式常被搜寻引擎应用,作为文件与用户查询之间相关程度的衡量或评级。

 

  TF-IDF的机要驰念是:假如有个别词或短语在1篇文章中现身的频率TF高,并且在任何文章中很少出现,则以为此词只怕短语具备很好的连串区分技艺,适合用来分类。TF-IDF实际上是:TF
* IDF。

 

  (一)词频(Term
Frequency,TF)指的是某三个加以的辞藻在该公文中出现的频率。即词w在文书档案d中出现的次数count(w,
d)和文书档案d中总词数size(d)的比率。

 

tf(w,d) = count(w, d) / size(d)

  那么些数字是对词数(term
count)的归1化,防止卫它偏向长的文书。(同七个词语在长文件里大概会比短文件有更加高的词数,而不管该词语首要与否。)

 

  (贰)逆向文件频率(Inverse Document
Frequency,IDF)是1个用语广泛首要性的胸怀。某1特定词语的IDF,能够由总文件数量除以包涵该词语之文件的数码,再将赚取的商取对数获得。即文书档案总量n与词w所出现文件数docs(w,
D)比值的对数。  

 

idf = log(n / docs(w, D))

  TF-IDF依照 tf 和 idf
为每2个文书档案d和由入眼词w[1]…w[k]组成的查询串q总计三个权值,用于表示查询串q与文书档案d的相配度:

 

tf-idf(q, d)

= sum { i = 1..k | tf-idf(w[i], d) }

= sum { i = 1..k | tf(w[i], d) * idf(w[i]) }

  某1一定文件内的高词语频率,以及该词语在壹切文件会集中的低文件频率,能够生出出高权重的TF-IDF。由此,TF-IDF倾向于过滤掉常见的用语,保留首要的用语。

 

  关于TF-IDF的详细介绍和例子,风乐趣的同班能够看那一篇博客。
 下边首要分享TF-IDF在Python的哪些接纳。

 

  二,Python中计算TF-IDF

 

  在Python中,scikit-learn包下有总结TF-IDF的api,其意义也很不利。首先得设置Scikit-clearn。分歧系统装置请看:

 

  本机情形:linux(ubuntu) 陆13人,python二.7.陆

 

  一. 装置scikit-learn包(先安装正视包,再设置sklearn)

 

sudo apt-get install build-essential python-dev python-setuptools \

                     python-numpy python-scipy \

                     libatlas-dev libatlas3gf-base

sudo apt-get install python-sklearn

  或许经过pip举办设置,pip是二个给python用的挺不错的设置工具。 

 

sudo apt-get install python-pip 

sudo pip install -U scikit-learn

  核查是或不是安装成功,在terminal里面输入

 

pip list

  会列出pip安装的有所东西,假若内部有sklearn那1项,则设置成功。

 

  2. 安装jieba分词包

 

  由于总计TF-IDF是对分词结果开始展览测算,所以这里供给采取jieba汉语分词。有关结巴分词的选用,能够倾心一篇博文:Python
结巴分词

 

sudo pip install jieba 

  3. 计算TF-IDF

 

  scikit-learn包举行TF-IDF分词权重总计主要利用了三个类:CountVectorizer和TfidfTransformer。其中

 

  CountVectorizer是通过fit_transform函数将文件中的词语转变为词频矩阵,矩阵元素a[i][j]
表示j词在第i个公文下的词频。即各类词语出现的次数,通过get_feature_names()可观察全体文件的首要字,通过toarray()可看出词频矩阵的结果。简举个例子下:

 

复制代码

>>> from sklearn.feature_extraction.text import
CountVectorizer

>>> vectorizer = CountVectorizer()

>>> corpus = [

…     ‘This is the first document.’,

…     ‘This is the second second document.’,

…     ‘And the third one.’,

…     ‘Is this the first document?’,

… ]

>>> X = vectorizer.fit_transform(corpus)

>>> X.toarray()           

array([[0, 1, 1, 1, 0, 0, 1, 0, 1],

       [0, 1, 0, 1, 0, 2, 1, 0, 1],

       [1, 0, 0, 0, 1, 0, 1, 1, 0],

       [0, 1, 1, 1, 0, 0, 1, 0, 1]]…)

>>> vectorizer.get_feature_names()

([‘and’, ‘document’, ‘first’, ‘is’, ‘one’, ‘second’, ‘the’, ‘third’,
‘this’])

复制代码

  TfidfTransformer是计算vectorizer中每一个词语的tf-idf权值,用法如下:

 

复制代码

>>> from sklearn.feature_extraction.text import
CountVectorizer

>>> transformer = TfidfTransformer()

>>> counts = [[3, 0, 1],

…           [2, 0, 0],

…           [3, 0, 0],

…           [4, 0, 0],

…           [3, 2, 0],

…           [3, 0, 2]]

 

>>> tfidf = transformer.fit_transform(counts)

>>> tfidf.toarray()                        

array([[ 0.85…,  0.  …,  0.52…],

       [ 1.  …,  0.  …,  0.  …],

       [ 1.  …,  0.  …,  0.  …],

       [ 1.  …,  0.  …,  0.  …],

       [ 0.55…,  0.83…,  0.  …],

       [ 0.63…,  0.  …,  0.77…]])

复制代码

  关于函数的切切实实表达,请看官方表达文书档案:scikit-learn
common-vectorizer-usage

 

  这里作者管理的是对100份文书档案进行分词,然后实行TF-IDF的估量,其效率十分好。

 

复制代码

import os

import jieba

import jieba.posseg as pseg

import sys

import string

from sklearn import feature_extraction

from sklearn.feature_extraction.text import TfidfTransformer

from sklearn.feature_extraction.text import CountVectorizer

reload(sys)

sys.setdefaultencoding(‘utf8’)

#获取文件列表(该目录下放着100份文书档案)

def getFilelist(argv) :

    path = argv[1]

    filelist = []

    files = os.listdir(path)

    for f in files :

        if(f[0] == ‘.’) :

            pass

        else :

            filelist.append(f)

    return filelist,path

#对文书档案举办分词管理

def fenci(argv,path) :

    #保留分词结果的目录

    sFilePath = ‘./segfile’

    if not os.path.exists(sFilePath) : 

        os.mkdir(sFilePath)

    #读取文书档案

    filename = argv

    f = open(path+filename,’r+’)

    file_list = f.read()

    f.close()

    

    #对文档进行分词管理,接纳暗中认可方式

    seg_list = jieba.cut(file_list,cut_all=True)

 

    #对空格,换行符举办拍卖

    result = []

    for seg in seg_list :

     seg = ”.join(seg.split())

        if (seg != ” and seg != “\n” and seg != “\n\n”) :

            result.append(seg)

 

   
#将分词后的结果用空格隔离,保存至地点。举例”笔者过来Hong Kong北大东军事和政治大学学”,分词结果写入为:”我来到 香江 哈工业大学东军事和政院学”

    f = open(sFilePath+”/”+filename+”-seg.txt”,”w+”)

    f.write(‘ ‘.join(result))

    f.close()

 

#读取十0份已分词好的文书档案,进行TF-IDF总结

def Tfidf(filelist) :

  path = ‘./segfile/’

    corpus = []  #存取100份文档的分词结果

    for ff in filelist :

        fname = path + ff

        f = open(fname,’r+’)

        content = f.read()

        f.close()

        corpus.append(content)    

 

    vectorizer = CountVectorizer()    

    transformer = TfidfTransformer()

    tfidf =
transformer.fit_transform(vectorizer.fit_transform(corpus))

    

    word = vectorizer.get_feature_names() #有着文件的首要性字

    weight = tfidf.toarray()              #对应的tfidf矩阵

    

    sFilePath = ‘./tfidffile’

    if not os.path.exists(sFilePath) : 

        os.mkdir(sFilePath)

 

    # 这里将每份文档词语的TF-IDF写入tfidffile文件夹中保留

    for i in range(len(weight)) :

     print u”——–Writing all the tf-idf in the”,i,u” file into
“,sFilePath+’/’+string.zfill(i,5)+’.txt’,”——–“

        f = open(sFilePath+’/’+string.zfill(i,5)+’.txt’,’w+’)

        for j in range(len(word)) :

            f.write(word[j]+”    “+str(weight[i][j])+”\n”)

        f.close()

            

if __name__ == “__main__” : 

    (allfile,path) = getFilelist(sys.argv)

  for ff in allfile :

        print “Using jieba on “+ff

        fenci(ff,path)

 

    Tfidf(allfile)

TF-IDF总计十0份文书档案关键词权重
一,TF-IDF介绍 TF-IDF(Term FrequencyInverse Document
Frequency)是一种用于资源音讯检索与公事发掘的常用加权技能。…

图片 1

二、具体步骤

这一次有多个py文件:get_ip.py,get_wather.py,get_mp3.py和main.py。其中get_ip.py达成了获得本机ip地址和物理地点,get_wather.py落成了根据物理地点查询天气,get_mp3.py兑现了调用百度语音API把文件转化成MP5文件,main.py是大家要求周转的py文件。这里由于查询天气用的是事先的法门,所以就无需赘述了,首要说一下get_ip.py和get_mp3.py。

作者 | hoxis

get_ip.py

要获取本机IP,这里有2个很轻松的格局,正是开辟那几个网页:

 1 """ 2 Version: Python3.5 3 Author: OniOn 4 Site: http://www.cnblogs.com/TM0831/ 5 Time: 2019/2/9 16:46 6 """ 7 import re 8 import requests 9 10 11 # 获取本机IP和地理位置12 def get_ip():13     res = requests.get("http://www.ip.cn")14     result = re.findall("<p>您现在的 IP:<code></code></p><p>所在地理位置:<code></code>", res.text)15     ip, address = "", ""16     if len:17         ip = result[0][0]  # IP地址18         address = result[0][1].split(' ')[0]  # 地理位置19     else:20         print("Error!")21         exit()22     return ip, address

责编 | 郭芮

get_mp3.py

那边需求利用百度云,未有账号的内需先挂号一下,然后寻找一下百度语音,再次创下制几个选择,如下:

图片 2

此地AppID、API Key和Secret
Key在背后都要求接纳,具体运用方式参见官方文书档案。这里还须求设置四个第一方库:baidu-aip,能够动用pip
install baidu-aip举办下载安装。

上边是1个调用百度语音接口的言传身教:

 1 from aip import AipSpeech 2  3 """ 你的 APPID AK SK """ 4 APP_ID = '你的 App ID' 5 API_KEY = '你的 Api Key' 6 SECRET_KEY = '你的 Secret Key' 7  8 client = AipSpeech(APP_ID, API_KEY, SECRET_KEY) 9 result = client.synthesis('你好百度', 'zh', 1, {10     'vol': 5,11 })12 13 # 识别正确返回语音二进制 错误则返回dict14 if not isinstance(result, dict):15     with open('auido.mp3', 'wb') as f:16         f.write

中间synthesis方法的各参数含义如下:

图片 3

有了那么些事例,做起来就大约多了,只须要将天气预先报告的文书传入进去就行了,然后我们能够依据本人喜好改造一下任何参数。代码如下:

 1 """ 2 Version: Python3.5 3 Author: OniOn 4 Site: http://www.cnblogs.com/TM0831/ 5 Time: 2019/2/9 17:53 6 """ 7 from aip import AipSpeech 8  9 # 你的APP_ID,API_KEY,SECRET_KEY10 APP_ID = ""11 API_KEY = “"12 SECRET_KEY = ""13 14 15 # 获取语音文件16 def get_mp3:17     client = AipSpeech(APP_ID, API_KEY, SECRET_KEY)18 19     result = client.synthesis(text, 'zh', 1, {"spd": 4, "vol": 6})20 21     # 识别正确返回语音二进制,错误则返回dict22     if not isinstance(result, dict):23         with open('weather.mp3', 'wb') as f:24             f.write25     else:26         print("Error!")27         exit()

是或不是有的时候懒得自个儿看资源音信?那么无妨试试用
Python 来朗读给你听吧。

3、运营结果

首先是的代码运转的结果,如下图:

图片 4

接下来会生成一个weather.mp3文件:

图片 5

最终会播放那一个mp3文书。

壹体化代码已上传到GitHub!

网页转变来语音,步骤无外乎:

网页正文识别

因此用 Python,正是因为 Python
有着丰硕的库,网页正文识别也何足挂齿。这里自个儿尝试了
readability、goose叁。

1.1 readability

readability 帮衬 Python叁,使用 pip
install readability-lxml 安装就可以。

readability 使用起来也很便利:

importrequests

fromreadability importDocument

response = requests.get(
”)

doc = Document(response.text)

print(doc.title())

不过 readability
提取到的正文内容不是文本,里面仍包括 HTML 标签。

自然也能够整合别的零件再对 HTML
举办拍卖,如
html2text,我们那边就不再延长,有意思味的能够自动尝试。

1.2 goose3

Goose 本来是3个用 Java
编写的篇章提取器,后来就有了 Python 达成版: goose三 。

接纳起来也很便利,同时对汉语帮助也不利。使用
pip install goose三 就可以安装。

>>> from goose3 import Goose

>>> from goose3.text import StopWordsChinese

>>> url =

>>> g = Goose({ ‘stopwords_class’: StopWordsChinese})

>>> article = g.extract(url=url)

>>> print(article.cleaned_text[ :150])

新加坡时间 四月 110日 二三:00(波尔图本土时间 1八:00),
二〇一八年FIFA World CupB组一场交锋在格鲁斯哥球馆实行大战,伊朗 一比
0险胜摩洛哥,伊朗先锋阿兹蒙全场结束前失去单刀机会,鲍哈杜兹第九陆分钟自摆乌

龙。那是伊朗 20年来首度在世界杯决赛圈完胜。

本届FIFA World Cup,既相继现出板凳人员便进球,贴补梅开二度以及主人

能够见到网页正文提取效果还不易,基本满意我们的渴求,能够利用!

留神:goose 还有别的贰个 Python二的本子:Python-Goose,使用办法和 goose三 基本等同。

文件转语音

文本转语音,百度、Ali、腾讯、讯飞等都有提供
REST API
接口,阿里和腾讯的报名绝对时间较长,Ali的形似还要收取费用,百度新浪飞的在线申请后即可使用。

不能够,好的东西得来一连要波折一些。在那之中国百货集团度的未有调用量的限制(其实私下认可是
两千00 次/天),讯飞有天天 500 次的限量。

那边我们使用百度的 REST API
接口中的语言合成接口,1方面原因是百度的调用次数未有限制,另一方面,小编看了下讯飞的接口文书档案,接口限制依然相比多的。还有就是百度提供了
REST API 的 Python 封装,使用也更利于。

2.1 baidu-aip 的使用

百度提供了 Python SDK,使用 pip install
baidu-aip
能够一向设置。接口的选取能够参见接口文书档案:

行使示比如下:

fromaip importAipSpeech

“””

你的 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’, 三, {

‘vol’: 5,

})

# 识别精确重临语音二进制 错误则赶回dict 参照下边错误码

ifnotisinstance(result, dict):

withopen( ‘auido.mp3’, ‘wb’) asf:

f.write(result)

接口参数:

参数 类型 描述 必传
tex String 合成的文本,使用UTF-8编码,请注意文本长度必须小于1024字节
lang String 语言选择,填写zh
ctp String 客户端类型选择,web端填写1
cuid String 用户唯一标识,用来区分用户,填写机器 MAC 地址或 IMEI 码,长度为60以内
spd String 语速,取值0-9,默认为5中语速
pit String 音调,取值0-9,默认为5中语调
vol String 音量,取值0-15,默认为5中音量
per String 发音人选择,0为女声,1为男声,3为情感合成-度逍遥,4为情感合成-度丫丫,默认为普通女

接口对单次传入的文件实行了限定,合成文本长度必须低于
十二4字节,假使文本长度过长,就要求张开切割管理,采取数次伸手的点子,分别转变到语音文件,最终再将七个语音文件合并成二个。

贰.2 文本切割

能够动用如下代码将文件分割成多少个长度为
500 的公文列表

# 将文件按 500 的尺寸分割成八个文本

text_list = [ text[i:i+ 500] fori inrange( 0, len( text), 500)]

二.三 语言文件合并

笔者们利用 pydub 来管理生成的音频文件。使用
pip install pydub 就可以安装。

其余还 Ubuntu 情形须求安装依赖的,使用
sudo apt-get install libav-tools 安装就可以.而在 Windows 遭受亟待到
下载
FFmpeg,并将其配备到境遇变量中。

若还格外,能够参照官方网站配置:

# 合并音频文件

defmerge_voice(file_list):

voice_dict = {}

song = None

fori,f inenumerate(file_list):

ifi == 0:

song = AudioSegment.from_file(f, “mp3”)

else:

# 拼接音频文件

song += AudioSegment.from_file(f, “mp3”)

# 删除权且音频

os.unlink(f)

# 导出合并后的音频文件,格式为mp四格式

file_name = str(uuid.uuid1()) + “.mp3”

song.export(file_name, format= “mp3”)

returnfile_name

因而百度的接口,大家得以将文字转化成音频文件,下边包车型大巴主题材料就是何等播放音频文件。

音频文件播放

英特网获取到 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’)

证实:音频的播音必要在图形化页面下运作,因为命令行情势下,未有广播声音的言语。

pythonpage2voice.py -u
“”

运作后,代码就能够自动分析网页并开始展览朗读啦。

总结

从那之后,网页到点子的转变就归西了。当然程序尚未那样完美,比方中国和英国文混合的网页解析和调换的结果就稍微地道,不过纯粤语的音讯页面效果依然不错的。源码已上传至 GitHub:

style=”font-size: 1陆px;”>小编:半间半界济与本领术员,今后是一名小小开荒程序员,职业重中之重用
Java、Python,日常除此之外爱好钻研专门的职业技能外,业余也会鼓捣下技士周围,举例读书、功能工具、理财等等等等。
接待关怀,共同提升!

style=”font-size: 1陆px;”>证明:本文为作者投稿,版权归对方全部。 class=”backword”>重返腾讯网,查看越来越多

主编:

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图