网上查找文章被转载数据

以前写过“使用spark计算文档相似度”,这次使用同样的技术,只是把比较的数据来自百度搜索结果,实现统计文章被别人转载的数据。
本文以“干货!一次kafka卡顿事故排查过程”这一文章来测试效果,搜索引擎对近期新文章的收录还是比较完整。

1、从百度搜索结果获取文章链接,采集文章内容
用到的技术:selenium,jsoup,HtmlSucker
用selenium模拟百度搜索“干货!一次kafka卡顿事故排查过程”这个标题,获取搜索结果并保存到数据库,
中间需要使用网页正文提取工具HtmlSucker(红薯家的)提取网页正文。
HtmlSucker提供两种正文提取算法“最大文本块”和“文本密度算法”,单用一种提取算法,部分网页提取不准确,所以在提取正文时作了如下处理提高准确度:去除全文链接后,分别用两种算法提取正文,最后选择提取内容最长的为结果。

Document doc = Jsoup.parse(content);
doc.select("a").remove();
String html = doc.toString();
Article article1 = HtmlSucker.select(HtmlSucker.MAX_TEXT_EXTRACTOR).parse(html);
String text1 = Jsoup.parse(article1.getContent()).text();
Article article2 = HtmlSucker.select(HtmlSucker.TEXT_DENSITY_EXTRACTOR).parse(html);
String text2 = Jsoup.parse(article2.getContent()).text();
if(text1.length() > text2.length()){
	content = text1;
}
else{
	content = text2;
}

测试代码只抓取了百度前10页数据,最终成功抓取到72条数据,以后数据可以扩充抓取搜狗、360、bing数据,数据如下图:

2、文本分词
之前的代码是使用jcseg这个中文分词库来使用,计算出来的结果的准确度不好,可能这种方式可能更适合文章内容上相似,而不是文本文字上相似。经过改进,按标点符号来分词,改进后的测试代码如下:

StringBuffer sff = new StringBuffer();
// 改为按标点符号分词
String regex = "[\\[\\]\\s ,。,、'::∶;?‘’“”〝〞ˆˇ﹕︰﹔﹖﹑•¨…\\.¸;!´?!~—ˉ"〃_~()〈〉‹›﹛﹜『』〖〗[]《》〔〕{}「」【】]";
String[] strs = content.split(regex);
for(String str:strs){
	if(str != null && !str.trim().equals("")){
		sff.append(str).append(" ");
	}
}

3、计算相似度
计算方法按“使用spark计算文档相似度”这文章,运算结果最终保存到mysql,运算结果如下图

后台系统

mysql数据

猜你喜欢

转载自my.oschina.net/penngo/blog/1818792