Răsfoiți Sursa

feat: add taxonomy level extraction (class/order/family/genus/species) from unified section

asus 2 luni în urmă
părinte
comite
c49911c52a

+ 532 - 0
docs/参考资料/501999942-某人.json

@@ -3723,6 +3723,538 @@
         "人群水平%": "23%",
         "检出率%": "93.27%"
       }
+    ],
+    "菌纲构成": [
+      {
+        "名称": "拟杆菌纲 Bacteroidia",
+        "丰度%": "76.721%",
+        "人群水平%": "95%",
+        "检出率%": "98.00%"
+      },
+      {
+        "名称": "梭菌纲 Clostridia",
+        "丰度%": "17.067%",
+        "人群水平%": "26%",
+        "检出率%": "98.87%"
+      },
+      {
+        "名称": "芽孢杆菌纲 Bacilli",
+        "丰度%": "1.594%",
+        "人群水平%": "81%",
+        "检出率%": "86.08%"
+      },
+      {
+        "名称": "德耳塔变形杆菌纲 Deltaproteobacteria",
+        "丰度%": "0.609%",
+        "人群水平%": "88%",
+        "检出率%": "60.76%"
+      },
+      {
+        "名称": "β-变形菌纲 Betaproteobacteria",
+        "丰度%": "0.409%",
+        "人群水平%": "38%",
+        "检出率%": "74.47%"
+      },
+      {
+        "名称": "红蝽菌纲 Coriobacteriia",
+        "丰度%": "0.283%",
+        "人群水平%": "79%",
+        "检出率%": "79.61%"
+      },
+      {
+        "名称": "放线杆菌纲 Actinobacteria",
+        "丰度%": "0.249%",
+        "人群水平%": "45%",
+        "检出率%": "87.94%"
+      },
+      {
+        "名称": "Erysipelotrichi",
+        "丰度%": "0.178%",
+        "人群水平%": "54%",
+        "检出率%": "68.47%"
+      },
+      {
+        "名称": "γ-变形菌纲 Gammaproteobacteria",
+        "丰度%": "0.111%",
+        "人群水平%": "8%",
+        "检出率%": "88.68%"
+      },
+      {
+        "名称": "Lentisphaeria",
+        "丰度%": "0.037%",
+        "人群水平%": "94%",
+        "检出率%": "18.42%"
+      },
+      {
+        "名称": "疣微菌纲 Verrucomicrobiae",
+        "丰度%": "0.013%",
+        "人群水平%": "57%",
+        "检出率%": "53.76%"
+      },
+      {
+        "名称": "柔膜体纲 Mollicutes",
+        "丰度%": "0.007%",
+        "人群水平%": "71%",
+        "检出率%": "29.01%"
+      },
+      {
+        "名称": "互养菌纲 Synergistia",
+        "丰度%": "0.003%",
+        "人群水平%": "63%",
+        "检出率%": "24.61%"
+      }
+    ],
+    "菌目构成": [
+      {
+        "名称": "拟杆菌目 Bacteroidales",
+        "丰度%": "76.721%",
+        "人群水平%": "95%",
+        "检出率%": "98.00%"
+      },
+      {
+        "名称": "梭菌目 Clostridiales",
+        "丰度%": "11.473%",
+        "人群水平%": "20%",
+        "检出率%": "98.87%"
+      },
+      {
+        "名称": "乳杆菌目 Lactobacillales",
+        "丰度%": "0.753%",
+        "人群水平%": "72%",
+        "检出率%": "85.51%"
+      },
+      {
+        "名称": "脱硫弧菌目 Desulfovibrionales",
+        "丰度%": "0.609%",
+        "人群水平%": "89%",
+        "检出率%": "58.79%"
+      },
+      {
+        "名称": "伯克氏菌目 Burkholderiales",
+        "丰度%": "0.409%",
+        "人群水平%": "39%",
+        "检出率%": "74.19%"
+      },
+      {
+        "名称": "红蝽菌目 Coriobacteriales",
+        "丰度%": "0.283%",
+        "人群水平%": "79%",
+        "检出率%": "79.61%"
+      },
+      {
+        "名称": "双歧杆菌目 Bifidobacteriales",
+        "丰度%": "0.240%",
+        "人群水平%": "51%",
+        "检出率%": "84.99%"
+      },
+      {
+        "名称": "丹毒丝菌目 Erysipelotrichales",
+        "丰度%": "0.178%",
+        "人群水平%": "54%",
+        "检出率%": "65.82%"
+      },
+      {
+        "名称": "肠杆菌目 Enterobacteriales",
+        "丰度%": "0.111%",
+        "人群水平%": "12%",
+        "检出率%": "87.83%"
+      },
+      {
+        "名称": "Victivallales",
+        "丰度%": "0.037%",
+        "人群水平%": "94%",
+        "检出率%": "18.42%"
+      },
+      {
+        "名称": "疣微菌目 Verrucomicrobiales",
+        "丰度%": "0.013%",
+        "人群水平%": "57%",
+        "检出率%": "53.76%"
+      },
+      {
+        "名称": "互养菌目 Synergistales",
+        "丰度%": "0.003%",
+        "人群水平%": "63%",
+        "检出率%": "24.61%"
+      },
+      {
+        "名称": "放线菌目 Actinomycetales",
+        "丰度%": "0.003%",
+        "人群水平%": "19%",
+        "检出率%": "58.40%"
+      },
+      {
+        "名称": "芽孢杆菌目 Bacillales",
+        "丰度%": "0.003%",
+        "人群水平%": "53%",
+        "检出率%": "42.30%"
+      }
+    ],
+    "菌科构成": [
+      {
+        "名称": "普雷沃氏菌科 Prevotellaceae",
+        "丰度%": "60.109%",
+        "人群水平%": "96%",
+        "检出率%": "90.33%"
+      },
+      {
+        "名称": "拟杆菌科 Bacteroidaceae",
+        "丰度%": "13.968%",
+        "人群水平%": "45%",
+        "检出率%": "96.10%"
+      },
+      {
+        "名称": "瘤胃菌科 Ruminococcaceae",
+        "丰度%": "6.559%",
+        "人群水平%": "44%",
+        "检出率%": "96.52%"
+      },
+      {
+        "名称": "母螺旋菌科 Lachnospiraceae",
+        "丰度%": "4.068%",
+        "人群水平%": "28%",
+        "检出率%": "98.03%"
+      },
+      {
+        "名称": "理化所菌科 Rikenellaceae",
+        "丰度%": "1.037%",
+        "人群水平%": "88%",
+        "检出率%": "85.69%"
+      },
+      {
+        "名称": "乳杆菌科 Lactobacillaceae",
+        "丰度%": "0.743%",
+        "人群水平%": "93%",
+        "检出率%": "62.55%"
+      },
+      {
+        "名称": "脱硫弧菌科 Desulfovibrionaceae",
+        "丰度%": "0.609%",
+        "人群水平%": "89%",
+        "检出率%": "58.79%"
+      },
+      {
+        "名称": "梭菌科 Clostridiaceae",
+        "丰度%": "0.434%",
+        "人群水平%": "74%",
+        "检出率%": "67.33%"
+      },
+      {
+        "名称": "红蝽菌科 Coriobacteriaceae",
+        "丰度%": "0.280%",
+        "人群水平%": "78%",
+        "检出率%": "79.61%"
+      },
+      {
+        "名称": "双歧杆菌科 Bifidobacteriaceae",
+        "丰度%": "0.240%",
+        "人群水平%": "51%",
+        "检出率%": "84.99%"
+      },
+      {
+        "名称": "卟啉单胞菌科 Porphyromonadaceae",
+        "丰度%": "0.181%",
+        "人群水平%": "29%",
+        "检出率%": "66.42%"
+      },
+      {
+        "名称": "丹毒丝菌科 Erysipelotrichaceae",
+        "丰度%": "0.178%",
+        "人群水平%": "54%",
+        "检出率%": "65.82%"
+      },
+      {
+        "名称": "消化球菌科 Peptococcaceae",
+        "丰度%": "0.088%",
+        "人群水平%": "96%",
+        "检出率%": "25.00%"
+      },
+      {
+        "名称": "肠杆菌科 Enterobacteriaceae",
+        "丰度%": "0.064%",
+        "人群水平%": "11%",
+        "检出率%": "87.83%"
+      },
+      {
+        "名称": "食谷菌科 Victivallaceae",
+        "丰度%": "0.037%",
+        "人群水平%": "94%",
+        "检出率%": "18.42%"
+      },
+      {
+        "名称": "消化链球菌科 Peptostreptococcaceae",
+        "丰度%": "0.037%",
+        "人群水平%": "93%",
+        "检出率%": "18.53%"
+      },
+      {
+        "名称": "克⾥斯滕森氏菌科 Christensenellaceae",
+        "丰度%": "0.023%",
+        "人群水平%": "73%",
+        "检出率%": "40.33%"
+      },
+      {
+        "名称": "链球菌科 Streptococcaceae",
+        "丰度%": "0.010%",
+        "人群水平%": "17%",
+        "检出率%": "69.20%"
+      },
+      {
+        "名称": "放线菌科 Actinomycetaceae",
+        "丰度%": "0.003%",
+        "人群水平%": "27%",
+        "检出率%": "46.06%"
+      },
+      {
+        "名称": "草酸杆菌科 Oxalobacteraceae",
+        "丰度%": "0.003%",
+        "人群水平%": "63%",
+        "检出率%": "41.42%"
+      }
+    ],
+    "菌属构成": [
+      {
+        "名称": "普雷沃氏菌属 Prevotella",
+        "丰度%": "60.086%",
+        "人群水平%": "96%",
+        "检出率%": "99.52%"
+      },
+      {
+        "名称": "拟杆菌属 Bacteroides",
+        "丰度%": "13.278%",
+        "人群水平%": "35%",
+        "检出率%": "99.04%"
+      },
+      {
+        "名称": "粪杆菌属 Faecalibacterium",
+        "丰度%": "3.241%",
+        "人群水平%": "59%",
+        "检出率%": "98.08%"
+      },
+      {
+        "名称": "粪球菌属 Coprococcus",
+        "丰度%": "1.867%",
+        "人群水平%": "94%",
+        "检出率%": "86.06%"
+      },
+      {
+        "名称": "光岗氏菌属 Mitsuokella",
+        "丰度%": "1.776%",
+        "人群水平%": "99%",
+        "检出率%": "15.87%"
+      },
+      {
+        "名称": "瘤胃球菌属 Ruminococcus",
+        "丰度%": "1.650%",
+        "人群水平%": "66%",
+        "检出率%": "99.52%"
+      },
+      {
+        "名称": "CAG-127",
+        "丰度%": "1.534%",
+        "人群水平%": "96%",
+        "检出率%": "58.65%"
+      },
+      {
+        "名称": "罗氏菌属 Roseburia",
+        "丰度%": "1.130%",
+        "人群水平%": "57%",
+        "检出率%": "96.15%"
+      },
+      {
+        "名称": "别样杆菌属 Alistipes",
+        "丰度%": "1.010%",
+        "人群水平%": "71%",
+        "检出率%": "91.83%"
+      },
+      {
+        "名称": "乳杆菌属 Lactobacillus",
+        "丰度%": "0.743%",
+        "人群水平%": "73%",
+        "检出率%": "91.83%"
+      },
+      {
+        "名称": "副拟杆菌属 Parabacteroides",
+        "丰度%": "0.722%",
+        "人群水平%": "45%",
+        "检出率%": "95.19%"
+      },
+      {
+        "名称": "Mediterranea",
+        "丰度%": "0.690%",
+        "人群水平%": "99%",
+        "检出率%": "4.81%"
+      },
+      {
+        "名称": "CAG-83",
+        "丰度%": "0.614%",
+        "人群水平%": "83%",
+        "检出率%": "76.44%"
+      },
+      {
+        "名称": "CAG-110",
+        "丰度%": "0.529%",
+        "人群水平%": "89%",
+        "检出率%": "71.15%"
+      },
+      {
+        "名称": "CAG-1000",
+        "丰度%": "0.493%",
+        "人群水平%": "99%",
+        "检出率%": "18.27%"
+      },
+      {
+        "名称": "脱硫弧菌属 Desulfovibrio",
+        "丰度%": "0.473%",
+        "人群水平%": "95%",
+        "检出率%": "33.65%"
+      },
+      {
+        "名称": "CAG-180",
+        "丰度%": "0.459%",
+        "人群水平%": "72%",
+        "检出率%": "86.54%"
+      },
+      {
+        "名称": "ER4",
+        "丰度%": "0.412%",
+        "人群水平%": "80%",
+        "检出率%": "60.58%"
+      },
+      {
+        "名称": "UBA11524",
+        "丰度%": "0.402%",
+        "人群水平%": "90%",
+        "检出率%": "49.52%"
+      },
+      {
+        "名称": "颤螺菌属 Oscillospira",
+        "丰度%": "0.300%",
+        "人群水平%": "81%",
+        "检出率%": "87.50%"
+      }
+    ],
+    "菌种构成": [
+      {
+        "名称": "普氏菌 Prevotella copri",
+        "丰度%": "33.924%",
+        "人群水平%": "98%",
+        "检出率%": "98.56%"
+      },
+      {
+        "名称": "Prevotella sp000434975",
+        "丰度%": "18.505%",
+        "人群水平%": "90%",
+        "检出率%": "92.79%"
+      },
+      {
+        "名称": "粪便拟杆菌 Bacteroides stercoris",
+        "丰度%": "3.939%",
+        "人群水平%": "73%",
+        "检出率%": "97.12%"
+      },
+      {
+        "名称": "拟杆菌 Bacteroides coprophilus",
+        "丰度%": "3.335%",
+        "人群水平%": "98%",
+        "检出率%": "37.02%"
+      },
+      {
+        "名称": "普氏栖粪杆菌 Faecalibacterium prausnitzii",
+        "丰度%": "3.046%",
+        "人群水平%": "58%",
+        "检出率%": "98.08%"
+      },
+      {
+        "名称": "Prevotella sp002265625",
+        "丰度%": "2.815%",
+        "人群水平%": "99%",
+        "检出率%": "24.04%"
+      },
+      {
+        "名称": "粪居拟杆菌 Bacteroides coprocola",
+        "丰度%": "2.175%",
+        "人群水平%": "90%",
+        "检出率%": "79.33%"
+      },
+      {
+        "名称": "贾氏光岗氏菌 Mitsuokella jalaludinii",
+        "丰度%": "1.769%",
+        "人群水平%": "99%",
+        "检出率%": "5.77%"
+      },
+      {
+        "名称": "普通拟杆菌 Bacteroides vulgatus",
+        "丰度%": "1.545%",
+        "人群水平%": "44%",
+        "检出率%": "98.08%"
+      },
+      {
+        "名称": "Prevotella sp002299635",
+        "丰度%": "1.446%",
+        "人群水平%": "95%",
+        "检出率%": "51.44%"
+      },
+      {
+        "名称": "Prevotella sp000436695",
+        "丰度%": "1.082%",
+        "人群水平%": "98%",
+        "检出率%": "15.38%"
+      },
+      {
+        "名称": "规则粪球菌 Coprococcus eutactus",
+        "丰度%": "1.004%",
+        "人群水平%": "96%",
+        "检出率%": "42.31%"
+      },
+      {
+        "名称": "Ruminococcus bicirculans",
+        "丰度%": "0.983%",
+        "人群水平%": "92%",
+        "检出率%": "66.35%"
+      },
+      {
+        "名称": "罗氏乳杆菌 Lactobacillus rogosae",
+        "丰度%": "0.737%",
+        "人群水平%": "80%",
+        "检出率%": "76.92%"
+      },
+      {
+        "名称": "食葡糖罗斯拜瑞氏菌 Roseburia inulinivorans",
+        "丰度%": "0.696%",
+        "人群水平%": "76%",
+        "检出率%": "87.02%"
+      },
+      {
+        "名称": "Mediterranea massiliensis",
+        "丰度%": "0.690%",
+        "人群水平%": "99%",
+        "检出率%": "3.85%"
+      },
+      {
+        "名称": "Coprococcus sp000154245",
+        "丰度%": "0.612%",
+        "人群水平%": "96%",
+        "检出率%": "28.85%"
+      },
+      {
+        "名称": "腐烂别样杆菌 Alistipes putredinis",
+        "丰度%": "0.551%",
+        "人群水平%": "75%",
+        "检出率%": "79.33%"
+      },
+      {
+        "名称": "CAG-83 sp000435555",
+        "丰度%": "0.534%",
+        "人群水平%": "83%",
+        "检出率%": "73.08%"
+      },
+      {
+        "名称": "Parabacteroides sp000436495",
+        "丰度%": "0.497%",
+        "人群水平%": "99%",
+        "检出率%": "4.33%"
+      }
     ]
   }
 }

+ 76 - 1
docs/参考资料/extract_full_report_v5.py

@@ -755,6 +755,12 @@ def extract_bacteria_tables(pdf_path):
     #     for disease_name, rows in disease_rows.items():
     #         all_tables[disease_name] = rows
 
+    # 菌群层级(纲目科属种)- 从"菌群检出详细列表"统一入口提取
+    taxonomy_rows = _parse_taxonomy_levels(reader, full_text, fmt)
+    for key, rows in taxonomy_rows.items():
+        if rows:
+            all_tables[key] = rows
+
     return all_tables
 
 
@@ -769,7 +775,76 @@ def _parse_phylum_tables(reader, full_text, fmt, title_list=None):
     return results
 
 
-def _parse_disease_bacteria(reader, full_text, fmt):
+def _parse_taxonomy_levels(reader, full_text, fmt):
+    """从\"菌群检出详细列表\"中提取纲目科属种各级数据"""
+    results = {}
+    sidx = full_text.find('菌群检出详细列表')
+    if sidx == -1:
+        return results
+
+    # 找该区域结束位置(下一个主标题)
+    end_pos = len(full_text)
+    for t in ['个体化食物推荐表', '报告总结', '健康总分']:
+        ei = full_text.find(t, sidx)
+        if ei != -1 and ei < end_pos:
+            end_pos = ei
+
+    section = full_text[sidx:end_pos]
+
+    # 每个层级用 "纲", "目", "科", "属", "种" 作为标题
+    for level, level_name in [('纲', '菌纲构成'), ('目', '菌目构成'),
+                               ('科', '菌科构成'), ('属', '菌属构成'),
+                               ('种', '菌种构成')]:
+        # 在 section 中找 level 标题后跟"名称 丰度%"
+        marker = f'\n{level}\n名称\n丰度%'
+        li = section.find(marker)
+        if li == -1:
+            # 尝试另一种格式:可能在同一行
+            marker2 = f'{level} 名称 丰度%'
+            li = section.find(marker2)
+            if li == -1:
+                continue
+
+        # 从标题后开始解析三元组数据
+        level_start = li + len(marker) if li == section.find(marker) else li + len(marker2)
+        # 用已有的 _parse_bacteria_table 逻辑,但传入 section 子串
+        # 构造一个伪 full_text 只包含该层级数据
+        # 找下一个层级标题或结束
+        level_end = len(section)
+        for next_level in ['纲', '目', '科', '属', '种']:
+            if next_level == level:
+                continue
+            ni = section.find(f'\n{next_level}\n名称', level_start)
+            if ni != -1 and ni < level_end:
+                level_end = ni
+                break
+
+        level_region = section[level_start:level_end]
+        # 用三元组解析
+        lines = [l.strip() for l in level_region.split('\n') if l.strip()]
+        rows = []
+        i = 0
+        while i < len(lines):
+            if lines[i] in ['名称', '丰度%', '人群水平%', '%人检出']:
+                i += 1
+                continue
+            name = lines[i]
+            if i + 2 < len(lines) and re.match(r'^[\d]+\.?[\d]*%?$', lines[i+1]):
+                pct = lines[i+1]
+                pop_level = lines[i+2] if i + 2 < len(lines) else ''
+                detection = lines[i+3] if i + 3 < len(lines) and re.match(r'^[\d.]+%$', lines[i+3]) else ''
+                entry = {'名称': name, '丰度%': pct, '人群水平%': pop_level}
+                if detection:
+                    entry['检出率%'] = detection
+                rows.append(entry)
+                i += 4 if detection else 3
+            else:
+                i += 1
+
+        if rows:
+            results[level_name] = rows
+
+    return results
     """提取疾病相关菌表(肥胖/便秘/抑郁/过敏/腹胀/失眠/肠道健康等)"""
     all_disease = {}
     for disease_title in DISEASE_BACTERIA_TITLES: