- 1、本文档共10页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
关于文本相似度计算-JaccardSimilarity和哈希签名函数
在目前这个信息过载的星球上,文本的相似度计算应用前景还是比较广泛的,他可以让人们过滤掉很多相似的新闻,比如在有哪些信誉好的足球投注网站引擎上,相似度太高的页面,只需要展示一个就行了,还有就是,考试的时候,可以用这个来防作弊,同样的,论文的相似度检查也是一个检查论文是否抄袭的一个重要办法。
文本相似度计算的应用场景
过滤相似度很高的新闻,或者网页去重
考试防作弊系统
论文抄袭检查
光第一项的应用就非常广泛。
文本相似度计算的基本方法
文本相似度计算的方法很多,主要来说有两种,一是余弦定律,二是JaccardSimilarity方法,余弦定律不在本文的讨论范围之内,我们主要说一下JaccardSimilarity方法。
JaccardSimilarity方法
JaccardSimilarity说起来非常简单,容易实现,实际上就是两个集合的交集除以两个集合的并集,所得的就是两个集合的相似度,直观的看就是下面这个图。
数学表达式是:
|S ∩ T|/|S ∪ T|
恩,基本的计算方法就是如此,而两个集合分别表示的是两个文本,集合中的元素实际上就是文本中出现的词语啦,我们需要做的就是把两个文本中的词语统计出来,然后按照上面的公式算一下就行了,其实很简单。
统计文本中的词语
关于统计文本中的词语,可以参考我的另外一篇博文一种没有语料字典的分词方法,文章中详细说明了如何从一篇文本中提取有价值的词汇,感兴趣的童鞋可以看看。
当然,本篇博客主要是说计算相似度的,所以词语的统计使用的比较简单的算法k-shingle算法,k是一个变量,表示提取文本中的k个字符,这个k可以自己定义。
简单的说,该算法就是从头挨个扫描文本,然后依次把k个字符保存起来,比如有个文本,内容是abcdefg,k设为2,那得到的词语就是ab,bc,cd,de,ef,fg。
得到这些词汇以后,然后统计每个词汇的数量,最后用上面的JaccardSimilarity算法来计算相似度。
具体的简单代码如下:
[python]?view plaincopyprint?
file_name_list=[/Users/wuyinghao/Documents/test1.txt,??
????????????????/Users/wuyinghao/Documents/test2.txt,??
????????????????/Users/wuyinghao/Documents/test3.txt]??
hash_contents=[]??
??
#获取每个文本的词汇词频表??
for?file_name?in?file_name_list:??
????hash_contents.append([getHashInfoFromFile(file_name,5),file_name])??
??????
??
for?index1,v1?in?enumerate(hash_contents):??
????for?index2,v2?in?enumerate(hash_contents):??
????????if(v1[1]?!=?v2[1]?and?index2index1):??
????????????intersection=calcIntersection(v1[0],v2[0])?#计算交集??
????????????union_set=calcUnionSet(v1[0],v2[0],intersection)?#计算并集??
????????????print?v1[1]+?||||||?+?v2[1]?+??similarity?is?:??+?str(calcSimilarity(intersection,union_set))?#计算相似度??
完整的代码可以看我的GitHub
如何优化
上述代码其实可以完成文本比较了,但是如果是大量文本或者单个文本内容较大,比较的时候势必占用了大量的存储空间,因为一个词汇表的存储空间大于文本本身的存储空间,这样,我们需要进行一下优化,如何优化呢,我们按照以下两个步骤来优化。
将词汇表进行hash
首先,我们将词汇表进行hash运算,把词汇表中的每个词汇hash成一个整数,这样存储空间就会大大降低了,至于hash的算法,网上有很多,大家可以查查最小完美哈希,由于我这里只是为了验证整套算法的可行性,在python中,直接用了字典和数组,将每个词汇变成了一个整数。
比如上面说的abcdefg的词汇ab,bc,cd,de,ef,fg,分别变成了[0,1,2,3,4,5]
使用特征矩阵来描述相似度
何为文本相似度的特征矩阵,我们可以这么来定义
一个特征矩阵
您可能关注的文档
- 关于兔子的cf名字:你心中有片海概要.ppt
- 103三重积分的概念与性质.ppt
- 关于农机具易损件之轴承的报告ppt概要.ppt
- 103学生实验:探究影响电流的因素.doc
- 10332016计量标准考核规范新版宣贯资料.ppt
- 信息安全数学基础PPT第一章第3节讲述.ppt
- 信息安全法律法规10-2016讲述.ppt
- 105J机组检修作业规程.doc
- 103+ATV71变频器终端使用(烯烃电仪周炎)_160202033605732301.ppt
- 103长度和时间测量的应用.ppt
- 河南省安阳市安阳县2021-2022学年七年级下学期期末英语试题(含听力)-4663.pdf
- 河南省许昌禹州市2019-2020学年七年级下学期期中历史试题-1925.pdf
- 河南省安阳市等2地2022-2023学年七年级下学期期末道德与法治试题-6686.pdf
- 2025年中考数学一轮专题复习强化练习第32课时 图形的平移与旋转 (含答案).docx
- 2025年中考数学一轮专题复习强化练习专项训练08 图形折叠的相关计算 (含答案).docx
- 第三章 函数 第5节 二次函数综合 学案(含答案)2025年中考数学人教版一轮复习.docx
- 2025年中考数学一轮专题复习强化练习专项训练05 常考相似模型 (含答案).pdf
- 2025年中考数学一轮专题复习强化练习第16课时 二次函数的综合应用 (含答案).pdf
- 2025年中考数学一轮专题复习强化练习专项训练09 利用“将军饮马”解决线段最值问题 (含答案).pdf
- 2025年中考数学一轮专题复习强化练习专项训练07 求阴影部分的面积 (含答案).pdf
文档评论(0)