如果我们需要在海量的结构未知的网页库中找到和指定的网页相似度比较高的一些网页,我们该怎么办呢?本文提出的“一种通用的网页相似度检测算法”就是专门解决这个问题。
算法如下:
1、提取网页文本。这个提取步骤不要求精确,也没办法精确,因为你面对的是未知结构的网页,所以只需要提取去掉标签之后的文本即可。
2、对提取的文本进行分词。我们使用开源的中文分词组件word分词。
3、为每一个网页建立一个词向量,向量的维度就是两个网页的不重复词的并集,每一个维度的权重就是词频TF,我们这里忽略IDF也不影响。
4、计算词向量的余弦相似度或简单共有词。
5、相似度分值超过0.5的基本上可以视为这两个网页拥有相同的内容。
算法的实现代码来自本人的rank项目:
我的ITEYE(http://yangshangchuan.iteye.com)和OSCHINA(http://my.oschina.net/apdplat/blog)博客有很多同样的博文,主要目的是备份,这里刚好用来测试相似度检测算法的效果,从测试效果来看,相似度分值低于0.5的两篇博文,一篇是由于正文内容太少,不足以抵消干扰信息,另一篇是由于博文不是完整的内容,具体两种相似度判定情况如下所示:
判定相似性的方式一:简单共有词
检查的博文数:103,相似度大于等于0.5的博文数:103,相似度小于0.5的博文数:0
1、检查博文:一个月的时间让你的词汇量翻一翻,相似度分值:0.99
2、检查博文:1208个合成词,相似度分值:0.99
3、检查博文:分析996个词根在各大考纲词汇中的作用(五)总结精选篇,相似度分值:0.99
4、检查博文:根据76大细分词性对单词进行归组(二),相似度分值:0.99
5、检查博文:根据76大细分词性对单词进行归组(一),相似度分值:0.99
6、检查博文:2000个软件开发领域的高频特殊词及精选例句(一),相似度分值:0.99
7、检查博文:JDK源代码中最重要的4646个英语单词,相似度分值:0.98
8、检查博文:利用1189个精选句子彻底掌握2190个单词,相似度分值:0.98
9、检查博文:词组习语3054组,相似度分值:0.97
10、检查博文:英语单词后缀规则总结,相似度分值:0.97
11、检查博文:英语单词音近形似转化规律研究,相似度分值:0.97
12、检查博文:英语单词前缀规则总结,相似度分值:0.96
13、检查博文:192本软件著作用词分析(五)用词最复杂99级,相似度分值:0.95
14、检查博文:分析151个后缀在各大考纲词汇中的作用(三)总结精选篇,相似度分值:0.95
15、检查博文:二百多部软件著作中最重要的9224个英语单词,相似度分值:0.94
16、检查博文:JDK源代码以及200多部软件著作中出现的以连字符构造的1011个合成词,相似度分值:0.94
17、检查博文:分析在各大考纲词汇中既没有词根也没有前缀和后缀的独立单词,相似度分值:0.94
18、检查博文:分析113个前缀在各大考纲词汇中的作用(二)总结精选篇,相似度分值:0.94
19、检查博文:OSCHINA博文抄袭检查,相似度分值:0.94
20、检查博文:ITEYE博文抄袭检查,相似度分值:0.93
21、检查博文:一种防止用户生成内容站点出现商业广告以及非法有害等垃圾信息的方法,相似度分值:0.92
22、检查博文:分析在各大考纲词汇中同时拥有前缀后缀和词根的词(一),相似度分值:0.91
23、检查博文:软件业的奥斯卡奖:JOLT奖 之 最好的书,相似度分值:0.9
24、检查博文:计算ITEYE博文在百度的收录与排名情况,相似度分值:0.87
25、检查博文:APDPlat中数据库备份恢复的设计与实现,相似度分值:0.84
26、检查博文:中文分词算法 之 基于词典的逆向最大匹配算法,相似度分值:0.84
27、检查博文:Java中文分词组件 - word分词,相似度分值:0.84
28、检查博文:网络爬虫面临的挑战 之 链接构造,相似度分值:0.84
29、检查博文:APDPlat中的用户密码安全策略,相似度分值:0.83
30、检查博文:Hadoop发行版的比较与选择,相似度分值:0.81
31、检查博文:APDPlat拓展搜索之集成ElasticSearch,相似度分值:0.81
32、检查博文:大数据系列11:Gora – 大数据持久化,相似度分值:0.81
33、检查博文:APDPlat拓展搜索之集成Solr,相似度分值:0.81
34、检查博文:APDPlat如何自动建库建表并初始化数据?,相似度分值:0.8
35、检查博文:中文分词算法 之 基于词典的正向最大匹配算法,相似度分值:0.8
36、检查博文:Java应用系统中自动实时检测资源文件内容变化,相似度分值:0.78
37、检查博文:采集电子报纸,相似度分值:0.78
38、检查博文:Java开源项目cws_evaluation:中文分词器分词效果评估,相似度分值:0.78
39、检查博文:APDPlat中业务日志和监控日志的设计与实现,相似度分值:0.78
40、检查博文:APDPlat的系统启动和关闭流程剖析,相似度分值:0.77
41、检查博文:The Future of Compass & ElasticSearch,相似度分值:0.77
42、检查博文:APDPlat中领域模型的自描述机制与事件通知机制,相似度分值:0.76
43、检查博文:APDPlat中备份文件异地容灾机制之FTP上传,相似度分值:0.76
44、检查博文:QuestionAnsweringSystem v1.1 发布,人机问答系统,相似度分值:0.76
45、检查博文:APDPlat中的机器码生成机制,相似度分值:0.75
46、检查博文:大数据系列4:Hive – 基于HADOOP的数据仓库,相似度分值:0.74
47、检查博文:基于Nutch+Hadoop+Hbase+ElasticSearch的网络爬虫及搜索引擎,相似度分值:0.73
48、检查博文:软件熵:软件开发中推倒重来的过程就是软件熵不断增加的过程,相似度分值:0.73
49、检查博文:大数据系列1:在win7上安装配置Hadoop伪分布式集群,相似度分值:0.72
50、检查博文:new一个Object对象占用多少内存?,相似度分值:0.72
51、检查博文:中文分词效果对比,相似度分值:0.72
52、检查博文:运行nutch提示:0 records selected for fetching, exiting,相似度分值:0.72
53、检查博文:Amazon Dynamo的NWR模型,相似度分值:0.71
54、检查博文:配置Nutch模拟浏览器以绕过反爬虫限制,相似度分值:0.71
55、检查博文:Ubuntu上安装HADOOP多机完全分布式集群,相似度分值:0.7
56、检查博文:Java实现的基于模板的网页结构化信息精准抽取组件:HtmlExtractor,相似度分值:0.7
57、检查博文:APDPlat旗下10大开源项目,欢迎大家一起来参与,相似度分值:0.7
58、检查博文:中文分词算法 之 词典机制性能优化与测试,相似度分值:0.7
59、检查博文:给JAVA源代码文件统一地添加licence信息头,相似度分值:0.7
60、检查博文:技术框架太多,多的眼花缭乱,如何在众多选择中找到自己的方向?,相似度分值:0.7
61、检查博文:大数据系列6:HBase – 基于Hadoop的分布式数据库,相似度分值:0.69
62、检查博文:运行nutch报错:unzipBestEffort returned null,相似度分值:0.69
63、检查博文:JAVA调用CSDN接口发博文,相似度分值:0.69
64、检查博文:The Design of HDFS,相似度分值:0.68
65、检查博文:大数据系列7:Storm – 流计算,相似度分值:0.68
66、检查博文:使用JSoup+CSSPath采集和讯网人物信息,相似度分值:0.68
67、检查博文:大数据系列5:Pig – 大数据分析平台,相似度分值:0.68
68、检查博文:如何在你的应用中集成人机问答系统QuestionAnsweringSystem?,相似度分值:0.67
69、检查博文:如何解决BUG?,相似度分值:0.67
70、检查博文:Windows上安装HADOOP单机伪分布式集群,相似度分值:0.67
71、检查博文:分布式内存文件系统:Tachyon,相似度分值:0.66
72、检查博文:30个JDK类库源代码中最频繁出现的词的深度分析,相似度分值:0.65
73、检查博文:Ubuntu上安装HADOOP单机伪分布式集群,相似度分值:0.65
74、检查博文:使用CountDownLatch来模拟马拉松比赛,相似度分值:0.64
75、检查博文:大数据系列10:Spark – 内存计算,相似度分值:0.64
76、检查博文:Java8全新打造,英语学习supertool,相似度分值:0.64
77、检查博文:模拟浏览器的神器 - HtmlUnit,相似度分值:0.64
78、检查博文:对Nutch2.1抽象存储层的一些看法,相似度分值:0.64
79、检查博文:动态索引结构和索引更新机制,相似度分值:0.63
80、检查博文:大数据系列2:建立开发环境编写HDFS和Map Reduce程序,相似度分值:0.63
81、检查博文:Nutch的发展历程,相似度分值:0.63
82、检查博文:使用Java调用百度搜索,相似度分值:0.63
83、检查博文:分布式搜索算法,相似度分值:0.63
84、检查博文:Nutch抓取需要登录的网站,相似度分值:0.63
85、检查博文:Cygwin运行nutch报错:Failed to set permissions of path,相似度分值:0.62
86、检查博文:使用Java调用谷歌搜索,相似度分值:0.62
87、检查博文:HBase on CAP,相似度分值:0.6
88、检查博文:APDPlat的日志国际化实现方式,相似度分值:0.6
89、检查博文:Hadoop分布式文件系统HDFS和OpenStack对象存储系统Swift有何不同?,相似度分值:0.6
90、检查博文:大数据系列12:Hadoop2 – 全新的Hadoop,相似度分值:0.6
91、检查博文:SOLR4.2+NUTCH1.6,相似度分值:0.6
92、检查博文:大数据系列9:Mahout – 机器学习,相似度分值:0.59
93、检查博文:中文分词算法 之 基于词典的正向最小匹配算法,相似度分值:0.59
94、检查博文:中文分词算法 之 基于词典的逆向最小匹配算法,相似度分值:0.59
95、检查博文:使用Java8实现自己的个性化搜索引擎,相似度分值:0.59
96、检查博文:nutch2.1+mysql报错及解决,相似度分值:0.58
97、检查博文:搜索引擎的分片(shard)和副本(replica)机制,相似度分值:0.58
98、检查博文:Java中的null引用,超乎你想象,相似度分值:0.58
99、检查博文:配置Cygwin支持无密码SSH登陆,相似度分值:0.57
100、检查博文:给LUKE增加word分词器,相似度分值:0.57
101、检查博文:word分词器、ansj分词器、mmseg4j分词器、ik-analyzer分词器分词效果评估,相似度分值:0.57
102、检查博文:大数据系列3:用Python编写MapReduce,相似度分值:0.56
103、检查博文:大数据系列8:Sqoop – HADOOP和RDBMS数据交换,相似度分值:0.55
判定相似性的方式二:余弦相似度
检查的博文数:103,相似度大于等于0.5的博文数:101,相似度小于0.5的博文数:2
1、检查博文:二百多部软件著作中最重要的9224个英语单词,相似度分值:0.99
2、检查博文:JDK源代码中最重要的4646个英语单词,相似度分值:0.99
3、检查博文:JDK源代码以及200多部软件著作中出现的以连字符构造的1011个合成词,相似度分值:0.99
4、检查博文:一种防止用户生成内容站点出现商业广告以及非法有害等垃圾信息的方法,相似度分值:0.99
5、检查博文:利用1189个精选句子彻底掌握2190个单词,相似度分值:0.99
6、检查博文:分析在各大考纲词汇中同时拥有前缀后缀和词根的词(一),相似度分值:0.98
7、检查博文:采集电子报纸,相似度分值:0.98
8、检查博文:Java开源项目cws_evaluation:中文分词器分词效果评估,相似度分值:0.98
9、检查博文:大数据系列11:Gora – 大数据持久化,相似度分值:0.98
10、检查博文:2000个软件开发领域的高频特殊词及精选例句(一),相似度分值:0.97
11、检查博文:ITEYE博文抄袭检查,相似度分值:0.97
12、检查博文:OSCHINA博文抄袭检查,相似度分值:0.97
13、检查博文:中文分词算法 之 基于词典的逆向最大匹配算法,相似度分值:0.97
14、检查博文:网络爬虫面临的挑战 之 链接构造,相似度分值:0.97
15、检查博文:英语单词音近形似转化规律研究,相似度分值:0.97
16、检查博文:APDPlat中数据库备份恢复的设计与实现,相似度分值:0.96
17、检查博文:1208个合成词,相似度分值:0.96
18、检查博文:分析996个词根在各大考纲词汇中的作用(五)总结精选篇,相似度分值:0.96
19、检查博文:中文分词算法 之 基于词典的正向最大匹配算法,相似度分值:0.96
20、检查博文:分析113个前缀在各大考纲词汇中的作用(二)总结精选篇,相似度分值:0.96
21、检查博文:分析151个后缀在各大考纲词汇中的作用(三)总结精选篇,相似度分值:0.96
22、检查博文:Java应用系统中自动实时检测资源文件内容变化,相似度分值:0.96
23、检查博文:Java中文分词组件 - word分词,相似度分值:0.96
24、检查博文:英语单词后缀规则总结,相似度分值:0.96
25、检查博文:英语单词前缀规则总结,相似度分值:0.96
26、检查博文:APDPlat中领域模型的自描述机制与事件通知机制,相似度分值:0.95
27、检查博文:词组习语3054组,相似度分值:0.95
28、检查博文:APDPlat中的用户密码安全策略,相似度分值:0.95
29、检查博文:APDPlat拓展搜索之集成Solr,相似度分值:0.95
30、检查博文:根据76大细分词性对单词进行归组(一),相似度分值:0.94
31、检查博文:大数据系列6:HBase – 基于Hadoop的分布式数据库,相似度分值:0.94
32、检查博文:大数据系列4:Hive – 基于HADOOP的数据仓库,相似度分值:0.94
33、检查博文:运行nutch提示:0 records selected for fetching, exiting,相似度分值:0.94
34、检查博文:计算ITEYE博文在百度的收录与排名情况,相似度分值:0.93
35、检查博文:软件业的奥斯卡奖:JOLT奖 之 最好的书,相似度分值:0.92
36、检查博文:192本软件著作用词分析(五)用词最复杂99级,相似度分值:0.91
37、检查博文:APDPlat中的机器码生成机制,相似度分值:0.91
38、检查博文:APDPlat拓展搜索之集成ElasticSearch,相似度分值:0.91
39、检查博文:APDPlat中业务日志和监控日志的设计与实现,相似度分值:0.91
40、检查博文:根据76大细分词性对单词进行归组(二),相似度分值:0.9
41、检查博文:使用JSoup+CSSPath采集和讯网人物信息,相似度分值:0.9
42、检查博文:APDPlat中备份文件异地容灾机制之FTP上传,相似度分值:0.89
43、检查博文:使用CountDownLatch来模拟马拉松比赛,相似度分值:0.89
44、检查博文:配置Nutch模拟浏览器以绕过反爬虫限制,相似度分值:0.89
45、检查博文:一个月的时间让你的词汇量翻一翻,相似度分值:0.87
46、检查博文:APDPlat如何自动建库建表并初始化数据?,相似度分值:0.87
47、检查博文:给JAVA源代码文件统一地添加licence信息头,相似度分值:0.87
48、检查博文:Amazon Dynamo的NWR模型,相似度分值:0.85
49、检查博文:Ubuntu上安装HADOOP多机完全分布式集群,相似度分值:0.84
50、检查博文:Java实现的基于模板的网页结构化信息精准抽取组件:HtmlExtractor,相似度分值:0.83
51、检查博文:new一个Object对象占用多少内存?,相似度分值:0.83
52、检查博文:Hadoop发行版的比较与选择,相似度分值:0.83
53、检查博文:大数据系列5:Pig – 大数据分析平台,相似度分值:0.83
54、检查博文:大数据系列1:在win7上安装配置Hadoop伪分布式集群,相似度分值:0.82
55、检查博文:中文分词算法 之 词典机制性能优化与测试,相似度分值:0.82
56、检查博文:运行nutch报错:unzipBestEffort returned null,相似度分值:0.81
57、检查博文:使用Java调用百度搜索,相似度分值:0.81
58、检查博文:The Future of Compass & ElasticSearch,相似度分值:0.8
59、检查博文:APDPlat的系统启动和关闭流程剖析,相似度分值:0.79
60、检查博文:JAVA调用CSDN接口发博文,相似度分值:0.78
61、检查博文:模拟浏览器的神器 - HtmlUnit,相似度分值:0.78
62、检查博文:使用Java调用谷歌搜索,相似度分值:0.77
63、检查博文:分析在各大考纲词汇中既没有词根也没有前缀和后缀的独立单词,相似度分值:0.76
64、检查博文:中文分词效果对比,相似度分值:0.76
65、检查博文:中文分词算法 之 基于词典的逆向最小匹配算法,相似度分值:0.76
66、检查博文:Ubuntu上安装HADOOP单机伪分布式集群,相似度分值:0.76
67、检查博文:动态索引结构和索引更新机制,相似度分值:0.75
68、检查博文:大数据系列9:Mahout – 机器学习,相似度分值:0.75
69、检查博文:中文分词算法 之 基于词典的正向最小匹配算法,相似度分值:0.75
70、检查博文:基于Nutch+Hadoop+Hbase+ElasticSearch的网络爬虫及搜索引擎,相似度分值:0.75
71、检查博文:大数据系列7:Storm – 流计算,相似度分值:0.74
72、检查博文:大数据系列10:Spark – 内存计算,相似度分值:0.74
73、检查博文:大数据系列12:Hadoop2 – 全新的Hadoop,相似度分值:0.74
74、检查博文:Nutch的发展历程,相似度分值:0.74
75、检查博文:分布式内存文件系统:Tachyon,相似度分值:0.73
76、检查博文:软件熵:软件开发中推倒重来的过程就是软件熵不断增加的过程,相似度分值:0.72
77、检查博文:APDPlat的日志国际化实现方式,相似度分值:0.71
78、检查博文:Windows上安装HADOOP单机伪分布式集群,相似度分值:0.71
79、检查博文:技术框架太多,多的眼花缭乱,如何在众多选择中找到自己的方向?,相似度分值:0.7
80、检查博文:QuestionAnsweringSystem v1.1 发布,人机问答系统,相似度分值:0.69
81、检查博文:Java8全新打造,英语学习supertool,相似度分值:0.69
82、检查博文:APDPlat旗下10大开源项目,欢迎大家一起来参与,相似度分值:0.65
83、检查博文:Nutch抓取需要登录的网站,相似度分值:0.65
84、检查博文:大数据系列8:Sqoop – HADOOP和RDBMS数据交换,相似度分值:0.64
85、检查博文:Cygwin运行nutch报错:Failed to set permissions of path,相似度分值:0.64
86、检查博文:大数据系列3:用Python编写MapReduce,相似度分值:0.64
87、检查博文:大数据系列2:建立开发环境编写HDFS和Map Reduce程序,相似度分值:0.64
88、检查博文:给LUKE增加word分词器,相似度分值:0.63
89、检查博文:分布式搜索算法,相似度分值:0.63
90、检查博文:如何解决BUG?,相似度分值:0.62
91、检查博文:nutch2.1+mysql报错及解决,相似度分值:0.61
92、检查博文:The Design of HDFS,相似度分值:0.61
93、检查博文:如何在你的应用中集成人机问答系统QuestionAnsweringSystem?,相似度分值:0.6
94、检查博文:30个JDK类库源代码中最频繁出现的词的深度分析,相似度分值:0.59
95、检查博文:Hadoop分布式文件系统HDFS和OpenStack对象存储系统Swift有何不同?,相似度分值:0.59
96、检查博文:SOLR4.2+NUTCH1.6,相似度分值:0.58
97、检查博文:搜索引擎的分片(shard)和副本(replica)机制,相似度分值:0.57
98、检查博文:配置Cygwin支持无密码SSH登陆,相似度分值:0.54
99、检查博文:HBase on CAP,相似度分值:0.54
100、检查博文:对Nutch2.1抽象存储层的一些看法,相似度分值:0.53
101、检查博文:使用Java8实现自己的个性化搜索引擎,相似度分值:0.52
102、检查博文:Java中的null引用,超乎你想象,相似度分值:0.49
103、检查博文:word分词器、ansj分词器、mmseg4j分词器、ik-analyzer分词器分词效果评估,相似度分值:0.26