| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241 |
- """
- 交叉验证:提取所有5份PDF的JSON数据,逐模块比较
- """
- import sys, os
- sys.path.insert(0, r'D:\workspace\cfc\docs\参考资料')
- import extract_full_report_v5 as m
- BASE = r'D:\workspace\cfc\docs\参考资料'
- pdfs = sorted(f for f in os.listdir(BASE) if f.lower().endswith('.pdf'))
- print(f'找到 {len(pdfs)} 份PDF\n')
- # 提取所有报告
- results = {}
- for fname in pdfs:
- label = fname.replace('.pdf', '')
- print(f'提取 {label}...')
- results[label] = m.extract_pdf_to_json(os.path.join(BASE, fname))
- all_labels = list(results.keys())
- print()
- # =============================================
- # 1. 报告概述
- # =============================================
- print('=' * 80)
- print('1. 报告概述')
- print('=' * 80)
- overview_fields = ['姓名', '编号', '年龄', '性别', '肠道预测年龄', '肠型',
- '肠道菌群平衡', '菌群多样性', '有益菌', '有害菌', '核心菌属',
- '健康总分', '菌群健康', '慢病控制', '营养均衡']
- header = f"{'字段':<14}" + "".join(f"{l[:8]:<10}" for l in all_labels)
- print(header)
- print('-' * len(header))
- for field in overview_fields:
- vals = []
- for label in all_labels:
- v = results[label]['报告概述'].get(field, '—')
- vals.append(str(v)[:8])
- print(f"{field:<14}" + "".join(f"{v:<10}" for v in vals))
- # =============================================
- # 2. 疾病风险评估
- # =============================================
- print('\n' + '=' * 80)
- print('2. 疾病风险评估')
- print('=' * 80)
- # 收集所有疾病名
- all_diseases = set()
- for label in all_labels:
- for r in results[label]['疾病风险评估']:
- all_diseases.add(r['名称'])
- all_diseases = sorted(all_diseases)
- print(f'共 {len(all_diseases)} 个疾病指标')
- for d in all_diseases:
- vals = []
- for label in all_labels:
- found = [r for r in results[label]['疾病风险评估'] if r['名称'] == d]
- if found:
- v = found[0].get('数值', found[0].get('状态', '?'))
- else:
- v = '—'
- vals.append(str(v)[:8])
- print(f" {d:<14}" + "".join(f"{v:<10}" for v in vals))
- # =============================================
- # 3. 主要营养评估
- # =============================================
- print('\n' + '=' * 80)
- print('3. 主要营养评估')
- print('=' * 80)
- all_nutri = set()
- for label in all_labels:
- for r in results[label]['主要营养评估']:
- all_nutri.add(r['名称'])
- for n in sorted(all_nutri):
- vals = []
- for label in all_labels:
- found = [r for r in results[label]['主要营养评估'] if r['名称'] == n]
- vals.append(found[0]['数值'] if found else '—')
- print(f" {n:<10}" + "".join(f"{v:<8}" for v in vals))
- # =============================================
- # 4. 氨基酸评估
- # =============================================
- print('\n' + '=' * 80)
- print('4. 氨基酸评估')
- print('=' * 80)
- all_amino = set()
- for label in all_labels:
- for r in results[label]['氨基酸评估']:
- all_amino.add(r['名称'])
- for a in sorted(all_amino):
- vals = []
- for label in all_labels:
- found = [r for r in results[label]['氨基酸评估'] if r['名称'] == a]
- vals.append(found[0]['数值'] if found else '—')
- print(f" {a:<8}" + "".join(f"{v:<8}" for v in vals))
- # =============================================
- # 5. 维生素评估
- # =============================================
- print('\n' + '=' * 80)
- print('5. 维生素评估')
- print('=' * 80)
- all_vit = set()
- for label in all_labels:
- for r in results[label]['维生素评估']:
- all_vit.add(r['名称'])
- for v in sorted(all_vit):
- vals = []
- for label in all_labels:
- found = [r for r in results[label]['维生素评估'] if r['名称'] == v]
- vals.append(found[0]['数值'] if found else '—')
- print(f" {v:<10}" + "".join(f"{v:<8}" for v in vals))
- # =============================================
- # 6. 微量元素评估
- # =============================================
- print('\n' + '=' * 80)
- print('6. 微量元素评估')
- print('=' * 80)
- for t in ['铁', '锌']:
- vals = []
- for label in all_labels:
- found = [r for r in results[label]['微量元素评估'] if r['名称'] == t]
- vals.append(found[0]['数值'] if found else '—')
- print(f" {t:<8}" + "".join(f"{v:<8}" for v in vals))
- # =============================================
- # 7. 主要消化道致病菌
- # =============================================
- print('\n' + '=' * 80)
- print('7. 主要消化道致病菌')
- print('=' * 80)
- all_path = set()
- for label in all_labels:
- for r in results[label]['主要消化道致病菌']:
- all_path.add(r['致病菌'])
- for p in sorted(all_path):
- vals = []
- for label in all_labels:
- found = [r for r in results[label]['主要消化道致病菌'] if r['致病菌'] == p]
- vals.append(found[0]['丰度'] if found else '—')
- print(f" {p:<10}" + "".join(f"{v:<8}" for v in vals))
- # =============================================
- # 8. 肠道屏障及代谢物
- # =============================================
- print('\n' + '=' * 80)
- print('8. 肠道屏障及代谢物')
- print('=' * 80)
- all_bar = set()
- for label in all_labels:
- for r in results[label]['肠道屏障及代谢物']:
- all_bar.add(r['名称'])
- for b in sorted(all_bar):
- vals = []
- for label in all_labels:
- found = [r for r in results[label]['肠道屏障及代谢物'] if r['名称'] == b]
- v = found[0].get('数值', found[0].get('评估值', '?')) if found else '—'
- vals.append(v)
- print(f" {b:<16}" + "".join(f"{v:<8}" for v in vals))
- # =============================================
- # 9. 短链脂肪酸
- # =============================================
- print('\n' + '=' * 80)
- print('9. 短链脂肪酸')
- print('=' * 80)
- all_scfa = set()
- for label in all_labels:
- for r in results[label]['短链脂肪酸']:
- all_scfa.add(r['名称'])
- for s in sorted(all_scfa):
- vals = []
- for label in all_labels:
- found = [r for r in results[label]['短链脂肪酸'] if r['名称'] == s]
- v = found[0].get('数值', found[0].get('评估值', '?')) if found else '—'
- vals.append(v)
- print(f" {s:<20}" + "".join(f"{v:<8}" for v in vals))
- # =============================================
- # 10. 神经递质及激素
- # =============================================
- print('\n' + '=' * 80)
- print('10. 神经递质及激素')
- print('=' * 80)
- all_nt = set()
- for label in all_labels:
- for r in results[label]['神经递质及激素']:
- all_nt.add(r['名称'])
- for n in sorted(all_nt):
- vals = []
- for label in all_labels:
- found = [r for r in results[label]['神经递质及激素'] if r['名称'] == n]
- v = found[0].get('数值', found[0].get('评估值', '?')) if found else '—'
- vals.append(v)
- print(f" {n:<20}" + "".join(f"{v:<8}" for v in vals))
- # =============================================
- # 11. 抗生素风险评估
- # =============================================
- print('\n' + '=' * 80)
- print('11. 抗生素风险评估')
- print('=' * 80)
- all_abx = set()
- for label in all_labels:
- for r in results[label]['抗生素风险评估']:
- all_abx.add(r['名称'])
- for a in sorted(all_abx):
- vals = []
- for label in all_labels:
- found = [r for r in results[label]['抗生素风险评估'] if r['名称'] == a]
- vals.append(found[0]['数值'] if found else '—')
- print(f" {a:<10}" + "".join(f"{v:<8}" for v in vals))
- # =============================================
- # 12. 个体化食物推荐表
- # =============================================
- print('\n' + '=' * 80)
- print('12. 个体化食物推荐表')
- print('=' * 80)
- for label in all_labels:
- food = results[label]['个体化食物推荐表']
- print(f" {label}: {food['条目数']} 条, 格式={food['格式']}")
- # =============================================
- # 总结
- # =============================================
- print('\n' + '=' * 80)
- print('交叉验证总结')
- print('=' * 80)
- print(f"共验证 {len(all_labels)} 份报告")
- for label in all_labels:
- r = results[label]
- total = 0
- for k in ['疾病风险评估', '主要营养评估', '氨基酸评估', '维生素评估', '微量元素评估',
- '抗生素风险评估', '主要消化道致病菌', '肠道屏障及代谢物', '短链脂肪酸', '神经递质及激素']:
- total += len(r.get(k, []))
- total += r['个体化食物推荐表']['条目数']
- print(f" {label}: {total} 总指标项")
|