ig-human
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
Chineseig-human
ig-human
Two tools live in this folder and they both actually run. Use them. Do not
eyeball this.
bash
python3 humanize.py draft.txt --report # clean it, show what changed
python3 detect.py draft.txt # score it, five checks
python3 detect.py before.txt after.txt # prove the deltaBoth read : 154 stock words and phrases with plain-English
replacements, 18 invisible character classes, 11 typographic substitutions and
16 structural tells. The last block of each list is Instagram-specific, the
vocabulary that only shows up in captions and voiceovers. It is meant to be
edited. If the user has a word they always use that the lexicon strips, take it
out of the file.
slop.json此文件夹中有两个工具,而且它们都能实际运行。请使用它们,不要靠肉眼判断。
bash
python3 humanize.py draft.txt --report # clean it, show what changed
python3 detect.py draft.txt # score it, five checks
python3 detect.py before.txt after.txt # prove the delta两者都会读取 :其中包含 154 个陈词滥调词汇及短语及其平实英文替代词、18 类隐形字符、11 项排版替换规则和 16 类结构性特征。每个列表的最后一部分都专门用于 Instagram,包含只会出现在 caption 和 voiceover 中的词汇。这些列表本就应由你自行编辑。如果用户有一个经常使用、但会被词表删除的词,就把它从文件中移除。
slop.jsonWhy this matters more on Instagram than it looks
为什么这件事在 Instagram 上比看上去更重要
Captions are short and scripts get said out loud. A written-sounding line in a
600-character caption is a larger share of the text than the same line in an
essay, and a voiceover that nobody could say naturally is obvious in the first
take. The tell here is not a detector flagging the post. The tell is a person
scrolling past something that reads like a brand, or a creator stumbling over
their own script.
caption 篇幅很短,而 script 会被念出来。在一条 600 字符的 caption 中,一句听起来像书面语的表达所占的比例,比同一句出现在文章中更高;而一段谁都无法自然说出口的 voiceover,在第一遍录制时就会显得很明显。这里的破绽并不是检测器给帖子打上了标记,而是有人刷到一段读起来像品牌文案的文字,或者创作者念自己的 script 时磕磕绊绊。
What gets fixed automatically
自动修复的内容
1. Invisible characters. Zero-width spaces and joiners, word joiners, soft
hyphens, byte-order marks, Unicode tag characters, invisible separators,
non-breaking and narrow spaces. A keyboard does not produce these. They survive
copy-paste, they are invisible in every editor, and they are the most
mechanical thing in generated text. deletes every one, including
any remaining Unicode format character it does not have a name for.
humanize.py2. Typography. Em dash to comma, en dash to hyphen, curly quotes to
straight, ellipsis to three dots, bullet character to hyphen. The em dash pass
is the one that matters: it collapses the dash to a comma and then cleans up
the double punctuation and orphaned periods that leaves behind.
3. The slop lexicon. delve, leverage, robust, seamless, crucial, testament
to, "in today's fast-paced world", plus the Instagram block: "stop scrolling",
"in today's video", "follow for more", "tag someone who needs this", "the
algorithm loves", "run don't walk". Each swapped for a plain word or deleted,
with capitalisation preserved and URLs left untouched.
1. 隐形字符。 包括零宽空格和连接符、单词连接符、软连字符、字节顺序标记、Unicode 标签字符、隐形分隔符、不换行空格和窄空格。键盘不会输入这些字符。它们能在复制粘贴后残留,在任何编辑器中都不可见,也是生成文本中最机械的痕迹。 会将它们全部删除,包括它无法归类的任何剩余 Unicode 格式字符。
humanize.py2. 排版。 em dash 转为逗号、en dash 转为连字符、弯引号转为直引号、省略号转为三个点、项目符号字符转为连字符。em dash 处理流程尤其重要:它会先把破折号替换成逗号,再清理由此产生的重复标点和孤立句号。
3. 套话词表。 delve、leverage、robust、seamless、crucial、testament to、“in today's fast-paced world”,以及 Instagram 专属词表中的“stop scrolling”“in today's video”“follow for more”“tag someone who needs this”“the algorithm loves”“run don't walk”。每个词都会替换为平实用词或直接删除,同时保留大小写形式,并保持 URL 不变。
What does NOT get fixed automatically
不会自动修复的内容
Structural tells get flagged, not rewritten, because changing the shape of
a sentence needs judgement:
- "It's not just X, it's Y" and "not only X but also Y"
- Rule-of-three triads
- Rhetorical one-word question lines: "The result?"
- The video preamble: "in this video I'm going to show you"
- Emoji bullet lists
- Three or more shouted words in a row
- Hashtag walls
- Reflex bait: "follow for more", "tag someone who", "double tap if"
That list is your job. Rewrite each flagged line by hand, keeping the meaning,
then re-run . This is the part that moves the score from REVIEW to
PASS, and it is the part a script cannot do.
detect.py结构性特征只会被标记,不会自动改写,因为调整句子结构需要人工判断:
- “这不只是 X,而是 Y”(“It's not just X, it's Y”)和“不仅 X,而且 Y”(“not only X but also Y”)
- 三项式排比结构
- 修辞性单词问句:“结果呢?”(“The result?”)
- 视频开场白:“在这个视频里,我会向你展示……”(“in this video I'm going to show you”)
- Emoji 项目符号列表
- 连续三个或更多全大写词语
- Hashtag 标签墙
- 反射性诱导语:“follow for more”“tag someone who”“double tap if”
这个列表要由你来处理。手动重写每个被标记的行并保留原意,然后重新运行 。这正是让评分从 REVIEW 提升到 PASS 的环节,也是脚本无法完成的部分。
detect.pyThe five checks
五项检查
detect.py| check | what it measures | machine looks like |
|---|---|---|
| BURSTINESS | sentence-length variation | every sentence the same length |
| SPECIFICITY | numbers, names, concrete markers per 100 words | abstract nouns, no figures |
| SLOP DENSITY | lexicon hits per 100 words | stock vocabulary |
| FINGERPRINT | invisible chars, em dashes, curly quotes per 1k chars | typographically perfect |
| VOICE | contractions, person, structural tells | no contractions, staged reveals |
The verdict weights the mean at 60% and the weakest single check at 40%,
because one signal is enough. PASS needs an overall of 70+ with no check
below 55.
detect.py| check | 衡量内容 | 机器文本的特征 |
|---|---|---|
| BURSTINESS | 句子长度的变化幅度 | 每个句子的长度都相同 |
| SPECIFICITY | 每 100 词中的数字、名称和具体标记数量 | 抽象名词、没有具体数据 |
| SLOP DENSITY | 每 100 词中的词表命中次数 | 陈词滥调词汇 |
| FINGERPRINT | 每 1k 字符中的隐形字符、em dash 和弯引号数量 | 排版过于工整完美 |
| VOICE | 缩写形式、人称和结构性特征 | 不使用缩写,揭示方式刻意编排 |
判定结果将平均分赋予 60% 的权重,将最弱的单项检查赋予 40% 的权重,因为只要一个信号不合格就足以说明问题。PASS 要求总分达到 70 分以上,且任何单项检查都不得低于 55 分。
Say this honestly
请如实说明
These are five local heuristics modelled on the signals public detectors key
on. They run entirely on the user's machine and nothing is uploaded. They are
not GPTZero, Originality, Copyleaks, Winston or Turnitin, they do not call
those APIs, and they cannot promise those verdicts. Fixing what they measure
does tend to move those numbers, because they are measuring the same underlying
things. That is the claim. Do not make a bigger one on the user's behalf, and
do not tell a user their text is undetectable.
这些是基于公开检测器所关注信号建模的五项本地启发式规则。它们完全在用户机器上运行,不会上传任何内容。它们不是 GPTZero、Originality、Copyleaks、Winston 或 Turnitin,不会调用这些 API,也无法承诺给出与这些工具相同的判定结果。修复这些规则所衡量的特征通常确实会改变那些检测器给出的数字,因为它们衡量的是相同的底层特征。事实仅止于此。不要替用户夸大结论,也不要告诉用户其文本无法被检测到。
Order of operations
操作顺序
humanize.py draft.txt -o clean.txt --report- Read the structural flags. Rewrite those lines yourself.
- to show the before and after.
detect.py draft.txt clean.txt - If the verdict is not PASS, fix the weakest check named in the output and go again. Two rounds is normal. Five means the draft was written by formula, and the fix is a different draft, not more passes.
- Show the user the cleaned text and the score. Never the score alone.
humanize.py draft.txt -o clean.txt --report- 读取结构性标记,并自行重写被标记的行。
- ,展示处理前后的对比。
detect.py draft.txt clean.txt - 如果判定结果不是 PASS,就修复输出中指出的最弱检查项,然后重新运行。通常两轮即可。如果用了五轮,说明草稿是按公式写出来的;解决办法是换一份草稿,而不是继续增加处理轮次。
- 向用户展示清理后的文本和评分。绝不要只展示评分。