当前位置:网站首页 >  攻略

基于SimHash算法的新媒体文章原创度检测与伪原创实操

时间:2026年06月13日 23:25:18 来源:易频IT社区

一、开发环境准备与依赖安装

在开始编写代码之前,必须确保本地环境中已经安装了Python解释器以及必要的第三方库。本指南基于Python 3.8版本开发,兼容Python 3.9及3.10版本。请勿使用Python 2.x版本,以免出现字符编码错误。

1. 安装Python解释器

如果尚未安装Python,请访问Python官网下载对应操作系统的安装包。下载地址为:https://www.python.org/downloads/。下载时,请务必勾选界面底部的"Add Python to PATH"选项,这将自动配置环境变量,避免后续在命令行中无法识别python命令。安装完成后,在终端或CMD中输入python --version,若显示版本号则说明安装成功。

2. 安装依赖库

本实操指南主要使用jieba库进行中文分词,使用numpy进行向量计算。打开终端(Windows下为CMD或PowerShell,Mac/Linux下为Terminal),依次执行以下命令进行安装:

```bash pip install jieba numpy ```

如果下载速度较慢,建议使用国内镜像源进行安装,执行以下命令:

```bash pip install jieba numpy -i https://pypi.tuna.tsinghua.edu.cn/simple ```

二、SimHash算法原理与检测模块开发

SimHash(Similarity Hash)是一种用于海量文本去重的局部敏感哈希算法。与MD5这种完全不同的内容产生完全不同哈希值的算法不同,SimHash使得相似的内容产生的哈希值也只有少部分位不同。通过计算两个SimHash值的汉明距离(即二进制串中不同位的个数),我们可以快速判断两篇文章的相似度。

我们将创建一个simhash.py文件,专门用于封装SimHash的计算逻辑。该模块需要实现分词、加权、合并、降维四个核心步骤。

基于SimHash算法的新媒体文章原创度检测与伪原创实操

核心代码实现:

```python import jieba import numpy as np class SimHash: def __init__(self, content): self.simhash_value = self._calculate(content) def _get_features(self, content): 使用jieba进行分词,并过滤掉停用词和单字 words = jieba.lcut(content) features = {} for word in words: if len(word) < 2: continue 简单的词频统计作为权重 features[word] = features.get(word, 0) + 1 return features def _calculate(self, content): features = self._get_features(content) 初始化64位的向量,用于存放加权累加结果 v = [0] 64 for word, weight in features.items(): 计算普通hash值,这里使用hash函数,注意Python在不同进程hash可能不同 实际生产环境建议使用hashlib.md5(word.encode('utf-8')).digest() 为了演示稳定性,这里使用hashlib import hashlib hash_code = int(hashlib.md5(word.encode('utf-8')).hexdigest(), 16) 对64位进行遍历 for i in range(64): 获取当前位的掩码 mask = 1 << i 如果hash_code的第i位是1,则加上权重,否则减去权重 if hash_code & mask: v[i] += weight else: v[i] -= weight 降维:生成最终的fingerprint fingerprint = 0 for i in range(64): if v[i] >= 0: fingerprint |= 1 << i return fingerprint def hamming_distance(self, other_hash): """ 计算两个SimHash值的汉明距离 """ x = self.simhash_value ^ other_hash.simhash_value dist = 0 while x: dist += 1 x &= x - 1 return dist def get_similarity(self, other_hash): """ 计算相似度百分比 """ dist = self.hamming_distance(other_hash) return (64 - dist) / 64.0 ```

上述代码中,_calculate方法是核心。它首先对文本进行分词并赋予权重,然后对每个词计算Hash值,根据Hash值的每一位是0还是1对64维向量进行加减操作,最后根据向量每一位的正负生成最终的64位指纹。

三、基于同义词替换的伪原创逻辑实现

为了提升新媒体文章的原创度,我们需要在检测到高相似度内容后进行改写。本节采用基于同义词词典的替换策略。为了保证零门槛落地,我们将同义词词典直接硬编码在配置字典中,实际生产中可以加载外部txt文件。

我们将创建一个rewriter.py文件,实现句子清洗和同义词随机替换功能。

核心代码实现:

```python import random import jieba class ContentRewriter: def __init__(self): 简易同义词库,key为原词,value为替换词列表 self.synonym_dict = { "非常": ["特别", "十分", "极其"], "优秀": ["卓越", "杰出", "优异"], "重要": ["关键", "核心", "首要"], "方法": ["方式", "手段", "途径"], "提升": ["提高", "增强", "改善"], "技术": ["科技", "技巧", "技能"], "展示": ["显示", "呈现", "表现"], "实现": ["达成", "完成", "落实"], "快速": ["迅速", "高效", "快捷"], "分析": ["解析", "研究", "探讨"] } def rewrite_sentence(self, text): """ 对输入文本进行分词,并根据同义词库进行随机替换 """ words = jieba.lcut(text) new_words = [] for word in words: 如果词在同义词库中,随机选择一个替换词 if word in self.synonym_dict: candidates = self.synonym_dict[word] 30%的概率进行替换,避免替换过于频繁导致语句不通顺 if random.random() < 0.3: new_words.append(random.choice(candidates)) else: new_words.append(word) else: new_words.append(word) return "".join(new_words) def batch_rewrite(self, text, max_loops=3): """ 批量重写,直到相似度降低或达到最大循环次数 """ current_text = text for _ in range(max_loops): new_text = self.rewrite_sentence(current_text) 如果没有发生变化,提前终止 if new_text == current_text: break current_text = new_text return current_text ```

请注意,rewrite_sentence方法中设置了30%的替换概率。这是为了防止过度替换导致文章语义完全崩坏。你可以根据实际需求调整这个概率值。

四、完整自动化脚本整合

现在我们将上述两个模块整合,创建一个主程序main.py。该程序将模拟一个实际场景:读取一篇“原创文章”作为对比库,然后读取一篇“待检测文章”,计算两者的相似度。如果相似度过高,则自动进行伪原创处理,直到相似度降低到安全阈值以下。

完整自动化脚本代码:

```python from simhash import SimHash from rewriter import ContentRewriter 阈值设置:汉明距离小于3(即相似度极高)才需要处理 DISTANCE_THRESHOLD = 3 def main(): 1. 准备数据 这里模拟数据库中已有的原创文章 original_article = """ 在新媒体运营中,内容原创度非常重要。提升原创度可以有效吸引搜索引擎的关注。 我们需要掌握多种技术手段,包括同义词替换、句式调整等。 Python是一种非常优秀的编程语言,适合进行文本分析。 """ 这里模拟我们要发布的新文章(假设它与原文高度相似) new_article = """ 在新媒体运营中,内容原创度非常关键。提升原创度可以快速吸引搜索引擎的关注。 我们需要掌握多种技术方式,包括同义词替换、句式调整等。 Python是一种特别优秀的编程语言,适合进行文本分析。 """ print(f" 原始对比库文章 \n{original_article}") print(f"\n 待检测文章 \n{new_article}") 2. 计算初始相似度 hash_original = SimHash(original_article) hash_new = SimHash(new_article) dist = hash_original.hamming_distance(hash_new) similarity = hash_original.get_similarity(hash_new) print(f"\n[初始状态] 汉明距离: {dist}, 相似度: {similarity:.2%}") 3. 判断是否需要伪原创处理 if dist < DISTANCE_THRESHOLD: print(f"警告:文章相似度过高(汉明距离 {dist} < {DISTANCE_THRESHOLD}),开始执行伪原创...") rewriter = ContentRewriter() processed_article = new_article 尝试多次重写直到满足条件 loop_count = 0 while loop_count < 5: loop_count += 1 processed_article = rewriter.batch_rewrite(processed_article) 重新计算Hash hash_processed = SimHash(processed_article) new_dist = hash_original.hamming_distance(hash_processed) new_similarity = hash_original.get_similarity(hash_processed) print(f"第 {loop_count} 次重写后 -> 汉明距离: {new_dist}, 相似度: {new_similarity:.2%}") if new_dist >= DISTANCE_THRESHOLD: print("伪原创成功,相似度已降低。") break print(f"\n 最终处理后的文章 \n{processed_article}") else: print("文章原创度检测通过,无需处理。") if __name__ == "__main__": main() ```

五、数据准备与实战运行

为了确保上述代码能够直接运行,请严格按照以下目录结构组织你的文件:

  • project_folder/
    • simhash.py (包含SimHash类)
    • rewriter.py (包含ContentRewriter类)
    • main.py (主程序入口)

1. 运行步骤

确保三个Python文件在同一目录下。在终端中进入该目录,执行以下命令启动程序:

```bash python main.py ```

2. 预期输出结果分析

运行成功后,你将看到控制台输出如下信息(具体数值可能因随机替换略有不同):

```text 原始对比库文章 在新媒体运营中,内容原创度非常重要。提升原创度可以有效吸引搜索引擎的关注。 我们需要掌握多种技术手段,包括同义词替换、句式调整等。 Python是一种非常优秀的编程语言,适合进行文本分析。 待检测文章 在新媒体运营中,内容原创度非常关键。提升原创度可以快速吸引搜索引擎的关注。 我们需要掌握多种技术方式,包括同义词替换、句式调整等。 Python是一种特别优秀的编程语言,适合进行文本分析。 [初始状态] 汉明距离: 2, 相似度: 96.88% 警告:文章相似度过高(汉明距离 2 < 3),开始执行伪原创... 第 1 次重写后 -> 汉明距离: 4, 相似度: 93.75% 伪原创成功,相似度已降低。 最终处理后的文章 在新媒体运营中,内容原创度非常关键。提升原创度可以迅速吸引搜索引擎的关注。 我们需要掌握多种技术方式,包括同义词替换、句式调整等。 Python是一种特别优秀的编程语言,适合进行文本解析。 ```

3. 进阶优化建议

当前方案是基于字典的简单替换。若要进一步提升原创度,建议在rewriter.py中引入更复杂的NLP逻辑,例如:

  • 句式调整: 识别“把字句”和“被字句”并进行互转。
  • 扩充词库: 下载哈工大《同义词词林》扩展版,加载到synonym_dict中,替换覆盖率将大幅提升。

通过本指南的操作,你已经搭建起了一个基础的自动化原创度检测与提升系统。这套逻辑可以直接集成到你的爬虫采集系统或CMS发布系统中,实现内容的自动化清洗。

相关推荐

最新

热门

推荐

精选

标签

易频IT社区是综合性互联网IT技术门户网站,专注分享网络技术、服务器运维、网络安全、编程开发、系统架构、云计算、大数据等行业干货,实时更新IT行业资讯、零基础教程、实战案例,为IT从业者、技术爱好者提供专业的学习交流平台。

Copyright © 2021-2026 易频IT社区. All Rights Reserved. 备案号:闽ICP备2023013482号 网站地图