Paper Polisher Pro
Détection d'écriture IA (auto-évaluation du taux d'IA pour les auteurs) · conseils de polissage académique · normalisation terminologique · vérification des odeurs de traduction · rapport de qualité · vérification des étiquettes de conformité AIGC · attribution au niveau des paragraphes · pré-vérification pour revue. 100 % local, zéro téléchargement, zéro identifiant, bibliothèque standard pure (couche d'amélioration onnxruntime optionnelle).
⛔ Lois de fer
- Uniquement des chiffres reproductibles. Chaque métrique provient de l'évaluation tenue à l'écart (split de test) dans
eval/run_eval.py; les affirmations non étayées comme "taux de détection 100 % / F1 98,3 %" provenant de documents plus anciens ont été supprimées.- Aucun verdict sur les textes courts. Les textes de moins de 100 caractères obtiennent
risk=unknown(leçon de la communauté : les faux positifs sur les textes courts sont incontrôlables).- Les empreintes digitales attribuent, ne notent jamais. (Mesuré le 15-08-2026 : injecter des empreintes dans le détecteur a doublé les faux positifs humains.)
- Séparation étalonnage/évaluation. Le spectre, les poids et les seuils sont construits uniquement sur la moitié d'étalonnage ; la moitié de test est réservée pour l'évaluation finale (un AUROC dans l'échantillon de 0,9972 s'est effondré à un réel 0,9187 une fois divisé).
TL;DR
- Quoi : boîte à outils d'auto-évaluation du taux d'IA + polissage académique 100 % local pour les textes académiques chinois (modèle supervisé optionnel pour une meilleure précision ; l'anglais obtient des scores consultatifs basés uniquement sur les règles).
- Démarrage en 30 secondes :
python3 scripts/pp.py quickstart(démo zéro-modèle, zéro-fichier) ·python3 scripts/pp.py detect draft.txt --format json· suggestions de réécriture au niveau des phrases :python3 scripts/pp.py fix draft.txt· rapport d'auto-évaluation complet :python3 scripts/pp.py workflow draft.txt· environnement :python3 scripts/pp.py doctor(une seule entrée achemine toutes les sous-commandes) - Mesuré (tenu à l'écart, empreinte liée md5 2631df3d388b) : AUROC 0,9998 pré-2026 / 0,9400 génération actuelle ; FPR humain @medium 2,3%.
- Connaître les limites : les textes <100 caractères obtiennent
risk=unknownpar conception · le texte médical en mode dégradé est sur-noté · les documents mixtes humains+IA : le score au niveau du document n'est pas fiable (l'attribution des paragraphes est le signal exploitable) · auto-évaluation des auteurs uniquement — jamais pour contourner la détection institutionnelle d'IA. - Où regarder ensuite : scénarios pratiques dans
references/best-practices.md· matrice des limites de capacité ci-dessous · exemple de bout en bout dans § Démarrage rapide · FAQ regroupée en cinq parties (verdicts → modes et installation → sortie et interprétation → sécurité et vérification → outils et flux de travail), accédez directement au groupe dont vous avez besoin · historique complet dansCHANGELOG.md.
Routage des tâches en 30 secondes
| Vous voulez... | Exécutez | Documentation détaillée |
|---|---|---|
| Vérifier le taux d'IA d'un brouillon | pp.py detect draft.txt --format json | § Performances mesurées + matrice des limites ci-dessous |
| Voir quelles phrases ressemblent à de l'IA | pp.py fix draft.txt | pp_fix_suggest.py --help |
| Comparer avant/après votre réécriture | pp.py rewrite-check orig.txt rev.txt | FAQ : suggestions de réécriture |
| Traduire un PDF en conservant la mise en page | pp.py bundle pas ceci — utilisez doc-holmes | Outils connexes |
| Vérifier les conventions d'écriture | pp.py norm draft.txt | FAQ : normes stylistiques |
| Traiter par lot tout un dossier de thèse | ai_detector.py --batch DIR --csv s.csv --report r.html | FAQ : CSV par lot |
| Vérifier l'affirmation zéro-téléchargement | pp.py verify + pp.py test | Déclaration de sécurité |
| Pré-vérification pour revue (contexte disciplinaire) | ai_detector.py draft.txt --profile journal | § pré-vérification revue |
| Dépannage de l'environnement | pp.py doctor / pp.py freshness --status | FAQ : modes |
| Un tableau de bord visuel de tous les résultats | pp.py html-report draft.workflow.json -o report.html | Aide-mémoire du script : pp_report_html.py |
| Suivre un brouillon à travers les cycles de réécriture | pp.py trend répertoire_tours/ -o trend.html | Aide-mémoire du script : pp_trend.py |
| Vous ne savez pas quelle commande utiliser ? | pp.py recommend "réduire le taux d'IA de ce passage" | pp.py recommend --help |
Les trois limites les plus importantes (détails complets dans la matrice ci-dessous)
- Sur-note du registre médical en mode dégradé — FPR humain @medium basé uniquement sur les règles ≈59 % médical vs ≈2 % général ; ne faites confiance qu'aux verdicts
@highsur les textes médicaux, ou installez le modèle supervisé. - Documents mixtes humains+IA — AUROC au niveau du document 0,52-0,54 (limitation inhérente au calcul de moyenne) ; utilisez l'attribution des paragraphes comme un classement pour la révision humaine, jamais comme un verdict automatique.
- Périmètre de couverture des données — la banque de termes contient 2 344 termes médicaux/académiques (les textes non médicaux sont normalisés bas par conception) ; les couches stylistiques s'étalonnent sur la prose académique (entrée familière/narrative = consultatif uniquement). Périmètre par outil : matrice des sous-outils ci-dessous.
Intégrité académique
Cet outil est destiné aux auteurs qui auto-évaluent et améliorent la qualité de leur propre écriture — phrases plus claires, terminologie cohérente, style naturel. Il n'est pas conçu pour contourner les systèmes institutionnels de détection d'IA, et il ne doit pas être utilisé pour présenter un travail généré par l'IA comme étant rédigé par un humain. Suivez les politiques d'utilisation et de divulgation de l'IA de votre institution ; le aigc_label_check.py inclus existe pour vous aider à vous conformer aux règles de divulgation et d'étiquetage (par exemple, les mesures d'étiquetage de la Chine de septembre 2025) — pour déclarer correctement l'assistance de l'IA, pas pour la cacher. Chaque rapport de risque IA (ai_detector.py / deai_gate.py) porte un integrity_notice explicite à cet effet.
Performances mesurées (C-ReD + DetectRL-ZH, moitié de test tenue à l'écart, n=5 251)
Note sur le périmètre du corpus (v4.8.0) : le tableau de l'ère v3.0 ci-dessous a été mesuré sur la totalité de la moitié de test tenue à l'écart (n=5 251). Le corpus d'échantillon inclus est un sous-ensemble — sa moitié de test est n=1 304 ; chiffres reproductibles par corpus : règles uniquement (PP_NO_SUP) 0,8985 ancienne génération / 0,7149 génération actuelle, fusionné 0,9998 / 0,9400 (
eval/results/v480_rules_*.json,v35ctl_*.json; les clés de cache lient l'empreinte du modèle ET le mode du moteur).
| Métrique | Référence v2.0 | v3.0 règles+spectre | v3.1 +supervisé | v3.4 supervisé (enregistrement d'époque, ligne de remesure actuelle ci-dessous) |
|---|---|---|---|---|
| AUROC (moitié de test) | 0,7046 | 0,9187 | 0,9997 | 1,0 |
| TPR@FPR5% | 30,4% | 49,0% | 99,95% | 100% |
| TPR@FPR1% | 16,7% | 24,9% | 99,88% | 100% |
| FPR humain @p99 calibré | non mesuré | non mesuré | 3,56% (30/844) | 0,71% (6/844) |
| AUROC paraphrase/attaque mixte | 0,64 | 0,89 | 1,0 (dans le corpus) | 1,0 |
| Rappel attaque "assisté par IA" | — | — | 71,1% | 86,6% |
| Rappel OOD récit/ film simple | — | — | 1/6 | 5/6 supervisé uniquement · 6/6 fusion locale |
Remesure liée à l'empreinte v4.4.0 du modèle supervisé livré (md5
2631df3d388b) : AUROC 0,9998 (moitié de test, n_base=927), TPR@FPR1% 99,4%, FPR humain@medium 2,3% —eval/results/v35ctl_oldgen.json. Les colonnes ci-dessus sont conservées comme enregistrements d'époque (lignée de modèle antérieure ; les binaires n'étaient pas empreintés avant la v4.4.0).
Quelle colonne s'applique à vous ? (Navigation par calibre : les seules références actuelles citables sont v35ctl_* dans eval/results/CURRENT.md ; les colonnes de gauche sont des enregistrements d'époque.) Le paquet de base exécute le moteur règles+spectre v3.0 (colonne AUROC 0,9187, mesuré sur l'ensemble du corpus tenu à l'écart ; les références archivées pré-4.4.0 sont antérieures à la liaison d'empreinte — chaque résultat d'évaluation depuis la v4.4.0 porte le md5 du modèle déployé comme model_fp, les chiffres liés actuels dans eval/results/v35ctl_*.json). Les deux colonnes de droite nécessitent le modèle supervisé local optionnel (voir ci-dessous). Le moteur vous indique honnêtement dans quel mode vous êtes : chaque rapport porte degraded_mode / degraded_notice lorsque la couche supervisée est absente ou ignorée.
Matrice des limites de capacité (à lire avant de faire confiance à un détecteur)
| Scénario | Comportement |
|---|---|
| Prose académique chinoise, pile complète | Meilleur cas (AUROC 0,9998 tenu à l'écart, FPR humain@medium 2,3% — v4.4.0 lié à l'empreinte) |
| Paquet de base sans modèle | Règles+spectre (0,9187) ; texte médical sur-noté (FPR humain @medium basé uniquement sur les règles : ~59% médical vs ~2% général) → ne faites confiance qu'aux verdicts @high sur les textes médicaux |
| Texte anglais | Le filtrage linguistique ignore la couche supervisée entraînée en chinois par conception ; squelette anglais basé uniquement sur les règles, consultatif uniquement |
| Documents mixtes humains+IA | AUROC au niveau du document 0,52-0,54 (limitation inhérente au calcul de moyenne) ; AUROC au niveau du paragraphe 0,69 avec point de fonctionnement optimal calibré P=0,60 à 63% de couverture (references/para_thresholds.json) — en dessous du seuil de verdict automatique ; utilisez les classements pp_workflow.py/paragraph_report.py pour la révision humaine uniquement |
| Tête de régression de l'ampleur des modifications | ρ=0,540 — rapporté comme métadonnée, jamais utilisé dans les verdicts |
| Modèles de génération actuelle (échantillonnage 2026-09) | AUROC 0,9400 (remesure liée à l'empreinte v4.4.0, ensemble d'évaluation de 443 documents de génération actuelle : 9 familles incl. K3/K2.7/Qwen3.7-3.8/DS-V4/V4.1/GLM-5.3/M3) contre 0,9998 tenu à l'écart pré-2026 — un écart vérifié modeste. Le chiffre précédent 0,6542 contre 0,9022 était un artefact de mesure (rejeu de cache de score obsolète + lignée de modèle non vérifiée) ; les deux classes sont structurellement empêchées depuis la v4.4.0 (model_fp dans chaque JSON de résultat) |
| Texte familier / registre oral | La couche stylistique est calibrée sur la prose académique ; considérez les scores stylistiques comme consultatifs en dehors de ce registre |
Matrice de périmètre des sous-outils (domaine calibré de chaque sous-outil)
| Sous-outil | Domaine calibré | Comportement hors domaine |
|---|---|---|
| ai_detector / deai_gate | Prose académique chinoise (calibrée tenue à l'écart) | Texte médical sur-noté en mode dégradé ; anglais consultatif basé uniquement sur les règles ; entrée narrative/familière reçoit un avis de registre |
| paragraph_report / pp_rewrite_check | Mêmes critères de moteur que ci-dessus, par paragraphe | Mêmes limites ; rewrite_check compare deux brouillons selon des critères identiques |
| pp_fix_suggest | Bibliothèque de motifs d'écriture IA chinoise (registre académique) | Texte anglais obtient uniquement des vérifications de base des connecteurs/rythme ; les résultats sont des observations stylistiques, jamais des détections |
| term_check | Terminologie médicale/académique chinoise (banque de 2 344 termes) | Texte non médical : le taux de normalisation est bas — c'est le périmètre de la banque, pas une erreur ; --auto-fix respecte le contexte |
| translation_smell_check | Prose académique chinoise (motifs de traduction) | Texte source de style anglais : la sortie liste ses termes d'angle mort au lieu de prétendre à une couverture |
| style_distance | Stylométrie de la prose académique | En dehors du registre académique, le score stylistique est consultatif uniquement (indiqué dans la sortie) |
| style_norm | Conventions mécaniques — indépendantes du registre | Pas de score par conception ; les vérifications statistiques (chiffres/abréviations) sont faibles sur les échantillons courts et le mentionnent |
| aigc_label_check | Métadonnées de fichier / C2PA / déclarations d'étiquettes explicites | Pas un détecteur de contenu ; vérifie la conformité de l'étiquetage, pas la paternité |
| quality_report | Dimensions de lisibilité/qualité du manuscrit | Pas une mesure du taux d'IA ; les heuristiques de score sont génériques, non adaptées aux revues |
| docx_text | Extraction de texte .docx (préservant les paragraphes) | Pas un convertisseur PDF — les PDF sont rejetés avec un conseil de conversion (l'extraction de PDF chinois sans dépendance ne peut être garantie) |
| mode batch (--batch) | .txt/.md/.docx <5 Mo par fichier | Les fichiers >5 Mo sont ignorés par conception ; les fichiers .docx cryptés/uniquement image génèrent une erreur explicite, pas une sortie vide silencieuse |
Déclaration de sécurité et de comportement
- 100 % local : chaque fonctionnalité s'exécute sur l'appareil. La base de code ne fait aucun appel réseau sortant — pas de bibliothèques client réseau, pas d'utilitaires réseau. Le seul composant capable d'écouter est le formulaire HTTP MCP optionnel (
--transport http), qui se lie uniquement à la boucle locale 127.0.0.1 (liaison vérifiée par la règle de liste blanche du vérificateur AST) ; l'analyse AST traite tout écouteur sans liaison de boucle locale comme une violation. Vérifiez structurellement :python3 scripts/pp_verify.py(analyse au niveau AST ; sortie 0 = zéro appel réseau, tous les scripts compilent). La recherche textuelle héritéegrep -rEin "urllib|requests|socket|import http" scripts/peut montrer quelques chaînes d'URL dans les pieds de page de rapport — ce sont des données dans des constantes de chaîne, pas du code réseau ; le vérificateur AST distingue les deux. - Pas de téléchargement, pas d'identifiants : ne lit ni ne transmet d'identifiants, de clés ou de données personnelles ; les deux seules variables d'environnement sont
PP_NO_SUP(ignorer la couche supervisée) etPP_LANG(enchange la surface d'entrée depp.pyen anglais) — deux bascules de comportement locales. - Pas de persistance : ne crée pas de tâches planifiées, d'entrées de démarrage automatique ou de modifications de configuration système ; les fichiers temporaires (JSON inter-couche, texte de test) sont supprimés après utilisation.
- Pas de code à distance : ne charge pas de modèles ou de scripts à distance ; le modèle supervisé optionnel est placé par l'utilisateur dans un chemin local.
- Limite des données : lit/écrit uniquement les fichiers spécifiés par l'utilisateur, le répertoire temp système et ses propres répertoires de données de paquet (artefacts d'étalonnage/fraîcheur) ; les rapports vont uniquement là où l'utilisateur les dirige.
- Intégrité académique : voir la section ci-dessus — pour l'auto-évaluation de l'auteur et l'amélioration de la qualité avec une divulgation conforme aux politiques ; pas pour contourner la détection.
Contrat des codes de sortie (stable depuis la v5.8.0)
| Sortie | Signification | Cas typiques |
|---|---|---|
| 0 | Succès | rapport produit · passe verify zéro-réseau · suite de test verte |
| 1 | Exécuté mais non validé | échec d'exécution du moteur (conseil de récupération dans le message) · échecs test · dérive verify · dérive de la référence freshness |
| 2 | Erreur d'utilisation ou d'entrée | sous-commande inconnue · fichier manquant · texte de moins de 100 caractères · fichier d'entrée non analysable |
| 3 | Environnement non prêt | échec d'installation/vérification du modèle pp_setup.py — exécutez d'abord pp.py doctor |
Miroir programmatique : pp_api lève ValueError pour une entrée invalide (↔ sortie 2) et RuntimeError pour un échec d'exécution (↔ sortie 1), les deux portant un conseil de récupération dans le message. Ces codes sont une promesse de stabilité — les futures versions ne les réaffecteront pas.
Anti-patrons (avec la bonne façon de faire)
Cette section répertorie uniquement les règles de type jugement (quoi ne pas faire) ; les questions opérationnelles de type "comment faire" vivent dans
references/faq.md(consultable viapp.py faq <mot-clé>) — les deux se référencent mutuellement au lieu de se répéter.
- Ne soumettez pas <100 caractères en espérant un verdict —
risk=unknownest intentionnel (les faux positifs sur les textes courts sont incontrôlables). ✅ À la place : soumettez 300+ caractères, ou utilisez la vérification des normes stylistiques (pp.py norm) qui n'a pas de verdict et fonctionne sur des échantillons courts. - Ne faites pas confiance aux scores en mode dégradé sur les textes médicaux.
... [tronqué pour la traduction]