悄悄话留言自查:孕周和内容对齐、去掉过来人身份矛盾的回复、名字不撞套路
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -14,22 +14,56 @@ def wk(p):
|
||||
# 内容多是胎动、产检、待产(孕中晚期的事)→ 主评论只用孕 24 周以上的人设,免得「孕 6 周」说「头朝下了」
|
||||
preg = sorted([i for i, p in enumerate(d['p']) if wk(p) >= 24], key=lambda i: (used[i], i))
|
||||
anyp = sorted(range(len(d['p'])), key=lambda i: (used[i], i))
|
||||
# 11-07 用户看评论:名字套路太像(4 个「在挑名字」、4 个「今天也开心」、3 个「水獭」、虎虎的老母亲/虎虎妈妈…)→ 同一帖里前两个字、后两个字都不撞
|
||||
SIG = set()
|
||||
def fresh(i):
|
||||
n = d['p'][i][0]; ks = {'h:' + n[:2], 't:' + n[-2:]}
|
||||
return not (ks & SIG)
|
||||
def take(pool, k):
|
||||
out = []
|
||||
for i in pool:
|
||||
if len(out) >= k: break
|
||||
if fresh(i):
|
||||
n = d['p'][i][0]; SIG.update({'h:' + n[:2], 't:' + n[-2:]}); out.append(i)
|
||||
for i in pool: # 不够就只要求后两个字不撞
|
||||
if len(out) >= k: break
|
||||
n = d['p'][i][0]
|
||||
if i not in out and 't:' + n[-2:] not in SIG: SIG.add('t:' + n[-2:]); out.append(i)
|
||||
for i in pool: # 还不够就随它
|
||||
if len(out) >= k: break
|
||||
if i not in out: out.append(i)
|
||||
return out
|
||||
preg = take(preg, 160)
|
||||
mains = preg[:200]; rnd.shuffle(mains)
|
||||
reps = anyp[:300]; rnd.shuffle(reps)
|
||||
anyp = [i for i in anyp if i not in set(preg) and not re.match(r'准爸爸', d['p'][i][2])] # 回复里不放「准爸爸」(还没娃,说不了打针)
|
||||
reps = take(anyp, 31); rnd.shuffle(reps)
|
||||
lines = [l.strip() for l in open('tools/whcm/lines.txt', encoding='utf-8') if l.strip()]
|
||||
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)]
|
||||
def rng(t):
|
||||
for pat, lo, hi in RULES:
|
||||
if re.search(pat, t): return lo, hi
|
||||
return 24, 39
|
||||
left = list(mains)
|
||||
def pick(t):
|
||||
lo, hi = rng(t)
|
||||
for i in left:
|
||||
if lo <= wk(d['p'][i]) <= hi: left.remove(i); return i
|
||||
raise SystemExit('没有合适人设:' + t)
|
||||
for k, l in enumerate(lines):
|
||||
parts = l.split('||')
|
||||
likes = max(3, int(520 * (0.965 ** k)) + rnd.randint(-18, 18))
|
||||
rr = []
|
||||
for t in parts[1:]:
|
||||
rr.append([reps[ri], t]); ri += 1
|
||||
out.append([mains[k], parts[0], likes, rr])
|
||||
out.append([pick(parts[0]), parts[0], likes, rr])
|
||||
# 11-07 用户:「评论里也加一些孕早期的孕妈,看到别人有胎动也有期待,也有自己的话对孩子说;都要真人感」
|
||||
# early.txt = 孕 6~13 周人设的留言(回复用孕中晚期/宝妈人设,像过来人);均匀插进前 100 条中间,不全堆在后面
|
||||
# early_rep.txt = 「原留言开头|早孕妈妈的回复」,挂在已有留言楼里(「看你们说胎动好羡慕」这类)
|
||||
early_p = sorted([i for i, p in enumerate(d['p']) if 6 <= wk(p) <= 13 and i not in set(reps)], key=lambda i: (used[i], i))
|
||||
early_p = take(sorted([i for i, p in enumerate(d['p']) if 6 <= wk(p) <= 13 and i not in set(reps) and not re.search(r'待产|宝妈|老母亲|养娃|学抱娃|拼尿布|麻麻|大宝', p[0])], key=lambda i: (used[i], i)), 51)
|
||||
er = random.Random(20261108); er.shuffle(early_p)
|
||||
ei = 0
|
||||
for t in [l.strip() for l in open('tools/whcm/early_rep.txt', encoding='utf-8') if l.strip()]:
|
||||
|
||||
Reference in New Issue
Block a user