1.提取文件字幕内容
在字幕网站下载完整字幕,这里发现一个1-7季的合集,网址在此:http://subhd.com/ar0/347588
下载后先来看看原始文件,一共67个文件,字幕均是在含有subtitle的行,那要做的就是遍历文件列表,打开文件后用正则表达式提取
这里遇到两个问题:
(1)文件的编码问题,字幕文件没有编码规范,用chardet.detect可以获取文件编码,然后正确打开;
(2)提取字幕,开始的想法是匹配中文,结果忽略了标点符号,所以改成匹配”0,,”与”\N{\fs16}”之间的所有字符,这里还会有少量不符合规则的字幕,写入新文件时strip去除即可,最后的提取格式有两种,一种只有字幕,另一种除了字幕还保留了字幕的出处,这里贴出守夜人誓词,请见下图:
2.对提取字幕条数作图
1-7季一共有46546条字幕,这里只是用matplotlib作了一个简单的柱形图,从第二季开始对话都是递减的,这里没有做进一步的探究了,忽略第七季不谈(只有7集),猜想是因为后面有越来越多的大规模战争场景?
3.tf-idf算法提取关键词并统计词频
jiba分词自带it-idf和textrank两种算法,都会过滤掉词长小于2的词,对比过发现最后结果还是第一种比较好。因为这部剧里有很多专有名词,以及提取的关键词会包含很多停用词或者出现次数很多但作用不大的词,例如“大人”,“小姐”等称谓词,所以必须使用自定义词典和自定义停用词库,最后结果对词频作降序排列并只显示词频大于50的词,发现“hodor”也出现了107次!
4.生成词云图
这里需要注意的是WordCloud默认不支持中文,所以这里需要加载中文字库,另外也找到了一张很有标志性的底图来生成云图
对话语料
因为想到如果提取到的字幕用作对话语料也会挺有意思的,满满的权游风,下面是基于粗糙的句子相似度计算得出匹配度最高的一句话以及下一句话
领取专属 10元无门槛券
私享最新 技术干货