悄悄话 139 条留言重写成大白话、语气各不相同;变星门槛 6 赞,模拟赞数按 6 重排

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
deploy
2026-11-07 04:25:01 +00:00
parent bc65bea7e9
commit 687669abe7
9 changed files with 168 additions and 167 deletions

View File

@@ -41,8 +41,9 @@ lines = [l.strip() for l in open('tools/whcm/lines.txt', encoding='utf-8') if l.
assert len(lines) == 100, len(lines)
out, ri = [], 0
# 内容要和孕周对得上:按关键词给每条定孕周范围,从打乱后的人设里挑第一个落在范围内的
RULES = [(r'糖耐', 24, 28), (r'预产期在月底', 37, 39), (r'待产包|入盆|无痛|胎位|头朝下|小床|产假|月子餐|育儿嫂|报纸|满月|儿科医生|插座|剪了标签|绘本', 32, 39),
(r'踢的位置越来越低|孕妇照|羊水|吸奶器|数胎动|数你|产褥垫|剪指甲|洗了第一批衣服|婴儿车', 28, 39), (r'四维', 24, 30)]
RULES = [(r'糖耐', 24, 28), (r'预产期在月底', 37, 39), (r'过年', 25, 28),
(r'待产包|入盆|无痛|胎位|头朝下|小床|产假|月子餐|育儿嫂|报纸|满月|儿科医生|插座|标签|绘本|包被', 32, 39),
(r'踢的位置越来越低|孕妇照|羊水|吸奶器|数胎动|数够十下|产褥垫|剪指甲|第一批小衣服|婴儿车|疫苗时间表', 28, 39), (r'四维', 24, 30)]
def rng(t):
for pat, lo, hi in RULES:
if re.search(pat, t): return lo, hi
@@ -71,8 +72,8 @@ for t in [l.strip() for l in open('tools/whcm/early_rep.txt', encoding='utf-8')
hit = [c for c in out if c[1].startswith(head)]
assert len(hit) == 1, head
hit[0][3].append([early_p[ei], txt]); ei += 1
ERULES = [(r'两道杠|还没跟你爸说|验孕棒|小黑圈|胎心胎芽', 6, 8), (r'孕酮|查血|出血', 6, 10), (r'约了NT', 10, 12),
(r'葡萄|裤子有点紧|肚子还是平的', 10, 13)]
ERULES = [(r'两道杠|还没告诉老公|验孕棒|小黑圈|胎心胎芽', 6, 8), (r'孕酮|查血|见了一点血', 6, 10), (r'约了NT', 10, 12),
(r'满三个月', 8, 12), (r'才两个月', 8, 9), (r'葡萄|裤子有点紧|肚子还平', 10, 13)]
eleft = early_p[ei:]
def epick(t):
lo, hi = next(((a, b) for pat, a, b in ERULES if re.search(pat, t)), (6, 13))
@@ -101,14 +102,14 @@ for e in eo[j:]: e[2] = 3
# 赞数已按插入位置取好,「最热」排序时自然穿插在中间
out = out + eo
# 11-07 用户定(方案 A):「被赞 3 次变星星」要和赞数对得上 → 赞数最高的 26 条标成已变星(第 5 位 = 1),
# 赞数压到几十~个位(不再几百);其余 0~2 个赞,看着就是「还差一点」,有人帮着点一下就能变星(前端本机算)
# 赞数压到几十~个位(不再几百);其余 0~5 个赞(门槛 6),看着就是「还差一点」,有人帮着点一下就能变星(前端本机算)
order = sorted(range(len(out)), key=lambda k: -out[k][2])
NS = 26
for r, k in enumerate(order):
if r < NS:
out[k][2] = max(4, int(168 * (0.88 ** r)) + rnd.randint(-5, 5)); out[k].append(1)
else:
out[k][2] = rnd.choice([0, 0, 1, 1, 1, 2, 2])
out[k][2] = max(6, int(168 * (0.88 ** r)) + rnd.randint(-5, 5)); out[k].append(1)
else: # 11-07 用户:门槛改 6 个赞 → 没变星的 0~5 个
out[k][2] = rnd.choice([0, 0, 1, 1, 1, 2, 2, 2, 3, 3, 4, 5])
d['c'][TARGET] = out
json.dump(d, open(P, 'w', encoding='utf-8'), ensure_ascii=False, separators=(',', ':'))
print('ok', len(out), 'replies', ri, 'early', len(eo), 'early-replies', ei)