feat(classify): zero title-only titles, penalize <10min, add discover.candidate_min_score
标题仅含 require_title 不再计分(必须咻咻满+任一正向词);时长 <10 分钟 -1(时长未知不扣);新增 discover.candidate_min_score(默认=notify.min_score)控制是否进候选池,只过标题关的不再入池。库内 796 条:仅过标题关的 8 条从 1/3 分降为 0/-1,其余不变。
This commit is contained in:
1 parent
aa9aa7c589
commit
c6790f0ba1
10 files changed
+138
-69
No files matched your search
+15
-10
@@ -118,7 +118,8 @@ Telegram 私聊发链接/BV 号 ───┘
|
||||
],
|
||||
"schedule": { "discover_minutes": 60,
|
||||
"snapshot_at": "00:01", "candidate_ttl_days": 7 },
|
||||
"discover": { "keywords": ["咻咻满"], "pages": 3, "window_days": 7 },
|
||||
"discover": { "keywords": ["咻咻满"], "pages": 3, "window_days": 7,
|
||||
"candidate_min_score": 4 },
|
||||
"notify": { "min_score": 4, "max_items_per_message": 10 },
|
||||
"classify": {
|
||||
"require_title": "咻咻满",
|
||||
@@ -257,33 +258,37 @@ Telegram 私聊发链接/BV 号 ───┘
|
||||
|
||||
```
|
||||
# 硬门槛
|
||||
title 含 "咻咻满"(全半角/大小写归一化后),否则直接 0 分(丢弃)
|
||||
title 含 "咻咻满"(全半角/大小写归一化后),否则直接 0 分
|
||||
up_mid 命中黑名单 → 直接排除(永不通知,连候选池都不进)
|
||||
|
||||
# 正向命中次数 n(每个命中记 1)
|
||||
n = 1 # 标题含 "咻咻满"
|
||||
+ 1 # 命中 reaction 类(re|reaction|反应;须与"咻咻满"或"充电"同现)
|
||||
+ count(加急|特急|充电|专场)
|
||||
+ count(双人|路人|第一次|首次)
|
||||
# 正向命中次数 n
|
||||
pos = reaction|反应 命中次数 + count(加急|特急|充电|专场) + count(双人|路人|第一次|首次)
|
||||
n = pos + (pos > 0 ? 1 : 0) # 标题含"咻咻满"仅在已有正向命中时计 1 次
|
||||
|
||||
score = n * n # 超线性:1→1、2→4、3→9、4→16(1+1>2、1+1+1>5)
|
||||
+ 2 # 时长 > 60 分钟(与下一条不叠加,取大)
|
||||
+ 1 # 时长 > 30 分钟
|
||||
- 1 # 时长 < 10 分钟(切片/片段;时长未知=0 不扣)
|
||||
- 2 * k # 每个负向词:歌切|切片|搬运|完整版|录播|录像
|
||||
- k*(k-1) # 同时命中 2 个额外 -2、3 个额外 -6、4 个额外 -12
|
||||
- 4 # 标题带日期(2026-10-28 / 2026/10/25 / 2026.10.26 / 2024年11月24日 / 10月25日)
|
||||
- 3 # UP 为 咻咻满本人(mid=37754047)
|
||||
|
||||
通知阈值 = 4
|
||||
0 <= score < 4 且含"咻咻满" → 进看板"候选池"(7 天后删除),不通知
|
||||
score < 0 → 丢弃
|
||||
候选线 = discover.candidate_min_score(默认 = notify.min_score)
|
||||
通知线 = notify.min_score
|
||||
score < 候选线 → 丢弃(只过标题关、无正向命中的不再进候选池)
|
||||
候选线 <= score < 通知线 → 进看板"候选池"(7 天后删除),不通知
|
||||
score >= 通知线 → 通知
|
||||
```
|
||||
|
||||
**几条设计依据**:
|
||||
|
||||
- **reaction 类用宽松 `re` 但须同现**:`re|reaction|反应` 必须与"咻咻满"或"充电"同时出现才计命中——既避免通用词(任意含 "re" 的拉丁串)加分,又能兼容 `reactio`/`reation`/`recation` 等拼写;
|
||||
- **只过标题关不计分**:标题仅含 `require_title`("咻咻满")而没有命中任何正向词时 **0 分**——"咻咻满"单独出现和 "reaction" 单独出现一样没有正向意义,必须"咻咻满 + 任一正向词"才计分;
|
||||
- **正向按命中次数超线性加权(n²)**:多个正向词同现(如"咻咻满 + reaction + 充电")时不能简单线性和,否则一个负向词就能把多信号真 reaction 打到线下;`1+1>2`、`1+1+1>5` 用平方实现;
|
||||
- **负向也非线性**:每个负向词 -2,命中 2 个额外 -2、3 个额外 -6(`k*(k-1)`),带日期再 -4;单一负向词不再一票否决多信号 reaction;
|
||||
- **时长 <10 分钟 -1**:这类基本是切片/片段;时长未知(0)不扣;
|
||||
- **候选线与通知线分离**:`discover.candidate_min_score`(默认取 `notify.min_score`)控制是否进候选池——低于候选线的直接丢弃(只过标题关的不再入池),避免看板被无意义候选刷屏;
|
||||
- **"听/看"等宽泛词已移除**;`纯享`(会误伤"纯享受")已从负向移除,`转场`("专场"错别字)已从正向移除;
|
||||
- **时长只在已命中正向词时加权**:避免"完整录播/直播录像"这类既无 reaction 也无 charge 的长视频仅靠时长进池;
|
||||
- **带日期的标题按强负向处理**:`2026-10-28`、`10月25日` 这类通常对应某场直播的录播/回放/录像/自用收藏;实测对真 reaction 标题零误伤,代价是极少数"真 reaction 恰好写日期"会被漏掉;
|
||||
|
||||
Reference in new issue
Block a user