使用Python语言实现新闻文本相似度计算

新闻内容在互联网传播过程中,有的平台转载稿件链接,而大部分平台是转载新闻内容的数据副本,就是复制一份再发布。在采用大数据技术监测分析新闻内容传播过程中,计算新闻文本之间的相似度来判断是否是同一个新闻内容作品成为核心基础工作之一。
这种比对工作,当只有一篇两篇稿件时,哪再简单不过了,分别打开看看,人工判断一下就可以了。但实际当中,那可是每天都有成千上万的新闻作品被各种平台转载传播,几乎是海量啦,再用单纯人工查看比对是很难快速完成了。
程序员有程序员的办法。笔者通过采用Python语言编写程序代码,对新闻内容文本数据进行预处理,对两个新闻文本内容自动计算余弦相似度实现自动批量判断两文本相似度,可以大大解放人工劳动。
一、为什么要对新闻文本进行预处理
新闻内容传播渠道多样,各平台采用了各自不同的显示样式控制标签(比如CSS样式控制标签,HTML格式标签)。这些不同的样式控制标签与新闻内容混合在一起形成各传播渠道上的新闻。如果对这些控制标签和新闻内容签混合在一起的原始文本内容计算出的相似度会很小,原因就在于差异较大的样式控制标签的影响。
因此,就需要把这些混在正文中的不同样式控制代码过滤掉,只保留新闻内容数据,再来比对才更有意义。
笔者反复测试,采用Python语言正则表达式,将新闻文本内容中的中文汉字全部匹配出来,清除过滤掉样式控制标签,仅比较提取的两篇新闻内容部分,计算出来的相似度能够保证基本正确,即使有偏差,也极其微小。
二、如何计算新闻文本相似度
相似度是一个比例,所以是一个0到1之间的小数。如果这个相似度越接近1,表示两篇新闻文本越接近一致,如果相似度越接近0,就表示两篇新闻极不一致。通常,我们会设置一个阈值0.5,如果相似度小于0.5,那就认为两篇新闻不一致。
在Python语言中,如果要计算文本相似度的话,需要将文本转换为向量。笔者使用TF-IDF(词频-逆文档频率)方法将文本转换为向量。在完成向量转换后,这样两篇新闻文本的相似度计算就可以通过计算余弦相似度来得出。余弦相似度就是通过计算两个向量的夹角余弦值来评估它们之间的相似性。
在具体的代码实现中,sklearn库提供了TfidfVectorizer类,它可以自动执行分词、去除停用词、计算TF-IDF权重等任务。使用sklearn的cosine_similarity函数,我们可以计算由TF-IDF向量化后的文本之间的余弦相似度。
(大众日报·大众新闻客户端 张震 编辑 汤代禄 燕烽)