这两天电视和朋友圈都是被十九大的内容刷屏的,
我呢偶尔也关心一下国家大事,
但是又没有时间看几个小时直播,看新闻报道又有些滞后了,
如何能第一时间领会十九大会议精神呢,不如来做一个自动摘要
拢共分三步:
1. 下载直播视频
2. 识别出直播视频中的文本
3. 对文本内容做摘要
我们以十九大开幕式当天习大大的报告内容为例
首先我们来到当天直播视频的网页,CCTV新闻专门开的一个直播地址
http://news.cctv.com/special/videolive/sjdzb/index.shtml
首先我们通过“移时回看”调到18号上午9点的位置
这个它直播的是流媒体,借助浏览器,可以找到他的视频流地址
借助这个地址我们可以开始下载直播内容
我们的浏览器开始下载一个永无止境的东西,就是直播的内容,在下载目录里是这样的
一个未确认的下载文件,大小还在不断增加,把他拷出来,凭直觉给他改个后缀,一般是flv
找个播放器播放一下,能放,没问题,顺便我们把视频里的音频抠出来
有了男神做报告的音频,下一步就是将音频转换为文字。语音识别发展了这么长时间,市面上借助语音识别的产品也不少,本以为这会是一件轻而易举的事,没想到并不如我所想。
首先搜了一下现成的录音转文字的软件工具,有是有,目前局面是传统人工转写与机器转写并存,人工的服务很多,机器的比如“录音啦”之类,都价格不菲。一般的免费语音小助手之类的只支持实时录音转写,而且大部分只适用短音频,有道云笔记算是比较好的了,但还是无法解决我的问题。
当然语音识别我们能调用现成服务接口,代码解决也是极好的。我首先想到的是科大讯飞,讯飞这几年声名极好,中文语音识别率应该是世界最好的了。注册了讯飞的账号,看了看开发文档却是令人很失望,讯飞的接口有点保守了,且不说没有Python包,到现在连RestAPI都不提供。是通过安卓,Java,Linux等不同平台下载相应SDK包使用的。
除了科大讯飞,语音识别比较靠谱的还有IMB的沃森和百度的接口,看了一下沃森给的文档,也是用Java讲的demo,懒得装Java的开发工具,正好百度应用以前注册过号,就果断选择百度的接口。百度的接口有Python示例也有RestAPI,调用很简单,几句话就OK了
from aip.speech import AipSpeech
reload(sys)
sys.setdefaultencoding('utf8')
APP_ID = 'xxxx'
API_KEY = 'xxxx'
SECRET_KEY = 'xxxx'
aipSpeech = AipSpeech(APP_ID, API_KEY, SECRET_KEY)
# 读取文件
def get_file_content(filePath):
with open(filePath, 'rb') as fp:
return fp.read()
# 识别本地文件
print aipSpeech.asr(get_file_content('十九大.wav'), 'pcm', 16000, {
'lan': 'zh',
})
然后就GG了,content len too long!
百度语音识别的一个大坑就是不支持长音频转写,音频必须是60秒以内的。
也就基本只适用于手机语音助手之类的场景。
调查了一下,原来支持长语音转写的没有几家,貌似只能科大讯飞了,而且也是新上不久的服务。新用户试用的话会送5小时音频识别服务调用,他分标准版和电话版,合起来就是10个小时够用了,很良心了。不过看看他试用完以后的购买资费表,还是觉得有点贵。
按照文档先跑他Java版SDK里的sample,配置几个ID,稍作修改也就可以了。
现在开幕式报告的音频已经识别成文字了,讯飞在识别准确率方面还是靠谱的,部分内容如下:
[{"bg":"560","ed":"4400","nc":"1.0","onebest":"让我们对他们的到来表示","si":"0","speaker":"1","wordsResultList":[{"alternativeList":[],"wc":"1.0000","wordBg":"23","wordEd":"56","wordsName":"让","wp":"n"},{"alternativeList":[],"wc":"1.0000","wordBg":"56","wordEd":"127","wordsName":"我们","wp":"n"},{"alternativeList":[],"wc":"1.0000","wordBg":"127","wordEd":"150","wordsName":"对","wp":"n"},{"alternativeList":[],"wc":"0.9889","wordBg":"150","wordEd":"180","wordsName":"他们","wp":"n"},{"alternativeList":[],"wc":"1.0000","wordBg":"180","wordEd":"188","wordsName":"的","wp":"n"},{"alternativeList":[],"wc":"1.0000","wordBg":"188","wordEd":"287","wordsName":"到来","wp":"n"},{"alternativeList":[],"wc":"1.0000","wordBg":"287","wordEd":"379","wordsName":"表示","wp":"n"}]},{"bg":"4420","ed":"5690","nc":"1.0","onebest":"热烈的","si":"1","speaker":"1","wordsResultList":[{"alternativeList":[],"wc":"1.0000","wordBg":"21","wordEd":"74","wordsName":"热烈","wp":"n"},{"alternativeList":[],"wc":"0.9999","wordBg":"74","wordEd":"124","wordsName":"的","wp":"n"}]},{"bg":"5700","ed":"6700","nc":"1.0","onebest":"欢迎","si":"2","speaker":"1","wordsResultList":[{"alternativeList":[],"wc":"1.0000","wordBg":"24","wordEd":"74","wordsName":"欢迎","wp":"n"}]},{"bg":"16980","ed":"18190","nc":"1.0","onebest":"现在","si":"3","speaker":"1","wordsResultList":[{"alternativeList":[],"wc":"1.0000","wordBg":"17","wordEd":"116","wordsName":"现在","wp":"n"}]},{"bg":"18330","ed":"20690","nc":"1.0","onebest":"请习近平总书记","si":"4","speaker":"1","wordsResultList":[{"alternativeList":[],"wc":"1.0000","wordBg":"31","wordEd":"82","wordsName":"请","wp":"n"},{"alternativeList":[],"wc":"1.0000","wordBg":"82","wordEd":"142","wordsName":"习近平","wp":"n"},{"alternativeList":
这是他返回的Json,主要的识别结果在"onebest":"xxx"里,写一个正则提取一下,串起来就是这个样子:
让我们对他们的到来表示热烈的欢迎现在请习近平总书记代表18届中央委员会向大会作报告,同志们,我现在代表第18届中央委员会向大会作报告。中国共产党第19次全国代表大会是在全面建成小康社会决胜阶段中国特色社会主义进入新时代,但关键时期召开的一次十分重要的大会,大会的主题是不忘初心,牢记使命,高举中国特色社会主义伟大旗帜,决胜全面建成小康社会夺取新时代中国特色社会主义伟大胜利,为实现中华民族伟大复兴的中国梦不懈奋斗,不忘初心方得始终中国共产党人的初心和使命就是为中国人民谋幸福,为中华民族谋复兴这个初心和使命是激励中国共产党人不断前进的根本动力。
有了报告的文本的内容,借助开源的 TextRank4ZH 对文本做一些自动分析
https://github.com/letiantian/TextRank4ZH
# -*- coding:utf-8 -*-
import sys
import codecs
from textrank4zh import TextRank4Keyword, TextRank4Sentence
reload(sys)
sys.setdefaultencoding('utf8')
text = codecs.open('text.txt', 'r', 'utf-8').read()
tr4w = TextRank4Keyword()
tr4w.analyze(text=text, lower=True, window=4)
print('关键词:')
for item in tr4w.get_keywords(1000, word_min_len=4):
print item.word, item.weight
print()
print('关键短语:')
for phrase in tr4w.get_keyphrases(keywords_num=40, min_occur_num=4):
print phrase
tr4s = TextRank4Sentence()
tr4s.analyze(text=text, lower=True, source='all_filters')
print()
print('摘要:')
for item in tr4s.get_key_sentences(num=5):
print item.index, item.weight, item.sentence # index是语句在文本中位置,weight是权重
这个包实现了TextRank算法,我们分别对报告文本提取关键词,关键短语和摘要句
用wordcloud生成词云。这里我们是用TextRank的关键词排名结果来决定词块大小,而不是用jieba分的词,所以用关键词权值乘上10000作为该词在画图用的词串中的出现次数,放到以空格隔开的词串里,再画词云。
# -*- coding:utf-8 -*-
import sys
import codecs
from wordcloud import WordCloud
from scipy.misc import imread
from random import shuffle
reload(sys)
sys.setdefaultencoding('utf8')
in_file = open('keyword.txt', 'r')
key_list = []
comment_text = ''
for line in in_file.readlines():
word = line.split()[0]
score = float(line.split()[1])
for i in range(int(score*10000)):
key_list.append(word)
shuffle(key_list)
for item in key_list:
comment_text += item
color_mask = imread("背景.png") # 读取背景图片
cloud = WordCloud(
#设置字体,不指定就会出现乱码
font_path="msyh.ttf",
#设置背景色
background_color='black',
#词云形状
mask=color_mask,
#允许最大词汇
max_words=2000,
#最大号字体
max_font_size=100
)
print cut_text
word_cloud = cloud.generate(cut_text) # 产生词云
word_cloud.to_file("十九大_cloud.jpg") #保存图片
代码中这一句
font_path="msyh.ttf"
是做字体设置,微软雅黑等字体文件可从Windows字体目录中获得。
我们看一下效果
限制一下长度,我们只关注四个字以上的关键词,再看看效果
我让代码找出报告中最重要的五句话,作为内容摘要,看看结果是啥
具体结果是这五句话:
30 0.00283293364503 从那时以来,我们党团结带领全国各族人民不懈奋斗,推动我国经济实力科技实力国防实力综合国力进入世界前列,推动我国国际地位实现前所未有的提升,党的面貌国家的面貌人民的面貌军队的面貌中华民族的面貌发生了前所未有的变化,中华民族正以崭新姿态屹立于世界的东方,经过长期努力,中国特色社会主义进入了新时代,这是我国发展新的历史方位中国特色社会主义进入新时代意味着近代以来久经磨难的中华民族迎来了从站起来富起来到强起来的伟大飞跃,迎来了实现中华民族伟大复兴的光明前景,意味着科学社会主义在21世纪的中国焕发出强大生机活力,在世界上高高举起了中国特色社会主义伟大旗帜,意味着中国特色社会主义道路理论制度文化不断发展,拓展了发展中国家走向现代化的途径,给世界上那些既希望加快发展又希望保持自身独立性的国家和民族提供了全新选择,为解决人类问题贡献了中国智慧和中国方案这个新时代是承前启后,继往开来,在新的历史条件下继续夺取中国特色社会主义伟大胜利的时代,是决胜全面建成小康社会,进而全面建设社会主义现代化强国的时代,是个全国各族人民团结奋斗,不断创造美好生活,逐步实现全体人民共同富裕的时代,是全体中华儿女戮力同心奋力实现中华民族伟大复兴中国梦的时代是我们日益走近世界舞台中央不断为人类作出更大贡献的时代中国特色社会主义进入新时代,
我国社会主要矛盾已经转化为人民日益增长的美好生活需要和不平衡不充分的发展之间的矛盾
339 0.00222389331156 另外呢这个报告里面也有很多的新的内容,你比如说一个就是对新时代的这样一个界定,啊中国今天进入了建设中国特色社会主义的新时代,我想这个重大的判断呢是我们未来啊制定路线方针政策的一个重要的依据,那么同时呢也制定了新的目标,就是规划了我们党的第二个百年目标,那么在2020年建成全面小康社会的基础上,呢我们用15年的时间,到2035年我们要基本实现现代化,再用15年的时间到本世纪中叶,我们要建成富强民主文明和谐美丽的生态中国,啊所以这些新的啊包括新方略,啊呃习总书记呢还用了14个坚持来讲呢我们建设中国特色社会主义的分配律
115 0.00219163202752 到那时,我国物质文明政治文明精神文明社会文明生态文明,将全面提升,实现国家治理体系和治理能力现代化成为综合国力和国际影响力领先的国家全体人民共同富裕,基本实现我国人民将享有更加幸福安康的生活,中华民族将以更加昂扬的姿态屹立于世界民族之林同志们从建全面建成小康社会到基本实现现代化,再到全面建成社会主义现代化强国,是新时代中国特色社会主义发展的战略安排,我们要坚韧不拔锲而不舍,奋力谱写社会主义现代化新征程的壮丽篇章
334 0.00218609883778 全党全党全国各族人民要紧密团结在党中央周围,高举中国特色社会主义伟大旗帜,锐意进取,埋头苦干,为实现推进现代化建设完成祖国统一维护世界和平与促进共同发展三大历史任务,为决胜全面建成小康社会夺取新时代中国特色社会主义伟大胜利,实现中华民族伟大复兴的中国梦,实现人民对美好生活的向往,继续奋斗
235 0.00215052077353 十坚持走中国特色强军之路,全面推进国防和军队现代化,国防和军队建设正站在新的历史起点上,面对国家安全环境的深刻变化,面对强国强军的时代要求,必须全面贯彻新世代党的强军思想,贯彻新形势下军事战略方针,建设强大的现在陆军海军空军火箭军和战略支援部队打造坚强高效的战区联合作战指挥机构,构建中国特色现代作战体系,担当起党和人民赋予的新时代使命任务,适应世界新军事革命发展趋势和国家安全需求,提高建设质量和效益,确保到2020年基本实现机械化信息化建设取得重大进展,战略能力有大的提升,同国家现代化进程相一致,全面推动推进军事理论现代化军队组织形态现代化军事人员现代化武器装备现代化,力争到2035年基本实现国防和军队现代化
有没有领会到精神,还有待进一步确认。
如果写个脚本把这这些内容串起来,再加上去平台上编辑发送,就有点自动发稿机器人的感觉了哈哈。