写在前面

计算字符串之前的相似度可以使用 Levenshtein distance(最小编辑距离)来实现,JAVA实现可以参考http://blog.csdn.net/ironrabbit/article/details/18736185,计算新闻标题间的相似度间可以使用这个算法,如果是计算整篇文章间的相似度使用更适合使用:分词–>特征提取–>向量空间–>计算向量相似度,这样的流程,本文介绍方法纯属个人学习。

文章准备

现有如下图所示文章若干,格式为:

typeId====文章ID====标题====正文

需要输出每篇文章相似度最大的10篇文章

计算流程

  1. 分词
    分词工具主要有 :
    ikanalyzer: https://www.oschina.net/p/ikanalyzer
    ansj_seg: http://nlpchina.github.io/ansj_seg/
    NLPIR: http://ictclas.nlpir.org/
    hanlp:http://hanlp.linrunsoft.com/

ansj_seg比较简单易用,效果也还可以,所以本文选择了ansj_seg分词,ansj_seg是java写的,当然用scala也可以直接调用分词代码如下

import breeze.linalg.{SparseVector, norm}
import org.ansj.domain.Term
import org.ansj.splitWord.analysis.ToAnalysis
import org.apache.spark.mllib.feature.{HashingTF, IDF}
import org.apache.spark.{SparkConf, SparkContext}
import org.apache.spark.mllib.linalg.{SparseVector => SV}def  splitWordToSeq(news:String)={val terms:java.util.List[Term] =ToAnalysis.parse(news).getTerms;val size=terms.size()var res="";for( i<- 0 until size){res+=terms.get(i.toInt).getName+" "}res.split(" ")}  //加载数据RDD格式 (id,contnent,typeId,title)val src = ctx.textFile(typePath).map(x => x.split("====").toSeq).filter(_.length==4);val trainRdd=src.map(x => (x(1),splitWordToSeq(x(3)),x(0),x(2)))

经过这一步操作RDD数据结构为

(文章I,[词1,词2,.],分类ID,标题)

2.TF-IDF

    val hashingTF = new HashingTF(Math.pow(2, 18).toInt)//计算TFval newSTF = trainRdd.map {case (num, seq,typename,title) =>val tf = hashingTF.transform(seq)(num, tf)}newSTF.cache()newSTF.take(10).foreach(println)//构建idf modelval idf = new IDF().fit(newSTF.values)//将tf向量转换成tf-idf向量val newsIDF = newSTF.mapValues(v => idf.transform(v))

3.余弦值计算

//广播一份tf-idf向量集val bIDF = ctx.broadcast(newsIDF.collect())newsIDF.take(10).foreach(println)//计算doc之间余弦相似度val docSims = newsIDF.flatMap {case (id1, idf1) =>val idfs = bIDF.value.filter(_._1 != id1)val sv1 = idf1.asInstanceOf[SV]//构建向量1val bsv1 = new SparseVector[Double](sv1.indices, sv1.values, sv1.size)//取相似度最大的前10个idfs.map {case (id2, idf2) =>val sv2 = idf2.asInstanceOf[SV]//构建向量2val bsv2 = new SparseVector[Double](sv2.indices, sv2.values, sv2.size)//计算两向量点乘除以两向量范数得到向量余弦值val cosSim = bsv1.dot(bsv2) / (norm(bsv1) * norm(bsv2))(id1, id2, cosSim)}.sortWith(_._3>_._3).take(10)}

4.结果输出

  //每篇文章相似并排序,取最相似的前10个val simRdd= docSims.groupBy(x=>x._1)val srcJoin=src.map(x=>(x(1),x(2)))//广播一份srcJoinval bSrcJoin = ctx.broadcast(srcJoin.collect())//按标题输出srcJoin.join(simRdd).map(x=>(x._1,x._2._1,x._2._2.map(x=>(x._2,x._3)).map(x=>{val id=x._1val sim=x._2val  name=bSrcJoin.value.filter(x=>x._1==id).take(1).toList.mkString(",")name+" "+sim}))).foreach(x=>println(x._1+" "+x._2+" "+x._3))

输出结果

281 打开车门,带照明的个性化不锈钢车门槛护板 List((286,此外据官方称,新车内饰将配备独特的运动方) 0.17355059781756424, (981,灯光的颜色会随着模式的不同而变化,全新一) 0.07154584060189653, (476,具体车型价格见下表所示:,赠送礼包(全车) 0.0663799917998182, (372,居家与性能结合的完美作品,整个仪表板总成) 0.06308138351300914, (472,单碟CD,手动空调,还有车窗雾灯控制等也都) 0.056893497309718585, (514,赠送4880元礼包(车膜、电子狗、发动机护板) 0.05632346910876026, (283,后防护结构由外皮和带吸能盒金属杠铁组成,) 0.05514934221670283, (918,全新索兰托明显要比老款更加低矮、修长一些) 0.05467620075042357, (602,逍客的内饰设计方正、简洁,更加偏向于SUV) 0.05345188989008506, (173,新车共推出包括进取型、精英型、尊贵型三种) 0.05260479779073858)
188 标致雪铁龙集团执行董事会主席瓦兰(Philipp List((190,皮卡特在接受采访时还否认了有关标致雪铁龙) 0.28308784004633664, (169,东风标致热销车型3008以及法国标致摩托的全) 0.26921309228870577, (204,则让镜头与关注点再一次聚焦在它的身上,【) 0.20868440839311483, (451,标致Quartz概念车还配备了23英寸多辐轮圈,) 0.14827844905629373, (589,标致此次将新款508引入中国,将很可能一举) 0.1399713488539159, (457,【雪铁龙SM车型】,而雪铁龙C4毕加索车型以) 0.13906010641740565, (593,因此雪铁龙正在计划推出一系列运动车型,新) 0.13636748746481672, (406,标致2008车型未来也将搭载这款1.2THP发动机) 0.12450132789119432, (786,(本标识采用的燃料消耗量数据是根据GB/T,) 0.12167313807761139, (496,全新东风标致508采用了新的标致家族式设计) 0.12029274244691324)
528 丰田发布了ScioniM概念车的官方图片, List((669,搜狐汽车北京编辑从北京丰田经销商(北京华) 0.11501504746179818, (331,通过谍照可以发现,量产版车型秉承了概念车) 0.11112317519674783, (979,具体车型优惠政策如下:,外观方面,雷凌与) 0.10741662908666913, (866,2.7T发动机还将搭载于即将在江铃福特国产的) 0.10233109870646034, (969,C概念车定位五门轿跑,其量产版很有可能是) 0.10170358633432966, (395,丰田中国进一步明确中国事业的三个重要目标) 0.09700854463833553, (388,但是在整车外形方面已经被赋予了更多的量产) 0.0969224361969581, (550,外观方面:新款卡宴GTS配备了全新的运动套) 0.09586847461034306, (451,标致Quartz概念车还配备了23英寸多辐轮圈,) 0.09453268429874259, (914,北京现代名图在动力方面提供了1.8L和2.0L自) 0.0938042150135108)
584 当地蒙古族小伙为跨界之旅的体验者们献上了 List((98,为参与活动的会员及车友们带来了一次愉快、) 0.10144042621410033, (900,●外观:大胆跨界丰富线条极具动感活力,缤) 0.08435250342604701, (661,消费者也拥有了更好更丰富的选择,今天我们) 0.06678491860484939, (602,逍客的内饰设计方正、简洁,更加偏向于SUV) 0.06641661347419316, (356,虽然外观、内饰以及空间方面都足够出色,但) 0.06468750976743301, (247,电脑登录搜狐汽车双11购车节活动专题页面,) 0.06350055512853144, (172,“纵型都市FUN享精彩“广汽本田年轻人都市) 0.05903709932636419, (261,然而这些车型的背后的汽车品牌又有着怎样的) 0.05568197956503549, (12,汽车的设计生产则必须以几近严苛的规矩与标) 0.054981953655597146, (849,汽车设计和工程设计往往成为发展中国家汽车) 0.052715987050102074)
883 更多豪华配置应用于车型,比如,外部后视镜 List((547,BMW3行动至今已成功举办7年,是汽车界首屈) 0.4716876068281059, (604,宝马车型一直以动感时尚,做工精致,配置丰) 0.37444951429283024, (748,xDrive车型将是国产宝马车型首次搭载宝马全) 0.3248377629392127, (868,您觉得宝马给您带来最大的感触是什么?,孔维) 0.283797520879025, (45,“2013BMW售后服务体验之旅”将于4月1日至1) 0.2607764840693342, (477,配置方面:宝马316Li配备了6.5英寸显示屏、) 0.2252714662316658, (792,宝马将在2015年推出5款全新车型,2015年宝马) 0.19634295413080682, (141,此活动成功加深了华晨宝马与达科之间的战略) 0.17710362862912762, (812,由于是同一平台的细分车型,因此我们从它的) 0.14666740935066, (597,虽然运转时不见了以往直列6缸发动机浑厚的) 0.14218210564143735)
391 选择当天上市的第一辆启辰R30成为启辰品牌 List((234,即启辰首款SUV产品,就是一款完全由启辰研) 0.7379809178271136, (2,作为东风日产旗下的自主品牌,奇骏和逍客使) 0.5618171446403687, (92,2013款车型在哪方面有变化?,2013款启辰D50) 0.4174158130052179, (408,国家还将于2014年9月1日起推出针对如晨风这) 0.2797312789474938, (752,搭载6AT的1.6THP车型售价偏高,倒是众泰在) 0.23030218361294036, (75,除了华晨宝马、一汽丰田两家合资企业推出自) 0.1799494445762122, (107,同时在东风风神新H30CROSS上市活动当天,) 0.15510159677821928, (139,东风日产的企业哲学不仅用于己身,更放在了) 0.14440237542192322, (122,进一步强化了长城C30的优势,为消费者提供) 0.1359071861216043, (803,我们搜狐汽车要把市场部、电销部、销售部、) 0.1358706124362036)
346 黄少堂从通用汽车回国,“下嫁”广汽,2013 List((529,惊闻小虞会长逝世的噩耗,虽然已经有心理准) 0.29352314001002766, (499,这个产品被用户接受了,有了一定的量,这个) 0.26315679277910997, (49,还有一系列产品正处于研发中,广汽乘用车密) 0.24265831278192818, (121,让广汽传祺拥有比肩合资的世界级品质,传祺) 0.23985767837453692, (15,我们在设计中还是有机会去给消费者意外的惊) 0.21561977849327923, (951,搜狐汽车:这个我们很早有积累了?,白清源) 0.204593196768207, (612,真正的靠技术推动,我们积累了很多资源,这) 0.19251874489715443, (782,除了全新上市的LEVIN雷凌之外,广汽丰田主) 0.19248053311846638, (210,车联网一定对车主有一定的价值,这里面我们) 0.1921777074753557, (849,汽车设计和工程设计往往成为发展中国家汽车) 0.19139255180500553)
232 ●空间:驾乘空间可满足家用,长城C30采用皮 List((226,●空间:载人储物空间足够日常家用,皮质座) 0.2703664801025661, (413,●储物空间多设置合理,观致3的储物空间表现) 0.2506234960697643, (475,能够获得非常大移动空间了,而在后排,昂科) 0.22281908658721572, (919,后排座椅是亮点;人性化储物空间丰富,长安) 0.20343313304907687, (122,进一步强化了长城C30的优势,为消费者提供) 0.20097038421176572, (430,在乘坐空间上,晨风带给我们的空间感受还是) 0.17836686733443674, (823,家用舒适性还是很不错的,这次佳乐共计有5款) 0.15326005196349493, (578,而且不少车型在最近几个月才“新鲜”上市,) 0.14875885782880913, (22,至于后排座椅的舒适性表现,思铂睿Si版本车) 0.1482747590294383, (556,腰部以及腿部的承托效果也很出色,只不过作) 0.1466919666282025)
982 我们可以发现混合动力款的油耗其实并不乐观 List((926,采用3.0升涡轮增压发动机,在8挡自动变速箱) 0.2949035009939314, (628,这不但保持普通旅行版本的舒适性与空间实用) 0.20280228556217705, (362,不过对于中国用户最关心的充电问题,宝马中) 0.18618869402330898, (798,搜狐汽车北京编辑从北京奥迪经销商(中汽力) 0.18134706774149742, (268,外观造型上新车的造型与现款普通版车型完全) 0.17379506239753093, (422,由于采用了独特设计,这款直列四缸发动机的) 0.17307506715209459, (347,G21项目组一方面要继续进行市销车的开发,) 0.17269390251709493, (909,动力并不激进,但是绝对有型,轴距从最初的2) 0.1724972359845319, (333,起亚汽车宣布将会在巴黎车展期间发布K5(海) 0.16283793812397732, (66,大量新车在4月集中上市或者发布,这其中就包) 0.1550123997087309)
273 【配图为2014款众泰T6001.5T手动尊贵型】, List((569,轴距尺寸几乎可媲美汉兰达,众泰T600的车身) 0.40508262121445704, (952,最大扭矩141N·m/4000rpm,相比海马M3的1.5L) 0.2886101774352213, (752,搭载6AT的1.6THP车型售价偏高,倒是众泰在) 0.2669235200457219, (875,【哈弗H6升级版】,【2013款长城H6升级版1.5) 0.15988001240179284, (976,从泰卡特跟保时捷的关系来看,我们可以看到) 0.13664353792509198, (406,标致2008车型未来也将搭载这款1.2THP发动机) 0.12948473042992487, (304,【此前曝光的全新奔驰C180申报目录图】,) 0.12640540510036014, (239,国产车型仅推出了1.4T车型,日前,我们从相) 0.11880795570371622, (479,动力方面:2015款哈弗H5搭载2.0L和2.0T汽油) 0.11316888573598233, (474,起亚K41.6T车型的内饰设计部分,就不像外观) 0.11267280376125026)
766 车展尚未结束,编辑就在《雷锋编辑部》微信 List((690,长安CS75在公告目录中正式出现,其硬朗的设) 0.39467565298677787, (164,不仅有法兰克福车展刚刚全球首发的CS75,) 0.2306838477806039, (756,睿骋,看点:长安首款中高级轿车,轴距2810m) 0.2000332843387217, (854,主要是增加了三款车型,分别是自动舒适型、) 0.15667503874908364, (960,劲炫CVT变速箱驾驶感受和逍客十分类似,平) 0.14207474099431963, (615,长安汽车特别是自主品牌乘用车的增长,坚持) 0.13960684399664977, (718,小型SUV市场的销量亚军是自主产品长城M4,) 0.13959252428862357, (585,在市委、市政府领导、长安汽车领导以及各大) 0.1308230785251635, (919,后排座椅是亮点;人性化储物空间丰富,长安) 0.13076938394467305, (446,取代了上一代的1.4T机械+涡轮增压发动机,) 0.12962463698820595)
253 丰田开发氢燃料电池汽车算是20年磨一剑,终 List((82,丰田计划向宝马提供燃料电池车驱动总成和氢) 0.5976756059646379, (549,但并不排除丰田因为该车型的定位而使用较为) 0.38660417115657253, (388,但是在整车外形方面已经被赋予了更多的量产) 0.2698028905556529, (347,G21项目组一方面要继续进行市销车的开发,) 0.15978050514097117, (78,实际上,电动车所遭遇的困境已不仅限于汽车) 0.14881709918304173, (681,(本标识采用的燃料消耗量数据是根据GB/T,) 0.13724304002256352, (940,(本标识采用的燃料消耗量数据是根据GB/T,) 0.1363814439933147, (754,店内大众新桑塔纳火热开售,购新桑塔纳部分) 0.13339129700766897, (799,(本标识采用的燃料消耗量数据是根据GB/T,) 0.12851826189535517, (646,搜狐汽车北京编辑从北京现代经销商(北京现) 0.12449225575256725)

使用spark TF-IDF特征计算文章间相似度相关推荐

  1. 欧几里得最短距离公式_推荐算法原理(二)欧几里得距离计算物品间相似度

    在上篇文章中介绍了如何利用余弦定理计算两个物品间的相似度:KiKlaus:推荐算法原理(一)余弦定理计算物品间相似度​zhuanlan.zhihu.com 这种计算方法虽然简单,但是在衡量空间两个向量 ...

  2. 基于深度学习的音乐推荐系统(三)使用已训练的卷积神经网络提取语谱图特征并计算图像间相似度

    该模块包含几部分: 调用训练好的并且已经保存的CNN模型(仅四层卷积层部分) 逐个读取tfrecords文件中的元素,并送入已训练好的CNN中,给每个图片提取128个特征 每首歌包含11个图片,即11 ...

  3. 用python实现网络查重(python爬取网页文字[网页结构不一致;网页编码格式];txt文本分割;chrome驱动;python计算文章余弦相似度)

    最近做项目有一个小功能是对用户上传的文章进行简单的网络查重.就是搜索特定主题,用这个关键词去在网上搜索文章再爬取.其中也借鉴了其他大佬的代码和文章,文章中会贴出.自己记录以下,以免日后遗忘.主要分为以 ...

  4. 文本特征抽取的向量空间模型(VSM)和TF/IDF方法

    文本特征抽取 两组小说,一组是爱情的,另一组是科幻的.我们能否用支持向量机训练一个模型,用来识别小说类型呢? 这个并不容易.因为支持向量机这类机器学习算法只能接受数学里面的向量作为输入.如果用它来做文 ...

  5. 【笔记】手敲版 TF IDF

    注1: 1.  涉及计算向向量夹角  [笔记]向量点乘(内积)和叉乘(外积.向量积):对两个向量执行点乘运算,是对这两个向量对应位一一相乘之后求和的操作,点乘的结果是一个标量:叉乘结果是一个向量,它垂 ...

  6. 关键词提取算法—TF/IDF算法

    关键词提取算法一般可分为有监督学习和无监督学习两类. 有监督的关键词提取方法可以通过分类的方式进行,通过构建一个较为完善的词表,然后判断每个文档与词表中的每个词的匹配程度,以类似打标签的方式,达到关键 ...

  7. 使用spark计算文档相似度

    2019独角兽企业重金招聘Python工程师标准>>> 1.TF-IDF文档转换为向量 以下边三个句子为例 罗湖发布大梧桐新兴产业带整体规划 深化伙伴关系,增强发展动力 为世界经济发 ...

  8. 搜索引擎:文本分类——TF/IDF算法

    原理 TFIDF的主要思想是:如果某个词或短语在一篇文章中出现的频率TF高,并且在其他文章中很少出现,则认为此词或者短语具有很好的类别区分能力,适合用来分类.TFIDF实际上是:TF * IDF,TF ...

  9. grafana计算不同时间的差值_大数据时代!如何基于Spark Streaming构建实时计算平台...

    随着互联网技术的迅速发展,用户对于数据处理的时效性.准确性与稳定性要求越来越高,如何构建一个稳定易用并提供齐备的监控与预警功能的实时计算平台也成了很多公司一个很大的挑战. 自2015年携程实时计算平台 ...

最新文章

  1. Maven实战(三)Eclipse构建Maven项目
  2. spring mvc 自动生成代码
  3. 简便的chrome插件安装
  4. html怎么给边框改样式,html里面怎么设置边框?html边框样式设置方法
  5. python-函数的闭包
  6. java数组表格输出_Java 如何将数组中的数据以表格形式输出
  7. 利用python中的csv库读写csv文件
  8. bag of word C++图像批量读写
  9. 【VS2010学习笔记】【错误调试】error LNK1123:转换到COFF期间失败;文件无效或者损坏
  10. python-第三课-字符串详解
  11. 【语音识别】基于matlab GUI DTW MFCC 0-9数字语音识别(带面板)【含Matlab源码 385期】
  12. 美化滚动条jquery.nicescroll.js
  13. 精进:如何成为一个很厉害的人--作者:采铜
  14. 关于计算机教育的图表,计算机教育箭头环形图表PPT模版.ppt
  15. matlab逐步线性回归分析法,[转载]matlab 回归分析
  16. Count Min Sketch: from Finding the Majority Element problem to heavy hitter problem,统计元素频率的利器
  17. git 撤销未提交的修改
  18. 【C#上位机】西门子1200PLC实用定位控制程序案例
  19. 【数据分析】——分析方法
  20. 某奏云资源网址打不开的N种处理方法(亲测好用)

热门文章

  1. 【源代码】Python制作的赛车小游戏,逆行飙车
  2. Remove Assignments to Parameters 移除对参数的赋值
  3. UDP打洞、P2P组网方式研究
  4. 学计算机前端技术学院,百度前端技术学院(任务)
  5. 局域网助手_爱思助手“正品配件检测”功能使用方法
  6. Learning to See in the Dark
  7. python便携版本_python便携版安装tk
  8. 币安再次″被死亡″引巨震,谁在蓄意做空币圈?
  9. Cisco 新兴网络技术考试答案
  10. 一些常见的项目管理 KPI