分享网络营销推广知识,交流网络推广技术心得,分享编程实践经验

Python 实现文章原创度检测工具

Python 4℃ 0评论

在之前的博文《怎么写优质伪原创文章》中我有提到一篇优质伪原创文章的标准,其中有一条是「取任意段落在百度搜索时不得出现整句飘红」,这里需要强调的是,「整句飘红」只是检测文章原创度最基本的方式,搜索引擎在实际分析文章内容的过程中采用的是更复杂的方式,会涉及到同义词处理、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 实现文章原创度检测工具

喜欢 (0)
发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址