文本相似度(小说去重)

1 篇文章 0 订阅

之前写了爬虫爬取小说,总文件大概70G。但如果换小说网站进行爬取会重复爬取同样的小说,产生不必要的空间浪费。
由于不同网站对小说命名不同,例如:小说名 斗罗大陆.txt,在小说网A命名为斗罗大陆,小说B<斗罗大陆>,小说C 斗罗大陆全集什么的。
如果从小说名来判断会有很多麻烦,并且有的小说网站小说名和小说内容严重不符,因此根据小说名来判断被否决。
随着研究的深入,发现一种可行方法。一篇文章由词组成,那么不同文章的词有很大概率是不同的。如果以词的分布来判断两篇文章是否相同是可行的。
第一步,首先将文章变为词语,首先借助了分词器。网上有开源代码,功能是将字符串分为字符串数组,单个字符串就是一个词。使用的分词器为 mahonia,github地址为https://github.com/axgle/mahonia。使用简单、易上手。
第二步,将字符串数组转换为map[string]int结构,其记录对应词出现的次数。到了这一步基本已经弄完,只需要选取合适的计算方法即可。
首先选择了 修正余弦相似度(Adjusted Cosine Similarity),经过微调对map中所有次数-5,提高准确率。不计微调数与权重,比如: 小说A中 我:5次 斗罗:3次 武器:2次. 小说B: 我:6次,武器:3次, 长剑:2次,那么其余弦相似为83.428%


修正余弦相似度
余弦相似度
但是发现有时两本大小相差1倍的小说相似度达到 90%,经过查询发现余弦相似度更加注重两个向量在方向上的差异,而不是距离。因此可能两本小说用词相似都但数量相差巨大时,修正余弦相似度较为不准确。
因此考虑第二种计算方法进行修正,最终选择jaccard相似度。jaccard相似度用于比较有限样本集之间的相似性和差异性,不知道合不合适先用在说。。
jaccard
以刚才例子计算相似度,结果为:(|6+3+3+2| - |5+2|)/(6+3+3+2)=50%,其相似度降低了很多进行了很好的修正。两者平均相似度为66.7%,其区分程度更大。
专门选取不同网站下载小说来进行测试,权重为词语长度,以下是对比结果:
酒神1.txt 酒神.txt a:0.967682 C:0.998191 j:0.937174
酒神1.txt 武动乾坤(天蚕).txt a:0.593385 C:0.845842 j:0.340929
酒神1.txt 啃星书库kenxingw.com-武动乾坤.txt a:0.593031 C:0.845635 j:0.340427
酒神1.txt 莽荒纪.txt a:0.547015 C:0.763532 j:0.330498
酒神1.txt 莽荒纪1.txt a:0.544322 C:0.757338 j:0.331306
酒神1.txt 莽荒纪2.txt a:0.544320 C:0.757337 j:0.331302
酒神1.txt 《全职高手》(精校版全本)作者:蝴蝶蓝.txt a:0.578364 C:0.866427 j:0.290301
酒神1.txt 斗罗大陆III龙王传说1.txt a:0.657501 C:0.899107 j:0.415895
酒神1.txt 全职高手(蝴蝶).txt a:0.577625 C:0.867506 j:0.287745
酒神1.txt 斗罗大陆III龙王传说.txt a:0.659314 C:0.899833 j:0.418796
酒神1.txt 啃星书库kenxingw.com-全职高手.txt a:0.578506 C:0.866762 j:0.290249
酒神.txt 武动乾坤(天蚕).txt a:0.591176 C:0.843790 j:0.338562
酒神.txt 啃星书库kenxingw.com-武动乾坤.txt a:0.590910 C:0.843591 j:0.338228
酒神.txt 莽荒纪.txt a:0.545312 C:0.763509 j:0.327114
酒神.txt 莽荒纪1.txt a:0.543690 C:0.757650 j:0.329730
酒神.txt 莽荒纪2.txt a:0.543684 C:0.757649 j:0.329718
酒神.txt 《全职高手》(精校版全本)作者:蝴蝶蓝.txt a:0.575477 C:0.864308 j:0.286646
酒神.txt 斗罗大陆III龙王传说1.txt a:0.655554 C:0.897006 j:0.414102
酒神.txt 全职高手(蝴蝶).txt a:0.574086 C:0.865221 j:0.282951
酒神.txt 斗罗大陆III龙王传说.txt a:0.657704 C:0.897861 j:0.417546
酒神.txt 啃星书库kenxingw.com-全职高手.txt a:0.575529 C:0.864626 j:0.286433
武动乾坤(天蚕).txt 啃星书库kenxingw.com-武动乾坤.txt a:0.996710 C:0.999981 j:0.993440
武动乾坤(天蚕).txt 莽荒纪.txt a:0.555449 C:0.775417 j:0.335482
武动乾坤(天蚕).txt 莽荒纪1.txt a:0.555235 C:0.773260 j:0.337210
武动乾坤(天蚕).txt 莽荒纪2.txt a:0.555229 C:0.773260 j:0.337199
武动乾坤(天蚕).txt 《全职高手》(精校版全本)作者:蝴蝶蓝.txt a:0.552836 C:0.821137 j:0.284534
武动乾坤(天蚕).txt 斗罗大陆III龙王传说1.txt a:0.580882 C:0.822520 j:0.339244
武动乾坤(天蚕).txt 全职高手(蝴蝶).txt a:0.552261 C:0.821915 j:0.282606
武动乾坤(天蚕).txt 斗罗大陆III龙王传说.txt a:0.582514 C:0.823738 j:0.341289
武动乾坤(天蚕).txt 啃星书库kenxingw.com-全职高手.txt a:0.552997 C:0.821443 j:0.284551
啃星书库kenxingw.com-武动乾坤.txt 莽荒纪.txt a:0.555231 C:0.775296 j:0.335166
啃星书库kenxingw.com-武动乾坤.txt 莽荒纪1.txt a:0.555173 C:0.773218 j:0.337127
啃星书库kenxingw.com-武动乾坤.txt 莽荒纪2.txt a:0.555170 C:0.773218 j:0.337122
啃星书库kenxingw.com-武动乾坤.txt 《全职高手》(精校版全本)作者:蝴蝶蓝.txt a:0.552470 C:0.820853 j:0.284087
啃星书库kenxingw.com-武动乾坤.txt 斗罗大陆III龙王传说1.txt a:0.580593 C:0.822278 j:0.338908
啃星书库kenxingw.com-武动乾坤.txt 全职高手(蝴蝶).txt a:0.551799 C:0.821627 j:0.281972
啃星书库kenxingw.com-武动乾坤.txt 斗罗大陆III龙王传说.txt a:0.582252 C:0.823503 j:0.341001
啃星书库kenxingw.com-武动乾坤.txt 啃星书库kenxingw.com-全职高手.txt a:0.552594 C:0.821155 j:0.284033
莽荒纪.txt 莽荒纪1.txt a:0.984064 C:0.998058 j:0.970069
莽荒纪.txt 莽荒纪2.txt a:0.984045 C:0.998058 j:0.970032
莽荒纪.txt 《全职高手》(精校版全本)作者:蝴蝶蓝.txt a:0.548221 C:0.804219 j:0.292224
莽荒纪.txt 斗罗大陆III龙王传说1.txt a:0.563255 C:0.782800 j:0.343709
莽荒纪.txt 全职高手(蝴蝶).txt a:0.548190 C:0.804971 j:0.291409
莽荒纪.txt 斗罗大陆III龙王传说.txt a:0.564059 C:0.783593 j:0.344525
莽荒纪.txt 啃星书库kenxingw.com-全职高手.txt a:0.548498 C:0.804490 j:0.292506
莽荒纪1.txt 莽荒纪2.txt a:0.999967 C:1.000000 j:0.999934
莽荒纪1.txt 《全职高手》(精校版全本)作者:蝴蝶蓝.txt a:0.545021 C:0.799901 j:0.290142
莽荒纪1.txt 斗罗大陆III龙王传说1.txt a:0.559142 C:0.776930 j:0.341353
莽荒纪1.txt 全职高手(蝴蝶).txt a:0.544549 C:0.800600 j:0.288497
莽荒纪1.txt 斗罗大陆III龙王传说.txt a:0.560434 C:0.777833 j:0.343034
莽荒纪1.txt 啃星书库kenxingw.com-全职高手.txt a:0.545163 C:0.800136 j:0.290190
莽荒纪2.txt 《全职高手》(精校版全本)作者:蝴蝶蓝.txt a:0.545019 C:0.799900 j:0.290137
莽荒纪2.txt 斗罗大陆III龙王传说1.txt a:0.559138 C:0.776930 j:0.341346
莽荒纪2.txt 全职高手(蝴蝶).txt a:0.544546 C:0.800600 j:0.288492
莽荒纪2.txt 斗罗大陆III龙王传说.txt a:0.560429 C:0.777833 j:0.343025
莽荒纪2.txt 啃星书库kenxingw.com-全职高手.txt a:0.545161 C:0.800135 j:0.290186
《全职高手》(精校版全本)作者:蝴蝶蓝.txt 斗罗大陆III龙王传说1.txt a:0.635169 C:0.884689 j:0.385649
《全职高手》(精校版全本)作者:蝴蝶蓝.txt 全职高手(蝴蝶).txt a:0.980862 C:0.999105 j:0.962619
《全职高手》(精校版全本)作者:蝴蝶蓝.txt 斗罗大陆III龙王传说.txt a:0.635735 C:0.885531 j:0.385940
《全职高手》(精校版全本)作者:蝴蝶蓝.txt 啃星书库kenxingw.com-全职高手.txt a:0.997628 C:0.999979 j:0.995277
斗罗大陆III龙王传说1.txt 全职高手(蝴蝶).txt a:0.635022 C:0.885465 j:0.384580
斗罗大陆III龙王传说1.txt 斗罗大陆III龙王传说.txt a:0.991381 C:0.998708 j:0.984054
斗罗大陆III龙王传说1.txt 啃星书库kenxingw.com-全职高手.txt a:0.635297 C:0.884980 j:0.385613
全职高手(蝴蝶).txt 斗罗大陆III龙王传说.txt a:0.635432 C:0.886276 j:0.384588
全职高手(蝴蝶).txt 啃星书库kenxingw.com-全职高手.txt a:0.982313 C:0.999223 j:0.965402
斗罗大陆III龙王传说.txt 啃星书库kenxingw.com-全职高手.txt a:0.635872 C:0.885819 j:0.385924

开头为小说名,a为平均相似度,c为余弦相似度,j为jaccard相似度。
从测试结果看 jaccard相似度很好的修正了相似度。
斗罗大陆III龙王传说1.txt 全职高手(蝴蝶).txt a:0.635022 C:0.885465 j:0.384580
斗罗大陆与全职高手为两本不同小说,其字数都为500万字左右,随着字数的上升所用到的词语也基本相同,导致余弦相似度高达88.54%,但jaccard相似度对次数出现的频率比较敏感,因此jaccard相似度只为38.45%。其平均值为63.5因此可以判断为两本不同小说。
如果需要对几万本小说互相进行对比,按目前这个算法首先获取所有小说的词语频率表储存起来。这一阶段需耗时95%以上的时间,然后再根据小说的大小进行排除,大小差距太大则跳过,然后进行相似度计算。

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值