Iter-4360dd15-0049-crossref-candidate-overgeneration-critique

4360dd15 lesson evidence-retrieval critical-review

修改:20260424194224000

本轮批判性结论:Crossref 引用链抽取出来的“人类临床候选”仍然过宽

本轮不再继续找 mmc1.pdf 镜像,而是专门检验上一轮的抽取结果是否稳健。结果显示:

- 用 DOI 10.1016/S2666-7568(23)00258-1 的 Crossref reference 数组,按关键词 + trialish 标记过滤后,得到 **14 条**候选,而不是之前口径里的 13 条。
- 这 14 条里有:
- primary/interventional: 8
- follow-up/extension: 3
- ancillary: 1
- unclear: 2
- 按疾病/家族粗分,候选明显分散,不全是“抗衰老/健康老龄化”方向,而是混入了:
- 地理萎缩/眼科
- 类风湿关节炎
- 癫痫/TSC
- 肺动脉高压
- 肿瘤
- 甚至健康成人 QT 研究

证伪点

这说明上一轮的规则虽然能复现出“相近数量”的结果,但它**并不能证明** 13 项就是综述的真实纳入项;它只证明了一个更宽的“mTOR/rapalog 人类临床引用集合”。

最大漏洞是:
- trialish 关键词会把 **extension / follow-up / ancillary** 一并吸进来;
- 仅靠药物名 + 临床试验词,无法区分“综述纳入的原始临床研究”与“后续分析/延长随访”;
- 也无法区分“与老龄化问题直接相关”与“只是同一药物在其他适应证上的临床试验”。

可复现代码


import requests, re
from collections import Counter

doi='10.1016/S2666-7568(23)00258-1'
msg=requests.get(f'https://api.crossref.org/works/{doi}', timeout=30,
headers={'User-Agent':'Mozilla/5.0'}).json()['message']
refs=msg['reference']
kw = re.compile(r'rapamycin|sirolimus|everolimus|temsirolimus|rapalog|mTOR inhibitor|mammalian target of rapamycin', re.I)
trialish_markers = re.compile(r'trial|randomi[sz]ed|placebo|phase\s*[1-4]|crossover|double[- ]blind|pilot|feasibility|futility|extension|proof[- ]of[- ]concept|study', re.I)
animal = re.compile(r'fruit fly|drosophila|mouse|mice|rat|rats|murine|animal|in vivo', re.I)

items=[]
for i,r in enumerate(refs,1):
txt=' | '.join(str(r.get(k,'')) for k in ['article-title','journal-title','author','DOI','unstructured'])
if kw.search(txt) and trialish_markers.search(txt) and not animal.search(txt):
title=r.get('article-title') or r.get('unstructured') or ''
items.append(title)

roles=Counter()
for t in items:
tl=t.lower()
if 'extension' in tl or 'follow-up' in tl or 'postextension' in tl:
roles['follow-up/extension'] += 1
elif 'ancillary' in tl:
roles['ancillary'] += 1
elif 'phase' in tl or 'pilot' in tl or 'proof-of-concept' in tl or 'futility' in tl or 'study' in tl:
roles['primary/interventional'] += 1
else:
roles['unclear'] += 1

print(len(items), roles)

直接可行动的修正方向

下一步不应再扩大搜索面,而应把规则收紧到:
1. 排除 extension / follow-up / postextension / ancillary
2. 再核对是否必须是“原始临床研究”而非后续分析;
3. 如果仍不是 13,再追问哪一个候选最可能是误纳入项。