ClawHub Skills AI 文本人性化处理(Humanize AI text)技能使用参考手册

2026-03-04 18:37 更新

基于 Wikipedia 「AI 写作识别特征」指南开发的 AI 文本人性化处理工具,可改写 ChatGPT、Claude、GPT 等生成的文本,使其更自然并绕过 GPTZero、Turnitin、Originality.ai 等 AI 检测器。

一、工具简介

Humanize AI Text 是一套命令行工具集,核心功能包括AI 文本检测文本人性化改写,通过识别并修正 AI 写作的典型特征(如机械话术、格式痕迹、引用漏洞等),让生成式 AI 文本具备人类写作的自然性,从而规避各类 AI 检测器的识别。

工具核心依据:维基百科 - AI 写作识别特征
版本信息:v1.0.1
支持功能:

  • 检测 16 类 AI 写作典型特征
  • 批量/单文件改写 AI 文本
  • 对比改写前后的检测结果(问题数量、AI 概率等)

👤 作者:maximeprades
👉 Skills 下载地址:humanize-ai-text-1.0.1.zip

二、快速开始

2.1 基础命令

## 1. 检测文本中的 AI 特征
python scripts/detect.py 文本文件.txt


## 2. 将 AI 文本改写为人类风格(输出到新文件)
python scripts/transform.py 文本文件.txt -o 改写后文件.txt


## 3. 对比改写前后的检测结果(含问题数量、AI 概率变化)
python scripts/compare.py 文本文件.txt -o 改写后文件.txt

2.2 环境要求

  • Python 3.6+
  • 依赖:无(仅使用 Python 内置库:argparserejsonpathlib 等)
  • 支持系统:Windows/macOS/Linux

三、核心功能详解

3.1 AI 文本检测(detect.py)

功能说明

扫描文本中 16 类 AI 写作特征,输出「问题总数、AI 概率(极低/低/中/高/极高)、特征分类统计」等信息,是改写文本的前置分析工具。

使用命令

## 基础检测(输出完整报告)
python scripts/detect.py essay.txt


## 输出 JSON 格式结果(便于程序调用)
python scripts/detect.py essay.txt -j


## 仅输出核心评分(问题数、词数、AI 概率)
python scripts/detect.py essay.txt -s


## 从标准输入读取文本(无需文件)
echo "AI 生成的文本内容" | python scripts/detect.py

输出说明

指标 说明
总问题数 所有 AI 特征的加权计数(核心特征权重更高,如引用漏洞×5、聊天机器人话术×3)
AI 概率 基于问题数/词数密度判定:
- 极高:含引用漏洞/知识截止话术/聊天机器人痕迹
- 高:问题密度>5% 或问题数>30
- 中:问题密度>2% 或问题数>15
- 低:无上述特征
特征分类 按「关键/高风险/中风险/风格特征」分类展示具体问题(如「引用漏洞」「填充短语」等)

3.2 AI 文本改写(transform.py)

功能说明

自动修正 AI 文本中的典型特征,生成人类风格文本,支持「常规模式」和「激进模式」。

使用命令

## 基础改写(输出到控制台)
python scripts/transform.py essay.txt


## 改写并保存到文件
python scripts/transform.py essay.txt -o clean_essay.txt


## 激进模式改写(强化简化-ing 从句、减少破折号)
python scripts/transform.py essay.txt -a -o clean_essay.txt


## 静默模式(不输出改写日志)
python scripts/transform.py essay.txt -q -o clean_essay.txt

自动修正项

修正类型 示例
引用漏洞 移除 oaiciteturn0searchcontentReference 等标记
聊天机器人痕迹 删除「I hope this helps」「As an AI」等话术
格式清理 移除 Markdown 格式(粗体、## 标题、```代码块)
填充短语简化 「in order to」→「to」、「due to the fact that」→「because」
语法优化 「serves as a」→「is a」(避免动词规避)、弯引号→直引号
激进模式额外优化 简化「highlighting/underscoring」等-ing 从句、替换过量破折号

3.3 前后对比分析(compare.py)

功能说明

对比文本改写前后的检测结果,直观展示「问题数变化、AI 概率变化、改写细节」,验证改写效果。

使用命令

## 基础对比(输出控制台)
python scripts/compare.py essay.txt


## 对比并保存改写后的文本
python scripts/compare.py essay.txt -a -o clean_essay.txt

输出说明

对比维度 示例
问题数变化 「减少 12 个问题(提升 40%)」「增加 2 个问题」
AI 概率变化 🔴 极高 → 🟢 低
词数变化 原 500 词 → 改写后 489 词(-11)
改写细节 列出所有修改项(如「"serves as a" → "is a"」「移除「As an AI」句子」)

四、AI 检测特征分类(16 类)

基于维基百科「AI 写作识别特征」整理,工具会针对以下特征进行检测/修正:

4.1 关键特征(直接触发 AI 检测)

类别 示例
引用漏洞 oaiciteturn0searchcontentReference
知识截止话术 「as of my last training」「based on available information」
聊天机器人痕迹 「I hope this helps」「Great question!」「As an AI」
Markdown 格式 **粗体**## 标题 代码块 

4.2 高风险特征

类别 示例
AI 专属词汇 delve、tapestry、landscape、pivotal、underscore
意义夸大 「serves as a testament」「pivotal moment」「indelible mark」
营销话术 vibrant、groundbreaking、nestled、breathtaking
动词规避 用「serves as」代替「is」、「boasts」代替「has」

4.3 中风险特征

类别 示例
表面化-ing 结构 「highlighting the importance」「fostering collaboration」
填充短语 「in order to」「due to the fact that」「Additionally,」
模糊归因 「experts believe」「industry reports suggest」
固定句式 「Despite these challenges」「Future outlook」

4.4 风格特征

类别 示例
弯引号 ChatGPT 标志性的 “” 而非 ""
破折号滥用 过度使用 — 强调内容
否定并列 「Not only... but also」「It's not just... it's」
三段式套路 「innovation, inspiration, and insight」等强行三元组

五、带中文注释的核心代码

5.1 detect.py(AI 文本检测)

#!/usr/bin/env python3
"""
AI 文本检测脚本(基于维基百科AI写作识别特征)
功能:扫描文本中的16类AI写作特征,输出检测结果(问题数、AI概率、特征分类)
"""
import argparse, json, re, sys
from pathlib import Path
from dataclasses import dataclass, field


## 脚本目录路径
SCRIPT_DIR = Path(__file__).parent
## 加载检测规则配置文件(AI特征库)
PATTERNS = json.loads((SCRIPT_DIR / "patterns.json").read_text())


## 检测结果数据结构
@dataclass
class DetectionResult:
    significance_inflation: list = field(default_factory=list)  # 意义夸大
    notability_emphasis: list = field(default_factory=list)     # 显著性强调
    superficial_analysis: list = field(default_factory=list)   # 表面化分析
    promotional_language: list = field(default_factory=list)   # 营销话术
    vague_attributions: list = field(default_factory=list)     # 模糊归因
    challenges_formula: list = field(default_factory=list)     # 固定挑战句式
    ai_vocabulary: list = field(default_factory=list)          # AI专属词汇
    copula_avoidance: list = field(default_factory=list)       # 动词规避
    filler_phrases: list = field(default_factory=list)         # 填充短语
    chatbot_artifacts: list = field(default_factory=list)      # 聊天机器人痕迹
    hedging_phrases: list = field(default_factory=list)        # 模糊措辞
    negative_parallelisms: list = field(default_factory=list)  # 否定并列
    rule_of_three: list = field(default_factory=list)          # 三段式套路
    markdown_artifacts: list = field(default_factory=list)     # Markdown格式
    citation_bugs: list = field(default_factory=list)          # 引用漏洞
    knowledge_cutoff: list = field(default_factory=list)       # 知识截止话术
    curly_quotes: int = 0                                      # 弯引号数量
    em_dashes: int = 0                                         # 破折号数量
    total_issues: int = 0                                      # 总问题数(加权)
    ai_probability: str = "low"                                # AI概率(low/medium/high/very high)
    word_count: int = 0                                        # 文本词数


## 匹配文本中的指定特征列表
def find_matches(text: str, patterns: list) -> list:
    matches, lower_text = [], text.lower()
    for pattern in patterns:
        count = lower_text.count(pattern.lower())  # 不区分大小写统计匹配数
        if count > 0:
            matches.append((pattern, count))
    # 按匹配数降序排列
    return sorted(matches, key=lambda x: -x[1])


## 核心检测逻辑
def detect(text: str) -> DetectionResult:
    r = DetectionResult()
    r.word_count = len(text.split())  # 统计词数(按空格分割)

    
    # 1. 匹配各类AI特征
    r.significance_inflation = find_matches(text, PATTERNS["significance_inflation"])
    r.notability_emphasis = find_matches(text, PATTERNS["notability_emphasis"])
    r.superficial_analysis = find_matches(text, PATTERNS["superficial_analysis"])
    r.promotional_language = find_matches(text, PATTERNS["promotional_language"])
    r.vague_attributions = find_matches(text, PATTERNS["vague_attributions"])
    r.challenges_formula = find_matches(text, PATTERNS["challenges_formula"])
    r.ai_vocabulary = find_matches(text, PATTERNS["ai_vocabulary"])
    r.copula_avoidance = find_matches(text, list(PATTERNS["copula_avoidance"].keys()))
    r.filler_phrases = find_matches(text, list(PATTERNS["filler_replacements"].keys()))
    r.chatbot_artifacts = find_matches(text, PATTERNS["chatbot_artifacts"])
    r.hedging_phrases = find_matches(text, PATTERNS["hedging_phrases"])
    r.negative_parallelisms = find_matches(text, PATTERNS["negative_parallelisms"])
    r.rule_of_three = find_matches(text, PATTERNS["rule_of_three_patterns"])
    r.markdown_artifacts = find_matches(text, PATTERNS["markdown_artifacts"])
    r.citation_bugs = find_matches(text, PATTERNS["citation_bugs"])
    r.knowledge_cutoff = find_matches(text, PATTERNS["knowledge_cutoff"])

    
    # 2. 统计特殊符号
    r.curly_quotes = len(re.findall(r'[""'']', text))  # 弯引号
    r.em_dashes = text.count("—") + text.count(" -- ")  # 破折号(两种格式)

    
    # 3. 计算加权总问题数(核心特征权重更高)
    r.total_issues = (
        sum(c for _, c in r.significance_inflation) + 
        sum(c for _, c in r.notability_emphasis) +
        sum(c for _, c in r.superficial_analysis) + 
        sum(c for _, c in r.promotional_language) +
        sum(c for _, c in r.vague_attributions) + 
        sum(c for _, c in r.challenges_formula) +
        sum(c for _, c in r.ai_vocabulary) + 
        sum(c for _, c in r.copula_avoidance) +
        sum(c for _, c in r.filler_phrases) + 
        sum(c for _, c in r.chatbot_artifacts) * 3 +  # 聊天机器人痕迹×3
        sum(c for _, c in r.hedging_phrases) + 
        sum(c for _, c in r.negative_parallelisms) +
        sum(c for _, c in r.markdown_artifacts) * 2 +  # Markdown格式×2
        sum(c for _, c in r.citation_bugs) * 5 +       # 引用漏洞×5(最高权重)
        sum(c for _, c in r.knowledge_cutoff) * 3 +   # 知识截止话术×3
        r.curly_quotes + 
        (r.em_dashes if r.em_dashes > 3 else 0)       # 破折号仅统计超过3个的部分
    )

    
    # 4. 判定AI概率
    density = r.total_issues / max(r.word_count, 1) * 100  # 问题密度(每100词)
    if r.citation_bugs or r.knowledge_cutoff or r.chatbot_artifacts:
        r.ai_probability = "very high"  # 含关键特征→极高
    elif density > 5 or r.total_issues > 30:
        r.ai_probability = "high"       # 高密度/高问题数→高
    elif density > 2 or r.total_issues > 15:
        r.ai_probability = "medium"     # 中密度/中问题数→中
    return r


## 打印分类检测结果
def print_section(title: str, items: list, replacements: dict = None):
    if not items:
        return
    print(f"{title}:")
    for phrase, count in items:
        if replacements and phrase in replacements:
            repl = replacements[phrase]
            arrow = f' → "{repl}"' if repl else " → (移除)"
            print(f"  • \"{phrase}\"{arrow}: {count}次")
        else:
            print(f"  • {phrase}: {count}次")
    print()


## 打印完整检测报告
def print_report(r: DetectionResult):
    icons = {"very high": "🔴", "high": "🟠", "medium": "🟡", "low": "🟢"}
    print(f"\n{'='*60}")
    print(f"AI 检测报告 - 总计 {r.total_issues} 个问题({r.word_count} 词)")
    print(f"AI 概率: {icons.get(r.ai_probability, '')} {r.ai_probability.upper()}")
    print(f"{'='*60}\n")

    
    # 关键风险提示
    if r.citation_bugs:
        print("⚠️  高危:ChatGPT 引用漏洞")
        print_section("引用痕迹", r.citation_bugs)
    if r.knowledge_cutoff:
        print("⚠️  高危:知识截止话术")
        print_section("截止话术", r.knowledge_cutoff)
    if r.chatbot_artifacts:
        print("⚠️  高风险:聊天机器人痕迹")
        print_section("机器人话术", r.chatbot_artifacts)
    if r.markdown_artifacts:
        print("⚠️  风险:Markdown格式痕迹")
        print_section("Markdown标记", r.markdown_artifacts)

    
    # 其他特征分类展示
    print_section("意义夸大", r.significance_inflation)
    print_section("营销话术", r.promotional_language)
    print_section("AI专属词汇", r.ai_vocabulary)
    print_section("表面化-ing结构", r.superficial_analysis)
    print_section("动词规避", r.copula_avoidance, PATTERNS["copula_avoidance"])
    print_section("填充短语", r.filler_phrases, PATTERNS["filler_replacements"])
    print_section("模糊归因", r.vague_attributions)
    print_section("固定挑战句式", r.challenges_formula)
    print_section("模糊措辞", r.hedging_phrases)
    print_section("否定并列", r.negative_parallelisms)
    print_section("显著性强调", r.notability_emphasis)

    
    # 特殊符号统计
    if r.curly_quotes:
        print(f"弯引号数量: {r.curly_quotes} (ChatGPT 标志性特征)\n")
    if r.em_dashes > 3:
        print(f"破折号数量: {r.em_dashes} (使用过量)\n")
    if r.total_issues == 0:
        print("✓ 未检测到AI写作特征。\n")


## 主函数(命令行参数解析)
def main():
    parser = argparse.ArgumentParser(description="检测文本中的AI写作特征")
    parser.add_argument("input", nargs="?", help="输入文件路径(或从标准输入读取)")
    parser.add_argument("--json", "-j", action="store_true", help="输出JSON格式结果")
    parser.add_argument("--score-only", "-s", action="store_true", help="仅输出核心评分(问题数、词数、AI概率)")
    args = parser.parse_args()

    
    # 读取输入文本(文件/标准输入)
    text = Path(args.input).read_text() if args.input else sys.stdin.read()
    result = detect(text)

    
    # 按参数输出不同格式
    if args.json:
        print(json.dumps({
            "total_issues": result.total_issues, "word_count": result.word_count,
            "ai_probability": result.ai_probability, "significance_inflation": result.significance_inflation,
            "promotional_language": result.promotional_language, "ai_vocabulary": result.ai_vocabulary,
            "chatbot_artifacts": result.chatbot_artifacts, "citation_bugs": result.citation_bugs,
            "filler_phrases": result.filler_phrases, "curly_quotes": result.curly_quotes, "em_dashes": result.em_dashes,
        }, indent=2, ensure_ascii=False))  # 保留中文
    elif args.score_only:
        print(f"问题数: {result.total_issues} | 词数: {result.word_count} | AI概率: {result.ai_probability}")
    else:
        print_report(result)


if __name__ == "__main__":
    main()

5.2 transform.py(AI 文本改写)

#!/usr/bin/env python3
"""
AI 文本改写脚本
功能:修正AI文本中的典型特征,生成人类风格文本,支持常规/激进模式
"""
import argparse, json, re, sys
from pathlib import Path


## 脚本目录路径
SCRIPT_DIR = Path(__file__).parent
## 加载改写规则配置文件
PATTERNS = json.loads((SCRIPT_DIR / "patterns.json").read_text())


## 替换文本中的指定内容(边界匹配,避免部分匹配)
def replace_bounded(text: str, old: str, new: str) -> tuple[str, int]:
    # 短语/带逗号的内容:不区分大小写;单个单词:按单词边界匹配
    if " " in old or old.endswith(","):
        pattern = re.compile(re.escape(old), re.IGNORECASE)
    else:
        pattern = re.compile(r"\b" + re.escape(old) + r"\b", re.IGNORECASE)

    
    matches = pattern.findall(text)
    # 替换内容(有匹配才替换)
    new_text = pattern.sub(new, text) if matches else text
    return new_text, len(matches)


## 批量应用替换规则
def apply_replacements(text: str, replacements: dict) -> tuple[str, list]:
    changes = []  # 记录修改项
    for old, new in replacements.items():
        text, count = replace_bounded(text, old, new)
        if count:
            if new:
                changes.append(f'"{old}" → "{new}"')
            else:
                changes.append(f'"{old}" 已移除')
    return text, changes


## 修正弯引号为直引号(ChatGPT标志性特征)
def fix_quotes(text: str) -> tuple[str, bool]:
    original = text
    for old_quote, new_quote in PATTERNS["curly_quotes"].items():
        text = text.replace(old_quote, new_quote)
    # 返回修正后文本 + 是否修改
    return text, text != original


## 移除聊天机器人话术(如「I hope this helps」「As an AI」)
def remove_chatbot_sentences(text: str) -> tuple[str, list]:
    changes = []
    for artifact in PATTERNS["chatbot_artifacts"]:
        # 匹配包含该话术的整句(非.!?\n分隔)
        pattern = re.compile(r"[^.!?\n]*" + re.escape(artifact) + r"[^.!?\n]*[.!?]?\s*", re.IGNORECASE)
        if pattern.search(text):
            changes.append(f'移除包含"{artifact}"的句子')
            text = pattern.sub("", text)  # 移除整句
    return text, changes


## 移除Markdown格式痕迹(粗体、标题、代码块)
def strip_markdown(text: str) -> tuple[str, list]:
    changes = []
    if "**" in text:
        text = re.sub(r'\*\*([^*]+)\*\*', r'\1', text)  # 移除粗体标记
        changes.append("移除粗体格式")
    if re.search(r'^#{1,6}\s', text, re.MULTILINE):
        text = re.sub(r'^#{1,6}\s+', '', text, flags=re.MULTILINE)  # 移除标题标记
        changes.append("移除标题格式")
    if "```" in text:
        text = re.sub(r'```\w*\n?', '', text)  # 移除代码块标记
        changes.append("移除代码块格式")
    return text, changes


## 减少破折号使用(替换为逗号)
def reduce_em_dashes(text: str) -> tuple[str, int]:
    # 统计破折号数量(两种格式)
    count = text.count("—") + text.count(" -- ")
    text = re.sub(r"\s*—\s*", ", ", text)    # 替换em破折号
    text = re.sub(r"\s+--\s+", ", ", text)   # 替换双连字符
    return text, count


## 移除AI引用漏洞标记(如oaicite、turn0search)
def remove_citations(text: str) -> tuple[str, list]:
    changes = []
    # 引用漏洞正则匹配规则
    patterns = [
        (r'\[oai_citation:\d+[^\]]*\]\([^)]+\)', "oai_citation引用标记"),
        (r':contentReference\[oaicite:\d+\]\{[^}]+\}', "contentReference引用标记"),
        (r'turn0search\d+', "turn0search标记"), 
        (r'turn0image\d+', "turn0image标记"),
        (r'\?utm_source=(chatgpt\.com|openai)', "ChatGPT UTM参数"),
    ]
    for pattern, name in patterns:
        if re.search(pattern, text):
            text = re.sub(pattern, '', text)
            changes.append(f"移除{name}")
    return text, changes


## 简化-ing从句(激进模式)
def simplify_ing(text: str) -> tuple[str, list]:
    changes = []
    # 需简化的-ing关键词
    for word in ["highlighting", "underscoring", "emphasizing", "showcasing", "fostering"]:
        # 匹配包含该词的从句
        pattern = re.compile(rf',?\s*{word}\s+[^,.]+[,.]', re.IGNORECASE)
        if pattern.search(text):
            text = pattern.sub('. ', text)  # 简化为句点分隔
            changes.append(f"简化{word}从句")
    return text, changes


## 文本清理(多余空格、换行、逗号,首字母大写)
def clean(text: str) -> str:
    text = re.sub(r" +", " ", text)  # 多个空格→单个
    text = re.sub(r"\n{3,}", "\n\n", text)  # 三个以上换行→两个
    text = re.sub(r",\s*,", ",", text)  # 多余逗号
    # 句子首字母大写(.?!后接小写字母)
    text = re.sub(r"(^|[.!?]\s+)([a-z])", lambda m: m.group(1) + m.group(2).upper(), text)
    return text.strip()  # 移除首尾空格


## 核心改写逻辑
def transform(text: str, aggressive: bool = False) -> tuple[str, list]:
    all_changes = []  # 记录所有修改项

    
    # 1. 移除引用漏洞
    text, changes = remove_citations(text); all_changes.extend(changes)
    # 2. 移除Markdown格式
    text, changes = strip_markdown(text); all_changes.extend(changes)
    # 3. 移除聊天机器人话术
    text, changes = remove_chatbot_sentences(text); all_changes.extend(changes)
    # 4. 修正动词规避
    text, changes = apply_replacements(text, PATTERNS["copula_avoidance"]); all_changes.extend(changes)
    # 5. 简化填充短语
    text, changes = apply_replacements(text, PATTERNS["filler_replacements"]); all_changes.extend(changes)
    # 6. 修正弯引号
    text, fixed = fix_quotes(text)
    if fixed:
        all_changes.append("修正弯引号为直引号")

    
    # 7. 激进模式额外优化
    if aggressive:
        # 简化-ing从句
        text, changes = simplify_ing(text); all_changes.extend(changes)
        # 减少破折号
        text, count = reduce_em_dashes(text)
        if count > 2:
            all_changes.append(f"替换{count}个破折号为逗号")

    
    # 8. 最终文本清理
    return clean(text), all_changes


## 主函数(命令行参数解析)
def main():
    parser = argparse.ArgumentParser(description="将AI文本改写为人类风格")
    parser.add_argument("input", nargs="?", help="输入文件路径(或从标准输入读取)")
    parser.add_argument("-o", "--output", help="输出文件路径(保存改写后文本)")
    parser.add_argument("-a", "--aggressive", action="store_true", help="激进模式(强化改写)")
    parser.add_argument("-q", "--quiet", action="store_true", help="静默模式(不输出修改日志)")
    args = parser.parse_args()

    
    # 读取输入文本
    text = Path(args.input).read_text() if args.input else sys.stdin.read()
    # 执行改写
    result, changes = transform(text, aggressive=args.aggressive)

    
    # 输出修改日志(非静默模式)
    if not args.quiet and changes:
        print(f"修改项(共{len(changes)}项):", file=sys.stderr)
        for change in changes:
            print(f"  • {change}", file=sys.stderr)

    
    # 保存到文件/输出到控制台
    if args.output:
        Path(args.output).write_text(result)
        if not args.quiet:
            print(f"→ 改写后文本已保存到 {args.output}", file=sys.stderr)
    else:
        print(result)


if __name__ == "__main__":
    main()

5.3 compare.py(前后对比)

#!/usr/bin/env python3
"""
AI文本改写前后对比脚本
功能:对比文本改写前后的检测结果,展示问题数、AI概率、词数变化
"""
import argparse, sys
from pathlib import Path
from detect import detect  # 导入检测函数
from transform import transform  # 导入改写函数


def main():
    # 解析命令行参数
    parser = argparse.ArgumentParser(description="对比AI文本改写前后的检测结果")
    parser.add_argument("input", nargs="?", help="输入文件路径(或从标准输入读取)")
    parser.add_argument("-a", "--aggressive", action="store_true", help="使用激进模式改写")
    parser.add_argument("-o", "--output", help="改写后文本的保存路径")
    args = parser.parse_args()

    
    # 读取输入文本
    text = Path(args.input).read_text() if args.input else sys.stdin.read()

    
    # 1. 检测改写前的文本
    before = detect(text)
    # 2. 执行改写
    transformed, changes = transform(text, aggressive=args.aggressive)
    # 3. 检测改写后的文本
    after = detect(transformed)

    
    # AI概率对应图标
    icons = {"very high": "🔴", "high": "🟠", "medium": "🟡", "low": "🟢"}

    
    # 打印对比表头
    print(f"\n{'='*60}")
    print("改写前后对比报告")
    print(f"{'='*60}\n")

    
    print(f"{'指标':<25} {'改写前':<15} {'改写后':<15} {'变化':<10}")
    print(f"{'-'*60}")

    
    # 问题数变化
    issue_diff = after.total_issues - before.total_issues
    issue_sign = "+" if issue_diff > 0 else ""  # 正数加+号
    print(f"{'问题总数':<25} {before.total_issues:<15} {after.total_issues:<15} {issue_sign}{issue_diff}")

    
    # AI概率变化
    before_ai = f"{icons.get(before.ai_probability,'')} {before.ai_probability:<12}"
    after_ai = f"{icons.get(after.ai_probability,'')} {after.ai_probability:<12}"
    print(f"{'AI概率':<25} {before_ai} {after_ai}")

    
    # 词数变化
    word_diff = after.word_count - before.word_count
    print(f"{'词数':<25} {before.word_count:<15} {after.word_count:<15} {word_diff:+}")

    
    # 打印改写细节
    if changes:
        print(f"\n{'='*60}")
        print(f"改写详情(共{len(changes)}项)")
        print(f"{'='*60}")
        for change in changes:
            print(f"  • {change}")

    
    # 打印优化/恶化结果
    reduction = before.total_issues - after.total_issues
    if reduction > 0:
        # 计算优化百分比
        pct = (reduction / before.total_issues * 100) if before.total_issues else 0
        print(f"\n✓ 减少 {reduction} 个问题(优化 {pct:.0f}%)")
    elif reduction < 0:
        print(f"\n⚠ 问题数增加 {-reduction} 个")
    else:
        print(f"\n— 问题数无变化")

    
    # 保存改写后文本
    if args.output:
        Path(args.output).write_text(transformed)
        print(f"\n→ 改写后文本已保存到 {args.output}")


if __name__ == "__main__":
    main()

六、完整使用流程

步骤1:检测文本风险

## 扫描文本,确认AI特征分布
python scripts/detect.py my_essay.txt

输出示例:

============================================================
AI 检测报告 - 总计 28 个问题(500 词)
AI 概率: 🟠 HIGH
============================================================


⚠️  高危:聊天机器人痕迹
机器人话术:
  • "As an AI": 1次


⚠️  风险:Markdown格式痕迹
Markdown标记:
  • "**": 3次


意义夸大:
  • "pivotal moment": 2次
...

步骤2:改写文本并验证

## 激进模式改写并保存,同时对比结果
python scripts/compare.py my_essay.txt -a -o my_essay_human.txt

输出示例:

============================================================
改写前后对比报告
============================================================


指标                       改写前           改写后           变化
------------------------------------------------------------
问题总数                   28              7               -21
AI概率                     🟠 high         🟢 low          
词数                       500             489             -11


============================================================
改写详情(共12项)
============================================================
  • 移除包含"As an AI"的句子
  • 移除粗体格式
  • "pivotal moment" → "important moment"
  • 修正弯引号为直引号
...


✓ 减少 21 个问题(优化 75%)
→ 改写后文本已保存到 my_essay_human.txt

步骤3:最终验证

## 检测改写后的文本,确认AI概率达标
python scripts/detect.py my_essay_human.txt -s

输出示例:

问题数: 7 | 词数: 489 | AI概率: low

七、批量处理

7.1 批量检测所有文本文件

## 遍历当前目录下所有.txt文件,输出核心评分
for f in *.txt; do
  echo "=== $f ==="
  python scripts/detect.py "$f" -s
done

7.2 批量改写所有Markdown文件

## 遍历当前目录下所有.md文件,激进模式改写并保存为*_clean.md
for f in *.md; do
  python scripts/transform.py "$f" -a -o "${f%.md}_clean.md" -q
done

八、自定义改写规则

修改 scripts/patterns.json 文件可自定义检测/改写规则: 配置项 说明
ai_vocabulary 需要标记的AI专属词汇列表
significance_inflation 需要标记的意义夸大短语列表
filler_replacements 填充短语替换规则(键=原短语,值=替换后/空表示移除)
chatbot_artifacts 需要移除的聊天机器人话术列表
copula_avoidance 动词规避替换规则(如「serves as a」→「is a」)

示例:新增自定义填充短语替换

"filler_replacements": {
  // 原有规则
  "in order to": "to",
  // 新增规则
  "for the purpose of": "to",
  "on the basis of": "based on"
}
以上内容是否对您有帮助:
在线笔记
App下载
App下载

扫描二维码

下载编程狮App

公众号
微信公众号

编程狮公众号