文章目录

  • 前言
  • 一、新闻相似度计算思路
    • 1、效果展示
    • 2、实现思路
    • 3、杰卡德相似系数
  • 二、代码实现
    • 1.分词
    • 2.相似度计算

前言

通过结巴进行分词,通过杰卡德相似系数来计算新闻的相似程度,相似度大于0.15时计算出相似的新闻可以接受,大家有如果有其他好的思路,请留言


一、新闻相似度计算思路

1、效果展示

10分钟带你入门单反摄影
相似的有:
相似度:0.18  10分钟手臂操,这个夏天告别“拜拜肉”!
相似度:0.20  9个经典瑜伽动作,每天10分钟,健康又瘦身!
-----------------------------------------
10分钟手臂操,这个夏天告别“拜拜肉”!
相似的有:
相似度:0.18  10分钟带你入门单反摄影
相似度:0.15  7个小动作每天4分钟,缓解腱鞘炎告别鼠标手!
相似度:0.15  7个小动作每天4分钟,缓解腱鞘炎告别鼠标手!
相似度:0.15  9个经典瑜伽动作,每天10分钟,健康又瘦身!
-----------------------------------------
10岁女孩因推拿不当 差点就高位截瘫了!
相似的有:
相似度:0.18  14岁女孩在江苏失联
相似度:0.18  16岁女孩在江苏失联
相似度:0.18  21岁女孩在江苏失联
-----------------------------------------
11岁男孩骑共享单车被撞身亡 家属索赔878万
相似的有:
相似度:0.17  13岁男孩骑小黄车练漂移 摔倒身亡[伤心]
相似度:0.17  两男子骑共享单车撞倒辗轧小学生[怒]
相似度:0.22  危险!10岁男童骑共享单车 手柄扎入大腿
-----------------------------------------
12岁和8岁兄弟俩洗澡时不幸双双丧命 疑热水器漏电所致[伤心]
相似的有:
相似度:0.18  广场景观灯漏电!3岁女孩触电身亡[伤心]
-----------------------------------------
12岁女孩拿全国街舞冠军 曾捡水瓶支撑梦想
相似的有:
相似度:0.15  12岁男孩在江苏失联
相似度:0.15  14岁女孩在江苏失联
相似度:0.15  16岁女孩在江苏失联
相似度:0.15  21岁女孩在江苏失联
-----------------------------------------
12岁女童欲徒步跨省见网友 只因一句“想见你”[吃惊]
相似的有:
相似度:0.15  12岁男孩在江苏失联
相似度:0.19  “我不认识这个人” 4岁被拐女童一句话 网约车司机及时报警[good]
-----------------------------------------
12岁小学生玩游戏打赏主播 花掉环卫工母亲4万元积蓄[伤心]
相似的有:
相似度:0.17  16岁少女为减肥吸毒 母亲一夜白头[伤心]
-----------------------------------------
12岁男孩捐髓救弟:愿做弟弟的大树[心]
相似的有:
相似度:0.25  12岁男孩在江苏失联
相似度:0.15  13岁男孩在江苏失联
相似度:0.15  15岁男孩在江苏失联
相似度:0.21  1岁以内你需要为宝宝做的12件事情
相似度:0.18  今天,你愿为它们而转吗?[心]
相似度:0.15  无论什么年纪 愿你童心依旧[心]

2、实现思路

  1. 对标题进行分词处理,分词有很多方式,我使用的结巴分词。分词可以只对标题分词,或者标题+内容的地名、名词、动名词、动词 进行分词,可自己选择。
  2. 通过杰卡德相似系数来计算两个内容的相似度。

3、杰卡德相似系数

两个集合A和B的交集元素在A,B的并集中所占的比例,称为两个集合的杰卡德相似系数,用符号J(A,B)表示。​
杰卡德相似系数是衡量两个集合的相似度一种指标。通过两个集合的交集和并集的比值获取相似值。
交集: 表示方法 ∩ 。
并集 : 表示方法 ∪ 。
C的面积越大,说明两个集合越相似。

二、代码实现

1.分词

代码如下(python示例):


import os
import xlrd
import jieba.analyseclass SelectKeyWord:def __init__(self,file,_type):self.file = fileself._type = _typeself.news_dict = self.loadData()self.key_words = self.getKeyWords()# 加载数据def loadData(self):news_dict = dict()# 使用xlrd加载xlsx格式文件,返回一个table对象table = xlrd.open_workbook(self.file).sheets()[0]# 遍历每一行for row in range(1,table.nrows):# 将每一列返回为一个数组line = table.row_values(row, start_colx=0, end_colx=None)new_id = int(line[0])news_dict.setdefault(new_id,{})news_dict[new_id]["title"] = line[1]news_dict[new_id]["content"] = line[2]return news_dict# 调用结巴分词获取每篇文章的关键词def getKeyWords(self):news_key_words = list()# 加载停用词表stop_words_list = [line.strip() for line in open("./../files/stop_words.txt").readlines()]for new_id in self.news_dict.keys():if self._type == 1:# allowPOS 提取地名、名词、动名词、动词keywords = jieba.analyse.extract_tags(self.news_dict[new_id]["title"] +self.news_dict[new_id]["content"],topK=10,withWeight=False,allowPOS=('ns', 'n', 'vn', 'v'))news_key_words.append(str(new_id) + '\t' + ",".join(keywords) + '\t'+self.news_dict[new_id]["title"])elif self._type == 2:# cut_all :False 表示精确模式keywords=jieba.cut(self.news_dict[new_id]["title"],cut_all=False)kws = list()for kw in keywords:if kw not in stop_words_list and kw != " " and kw != " ":kws.append(kw)news_key_words.append(str(new_id) + '\t' + ",".join(kws) + '\t'+self.news_dict[new_id]["title"])return news_key_words# 将关键词获取结果写入文件def writeToFile(self,file):fw = open("C:\\Users\\archermind\\Desktop\\data\\%s.txt" % file.split("-")[0],"w",encoding="utf-8")fw.write("\n".join(self.key_words))fw.close()print("文件 %s 的关键词写入完毕。" % file)if __name__ == "__main__":# 原始数据文件路径 这里替换excel路径original_data_path = "C:\\Users\\archermind\\Desktop\\data\\"files = os.listdir(original_data_path)# 关键词提取方式 _type = 1:以 title+content使用jieba的extract_tags进行关键词提取#                _type = 2:以 title进行分词处理作为文章关键词_type = 2for file in files:print("开始获取文件 %s 下的关键词。" % file)skw = SelectKeyWord(original_data_path + file ,_type)skw.writeToFile(file)print("\n关键词获取完毕")

输出信息:中间通过大空格隔开,分别为id,分词结果,title

3    中国,第三季,倒计时  #你所不知道的中国#第三季倒计时开始!
4   关注,四川,茂县,山体,垮塌,救援,目击者,称,生命,迹象   #关注四川茂县山体垮塌救援# 目击者称仍有生命迹象
5   南京,凤台,南路,车祸,后续,转发,急寻,目击者    #南京凤台南路车祸#后续:转发,急寻目击者!
6   候鸟,城市,暑假,10,平方米,中,幸福    #小候鸟的城市暑假# :10平方米中的幸福

2.相似度计算

代码如下(python):

import osclass Correlation:def __init__(self, file):self.file = fileself.news_tags,self.news_title = self.loadData()self.news_cor_list = self.getCorrelation()# 加载数据def loadData(self):print("开始加载文件数据:%s" % self.file)news_tags = dict()news_title=dict()for line in open(self.file, "r", encoding="utf-8").readlines():try:newid, newtags,title = line.strip().split("\t")news_tags[newid] = newtagsnews_title[newid] = titleexcept:print("读取分词数据过程中出现错误,错误行为:{}".format(line))passreturn news_tags,news_title# 计算相关度def getCorrelation(self):news_cor_list = list()for newid1 in self.news_tags.keys():id1_tags = set(self.news_tags[newid1].split(","))_x = 0for newid2 in self.news_tags.keys():id2_tags = set(self.news_tags[newid2].split(","))if newid1 != newid2:cor = ( len(id1_tags & id2_tags) ) / len (id1_tags | id2_tags)if cor > 0.15:if(_x==0):print("-----------------------------------------");print(self.news_title[newid1])print("相似的有:")_x=_x+1print("相似度:"+format(cor,".2f")+"\t "+self.news_title[newid2]);return news_cor_list
if __name__ == "__main__":# 原始数据文件路径original_data_path = "C:\\Users\\archermind\\Desktop\\data\\keywords\\"files = os.listdir(original_data_path)for file in files:print("开始计算文件 %s 下的新闻相关度。" % file)cor = Correlation(original_data_path + file)

新闻数据集下载

读到这里了,如果对你有帮助就留个赞吧。

另外关注公众号java内功心法回复我要当架构即可领取java方向必备进阶资料。

【推荐系统】新闻相似度计算相关推荐

  1. spark 新闻相识度计算

    /** * Created by zxl on 2016/5/5. * 余弦相识度计算 */ import java.sql.{Connection, DriverManager, ResultSet ...

  2. 推荐系统中物品相似度计算

    原文地址:https://www.cnblogs.com/bjwu/p/9448043.html 这次介绍Item(User)相似度的计算方法,其广泛运用于基于邻域的协同过滤算法的推荐系统.简而言之, ...

  3. 黑马推荐系统项目实战【二】 相似度计算

    相似度计算 余弦相似度.皮尔逊相关系数 - 皮尔逊会对向量的每个分量做中心化 - 余弦相似度只考虑向量的夹角不考虑长度 - 适合评分是连续的数值 杰卡德相似度 - 交集/并集 - 适合评分是 0, 1 ...

  4. 【相似度计算】详解文本相似度计算(介绍、公式)

    本文收录于<深入浅出讲解自然语言处理>专栏,此专栏聚焦于自然语言处理领域的各大经典算法,将持续更新,欢迎大家订阅! ​个人主页:有梦想的程序星空 ​个人介绍:小编是人工智能领域硕士,全栈工 ...

  5. 『行远见大』 BQ Corpus 信贷文本匹配相似度计算

    『行远见大』 BQ Corpus 信贷文本匹配相似度计算 项目简介 BQ Corpus 信贷文本匹配相似度计算,根据两段银行信贷业务的文本在语义上是否相似进行二分类,相似判断为1,不相似判断为0.本项 ...

  6. gensim在“中文查找(关键词)“与“txt文本“之间做相似度计算(返回最相似的文本)

    本文目的 搜索关键词,返回最相关的txt文本内容(模仿搜索引擎) 网上的例子都是一个list里面放入几句话,然后输入关键词去计算相似度. 无法在实际中应用,例如 http://blog.csdn.ne ...

  7. word2vec词向量训练及中文文本类似度计算

    本文是讲述怎样使用word2vec的基础教程.文章比較基础,希望对你有所帮助! 官网C语言下载地址:http://word2vec.googlecode.com/svn/trunk/ 官网Python ...

  8. LSF-SCNN:一种基于 CNN 的短文本表达模型及相似度计算的全新优化模型

    欢迎大家前往腾讯云社区,获取更多腾讯海量技术实践干货哦~ 本篇文章是我在读期间,对自然语言处理中的文本相似度问题研究取得的一点小成果.如果你对自然语言处理 (natural language proc ...

  9. 相似度计算常用方法综述

    引言 相似度计算用于衡量对象之间的相似程度,在数据挖掘.自然语言处理中是一个基础性计算.其中的关键技术主要是两个部分,对象的特征表示,特征集合之间的相似关系.在信息检索.网页判重.推荐系统等,都涉及到 ...

最新文章

  1. UICollectionView
  2. IBM 340 亿美元收购 RedHat(红帽)
  3. boost::sort::sample_sort相关的测试程序
  4. table超出边框出现滚动条_精美横轴智能滚动条设计
  5. 前端取消置顶功能_短说开发日报:首页推荐频道刷新后首页置顶的数据没有加载出来的问题已修复(9.22周二)...
  6. 关于vue3.0中的this.$router.replace({ path: '/'})刷新无效果问题
  7. 对字符串数组中的M个字符串按长度由小到大进行排序
  8. 【Java】44个Java代码性能优化总结
  9. MySQL安装配置详解(5.5 For Windows)
  10. 【目标跟踪】基于matlab光流法运动视频跟踪【含Matlab源码 1357期】
  11. Luogu2279[HNOI2003] 消防局的设立
  12. 2017计算机驱动用什么好处,驱动精灵和驱动人生哪个好2017
  13. MySQL数据库基础
  14. 3D纹理贴图制软件The Foundry Mari for Mac
  15. 计算机表格做八折怎么辛,五笔字根表口诀.doc
  16. Activiti工作流程详解
  17. html语言%3cspan%3e,比较好的网站HTML语言.doc
  18. foo, bar ,baz
  19. 苹果要求添加手机号且忘记安全提示问题解决办法
  20. [CISCN2019 华东南赛区]Web11

热门文章

  1. 基于FVM的应力求解
  2. mysql取模_mysql 取模分表
  3. 1109 擅长C(JAVA)
  4. [书]操作系统真象还原 -- 第9章 内核(中断、内核内存管理、内核线程)
  5. 在attachments上做的八道题
  6. 网页如何打开exe文件
  7. ICLR 2021 有什么值得关注的投稿?
  8. 安装完Anaconda python 3.8,降级python3.6方法
  9. 免费领取:计算机视觉经典学术论文!
  10. 怎么MOBI转换LRF?来试试这几个方法吧