权力的游戏 字幕
1.提取文件字幕内容
在字幕网站下载完整字幕,这里发现一个1-7季的合集,网址在此:http://subhd.com/ar0/347588
下载后先来看看原始文件,一共67个文件,字幕均是在含有subtitle的行,那要做的就是遍历文件列表,打开文件后用正则表达式提取
这里遇到两个问题:
(1)文件的编码问题,字幕文件没有编码规范,用chardet.detect可以获取文件编码,然后正确打开;
(2)提取字幕,开始的想法是匹配中文,结果忽略了标点符号,所以改成匹配”0,,”与”\N{\fs16}”之间的所有字符,这里还会有少量不符合规则的字幕,写入新文件时strip去除即可,最后的提取格式有两种,一种只有字幕,另一种除了字幕还保留了字幕的出处,这里贴出守夜人誓词,请见下图:
2.对提取字幕条数作图
1-7季一共有46546条字幕,这里只是用matplotlib作了一个简单的柱形图,从第二季开始对话都是递减的,这里没有做进一步的探究了,忽略第七季不谈(只有7集),猜想是因为后面有越来越多的大规模战争场景?
jiba分词自带tf-idf和textrank两种算法,都会过滤掉词长小于2的词,对比过发现最后结果还是第一种比较好。因为这部剧里有很多专有名词,以及提取的关键词会包含很多停用词或者出现次数很多但作用不大的词,例如“大人”,“小姐”等称谓词,所以必须使用自定义词典和自定义停用词库,最后结果对词频作降序排列并只显示词频大于50的词,发现“hodor”也出现了107次!
4.生成词云图
这里需要注意的是wordCloud默认不支持中文,所以这里需要加载中文字库,另外也找到了一张很有标志性的底图来生成云图
def wordcloud(worddict):
"""生成词云图"""
words = []
font = r'C:\windows\Fonts\simfang.ttf'
for word in worddict:
words.APPend(word[0])
wordstring = " ".join(words)
image = Image.open(file) # 初始化图片
graph = np.array(image)
wc = WordCloud(font_path=font,background_color='white', collocations=False, mask=graph)
wc.generate(wordstring)
image_color = ImageColorGenerator(graph)
plt.imshow(wc.recolor(color_func=image_color))
plt.axis("off")
plt.show()
对话语料
因为想到如果提取到的字幕用作对话语料也会挺有意思的,满满的权游风,下面是基于粗糙的句子相似度计算得出匹配度最高的一句话以及下一句话
关注公众号了解更多
相关阅读
因为项目需要,免费的API也没找到,所以自己用JS来扒取卫星云图 卫星云图url (希望气象台的小哥不会改路径…) 首先是保存云图url,找路
刚刚得到消息,百度开发了一款“云图”图片相关插件,简单来说就是在推荐站内的相关图片。通过对网站内容的抓取分析,组合出最符合用户