在之前的博文《怎么写优质伪原创文章》中我有提到一篇优质伪原创文章的标准,其中有一条是「取任意段落在百度搜索时不得出现整句飘红」,这里需要强调的是,「整句飘红」只是检测文章原创度最基本的方式,搜索引擎在实际分析文章内容的过程中采用的是更复杂的方式,会涉及到同义词处理、TF-IDF、TextRank、文本指纹提取匹配等更高深的算法。但是对于生产高效的伪原创文章来说,能做到「不出现整句飘红」已经有足够的价值了。
在之前的文章中我也给出了原创度检测工具「爱发狗」。其实网上类似的工具其实有不少,除了爱发狗之外还有纸牌屋原创度检测工具、麒麟原创度检测等,斗牛 SEO 工具也提供一个类似的功能。但是根据我的测试,这其中只有爱发狗的检测方式更复杂更合理也更有参考价值。更复杂的算法意味着更多的资源消耗,所以爱发狗的原创检测是需要付费的,每天只有少量的免费额度。怎么才能进行大量的原创度检测呢?其实我们可以用 Python 来自己做一个类似的工具。
工具实现过程
1. 将需要检测的文本内容以标点符号为间隔分成多个小句
2. 统计每个小句的长度,去掉字数少于 10 的句子。如果句太短,在检索时会有较大的误差。
3. 统计剩余句的数量,根据结果大小随机取部分或全部句子来进行分析。这么做是因为如果文章太长,句太多分析时会消耗太多资源影响效率,因此抽样部分进行检测。
4. 将抽样的句逐个去百度搜索,取搜索结果中飘红的部分出来与句进行相似度匹配,相似度 90 以上视为匹配成功。这里的相似度算法用的是 fuzzywuzzy 库的算法。
5. 根据相似度匹配成功的句子的数量计算整篇文章的原创度,匹配为相似的句子越多,文章原创度越低,反之则越高。
完整源码如下
#!/usr/bin/env python3 import requests import re import random import time from bs4 import BeautifulSoup from fuzzywuzzy import fuzz def split_content(content): sep = r'。|,|?|!|“|”|:|;|…| |\n' sentences = re.split(sep, content) long_sentences = [] for x in sentences: x = re.sub(r'[a-zA-Z0-9]+', '', x) if (len(x) >= 10) and (len(x) < 20): long_sentences.append(x) return long_sentences def check_origin(samples): headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko', 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8', 'Accept-Language': 'en-US,en;q=0.5', 'Connection': 'keep-alive', 'Accept-Encoding': 'gzip, deflate'} a_count = 0 for s in samples: req = requests.get('http://www.baidu.com/s?wd=%s' % s, headers=headers) soup = BeautifulSoup(req.text, 'html.parser') abstracts = soup.find_all('div', 'c-abstract') ems = [] for a in abstracts: in_em = a.find_all('em') ems += in_em s_count = 0 for em in ems: ratio = fuzz.ratio(s, em.getText()) if ratio > 90: print('%s||%s||%s' % (ratio, em.getText(), s)) s_count += 1 if ratio > 90 else 0 if s_count >= 1: a_count += 1 time.sleep(3) print("原创度 %s%%" % round(100 - (a_count / len(samples) * 100), 2)) if __name__ == "__main__": content = input('输入需要检查的文章内容') sentences = split_content(content) sample_num = 10 if len(sentences) >= 10 else len(sentences) print('取 %s 个句子检测' % sample_num) samples = random.sample(sentences, sample_num) check_origin(sentences)
转载请注明:云深不知处 » Python 实现文章原创度检测工具