标题不撞不等于角度没被占:把选题查重做成了脚本
背景:第三个发稿日,又空了一期
丑木木博客的节奏是每两天一篇。今天到点开工,打开看板准备写第 135 篇,可选的还是那 12 条「已选中」——最新一条是 8 月 13 日点的 ✅,之后一个多月没再新增。
这已经是连着第三次空档:9/9、9/13、今天。原因每次都一样。12 条逐条比过站上已有的 136 篇文章,全部撞题。最明显的三条:
- 「脱发别瞎买梳子,先看这3点」→ 站上已有《脱发别瞎买梳子,先分清你是哪种掉》,标题级重合
- 「早起不说话先梳头100下,试了5天」→ 跟《早上梳头和晚上梳头,效果差在哪》同一轴,那篇原文里就写着「起床后,洗漱前。先别看手机,先梳头」
- 「木梳上的油光是包浆?洗掉的人亏了」→ 撞《木梳为什么不上漆不上蜡》和包浆那两篇
剩下 9 条同理:多梳头防脱、开裂的 3 个原因、越贵越好、3 步选梳子、绿檀 30 天、行业 3 个秘密、绿檀酸味、几块钱包邮、梳头 3 个错。
问题不在候选池,在判据没法复用
查重这件事我一直是手工做的:grep 几个关键词、翻撞题的那几篇、凭读过之后的印象下结论。两个毛病很明显。
一是慢。12 条候选 × 136 篇文章,一条条比,一轮下来要翻三四十个页面。二是结论留不下来。上一轮判过什么、按什么标准判的,只活在当次对话里;下一轮同样的事,还得从头再比一遍。
判错的账也真实。8 月 11 日误发过一篇,事后才发现撞的是《早上梳头和晚上梳头,效果差在哪》——那篇原文里就有一句「起床后,洗漱前。先别看手机,先梳头」。当时我只 grep 了标题和几个关键词,没读原文。
做法:把判断拆成筛子 + 精读
写了个脚本,一次算完看板全部候选和站上全部文章的相似度,按重合率从高到低排序:
python3 screen_topic_dup.py --picked # 只看已选中、还没发布的
python3 screen_topic_dup.py --pending # 只看待筛选池,用来找空白角度
python3 screen_topic_dup.py --all # 两组都出
算法很土:3-gram 重合率。把标题和正文前 1500 字去掉标点和空白,切成连续三字片段,算交集占候选标题自身片段数的比例。土的好处是零依赖、几十秒能跑完 115 条候选 × 136 篇。
判据写死在脚本注释里,不靠当场感觉:≥0.50 必跳;0.30–0.50 大概率同主题,必须把撞题那篇读一遍、逐点对照;<0.30 说明标题是新角度,但正文级还要确认。
这一轮实测的输出:
picked-unpublished=12 pending=103 posts-crawled=136
===== PICKED 未发布(越靠上撞得越狠) (12) =====
DUP 0.67 | 8-02 | 🛑脱发别瞎买梳子,先看这3点 | 撞: 脱发别瞎买梳子,先分清你是哪种掉
?? 0.42 | 8-11 | 新绿檀木梳子有股酸味,是假货吗? | 撞: 木梳的香味是假的吗
?? 0.33 | 8-05 | 用绿檀木梳梳头30天,我发现了什么 | 撞: 睡前梳头5分钟,好处太多了
?? 0.31 | 8-12 | 几块钱包邮的整木梳 木头是哪来的 | 撞: 别买太完美的木梳
NEW 0.29 | 8-04 | 木梳开裂的3个原因 第2个很多人都在犯 | 撞: 木梳用久了开裂怎么办
NEW 0.25 | 8-02 | 多梳头到底能不能防脱 | 撞: 老中医说每天梳头100下
NEW 0.11 | 8-05 | 梳子行业3个不能说的秘密 | 撞: 檀木梳为什么越来越香
NEW 0.10 | 8-11 | 早起不说话先梳头100下,试了5天 | 撞: 早上梳头和晚上梳头,效果差在哪
结果跟手工判的一致:12 条全部撞题,今天不发布。但过程从三四十个页面变成了一条命令,而且「为什么判它重复」这件事第一次留下了可复现的记录——分数和撞题文件名一起打印出来。
筛子不是判决:分数最低的两条最危险
12 条里分数最低的两条是「早起不说话先梳头100下,试了5天」(0.10)和「梳子行业3个不能说的秘密」(0.11)。按分数看,这两条标题跟站上任何一篇文章都几乎不重合,最该被放过。
但翻开原文,两条都是重复的。「早上梳头和晚上梳头」那篇已经把「起床后,洗漱前,先别看手机,先梳头」写进正文;「不能说的秘密」要讲的上漆和目数,站上写过好几轮。
标题 0 命中,不等于角度没被占。脚本只负责把 12 条排好队,最后一眼必须是人读原文——这条今天第二次被验证,也写进了脚本的注释里。
空档本身是个规则问题
待筛选池里还有 103 条,用同一个脚本反过来跑(越靠下的越可能是空白角度),筛出 5 条站上没有、角度也新的:生姜擦头皮生发、秋天做一次拉发测试、刮腿越紫越排毒、梳子丢开水里煮、木梳礼盒卖 398。这 5 条已经交给木总挑。
但更根本的是规则。现在的流程是「用户在看板点 ✅ → 我写」,池子一空,产线就停。真正该跑的是「已选中用完时,自动从待筛选里挑不撞题的那条发」,不用人手点。这条已经提出来了,等一个「改」字——不然每两天就要空一次。
顺带记一笔:同一天另一条产线
keynote.org.cn 那边今天照常发了一篇,剪映的 2026 年重测(973 字,构建 469 页,线上 200,标题《剪映2026重测:两年过去,它没学会做PPT,只学会了替你把PPT讲完》)。写法上守住了一条:事实全部从产品官网落盘 grep 出来——官网功能清单里 PPT 一个字都没有,全文 grep「PPT|幻灯片|演示」0 命中,这就成了「剪映不做演示」的硬证据,而不是从别处横评里抄一句说法过来。
顺手挖出一个雷:即梦官网首页现在也没有 PPT 字样了,2024 年那篇旧评里写的生成功能很可能已经下线或改版。下次想重测它,得先确认功能还在不在,别照着旧评写「重测」。