Files
PlantAI-rag/docs/analysis/DEPENDENCY_ANALYSIS.md
2026-07-10 17:59:59 +08:00

8.4 KiB
Executable File

提取器依赖关系分析

📊 分析说明

本文档分析各提取器之间的依赖关系,为归档操作提供参考。


🎯 核心提取器依赖图

根目录提取器 (独立运行)
├── extractor_fusion_complete.py          [独立,无外部依赖]
├── extractor_fusion_v1.py                [独立]
├── extractor_pc_based.py                 [依赖: rule_base_full.json]
├── llm_extractor_dashscope.py            [依赖: dashscope API]
├── llm_relation_extractor.py             [依赖: dashscope API]
└── universal_extractor_v2.py             [待分析]

src/rag/extractors/ (模块间有依赖)
├── extract_v12_final.py                  [依赖: supplementary_downloader, multi_db_extractor, data_availability_extractor]
├── extract_v12_1_fixed.py                [依赖: 内置规则]
├── supplementary_downloader.py           [独立工具]
├── gene_entity_filter.py                 [独立工具]
├── gene_centric_chunker.py               [独立工具]
├── section_supplementer.py               [独立工具]
├── geo_extractor.py                      [独立,NCBI API]
├── multi_db_extractor.py                 [独立工具]
├── data_availability_extractor.py        [依赖: multi_db_extractor]
└── unified_data_extractor.py             [依赖: multi_db_extractor, data_availability_extractor]

scripts/extractors/ (相对独立)
├── extract_v10_with_supplementary.py     [独立]
└── extract_v7-v9/*.py                    [旧版,独立]

📋 详细依赖分析

1. 根目录提取器

✅ extractor_fusion_complete.py

# 依赖:仅标准库 + PyMuPDF
import re
import json
from pathlib import Path
from dataclasses import dataclass, field, asdict
from typing import List, Dict, Optional, Set
import fitz  # PyMuPDF

结论:完全独立,可安全移动

✅ extractor_fusion_v1.py

结论:备份版本,可归档

⚠️ extractor_pc_based.py

# 依赖:rule_base_full.json (硬编码路径)
rule_base_path = Path("/home/xia-lab/gene-family-mas-v2/rule_base_full.json")

结论:依赖规则库文件,移动时需保持相对路径或更新路径

✅ llm_extractor_dashscope.py

结论:仅依赖dashscope SDK,可移动

✅ llm_relation_extractor.py

结论:仅依赖dashscope SDK,可移动

✅ universal_extractor_v2.py

结论:待验证,但通常独立


2. src/rag/extractors/ 模块

🔗 extract_v12_final.py

# 内部依赖 (相对导入)
from .supplementary_downloader import SupplementaryDownloader
from .multi_db_extractor import MultiDatabaseExtractor, DatabaseEntry, DataType, Database
from .data_availability_extractor import DataAvailabilityExtractor, DataAvailabilityEntry

结论:使用相对导入,模块间耦合,需一起移动或保持结构

🔗 extract_v12_1_fixed.py

# 内置规则,无外部文件依赖
# 但有内部方法 _extract_relations_rule_based

结论:相对独立,但建议保留在extractors包内

✅ supplementary_downloader.py

结论:独立工具类,可单独使用

🔗 data_availability_extractor.py

# 条件导入
from .multi_db_extractor import MultiDatabaseExtractor

结论:依赖multi_db_extractor

🔗 unified_data_extractor.py

from .multi_db_extractor import MultiDatabaseExtractor, DatabaseEntry
from .data_availability_extractor import DataAvailabilityExtractor, DataAvailabilityEntry

结论:依赖multi_db_extractor和data_availability_extractor

✅ 其他工具 (独立)

  • gene_entity_filter.py
  • gene_centric_chunker.py
  • section_supplementer.py
  • geo_extractor.py
  • multi_db_extractor.py

3. 脚本中的导入

从src.rag导入的脚本

# 以下脚本从 src.rag 导入:
scripts/build_rag_*.py          -> from src.rag.pdf_extractor import PDFExtractor
scripts/rebuild_index_batch.py  -> from src.rag.docling_extractor import ...
scripts/process_gfpaper_root.py -> from src.rag.docling_extractor import ...
scripts/test_rag.py             -> from src.rag.pdf_extractor import PDFExtractor
scripts/build_index_from_structured.py -> from src.rag.pdf_extractor import PDFExtractor

# 测试脚本:
test_litchi_v12.py              -> from src.rag.extractors.extract_v12_final import ...

结论:这些脚本依赖src.rag包结构,归档时不能破坏


4. 规则库依赖

# 硬编码路径引用 rule_base_full.json:
extractor_pc_based.py:          /home/xia-lab/gene-family-mas-v2/rule_base_full.json
rule_base_loader.py:            /home/xia-lab/gene-family-mas-v2/rule_base_full.json

# 其他规则文件:
rule_base_complete.py           [Python模块]
rule_base_priority.json         [JSON数据]
rule_base_loader.py             [加载器]

结论:归档时需更新硬编码路径或使用相对路径


🗂️ 安全归档策略

方案A:保守归档 (推荐)

保持不动的文件:

# src/rag/ 结构必须保持
src/rag/extractors/*.py         [全部保留]
src/rag/pdf_extractor.py        [被脚本依赖]
src/rag/docling_extractor.py    [被脚本依赖]
src/rag/entity_extractor.py     [被entity_store依赖]

# 根目录核心文件
extractor_fusion_complete.py    [主提取器]
rule_base_full.json             [被pc_based依赖]

可归档的文件:

# 根目录 - 归档到 extractors/archive/
extractor_suc5*.py              [6个]
extractor_pc_*.py (除pc_based)  [8个,pc_based保留]
extractor_complete_v1.py
extractor_enhanced.py
extractor_final.py
extractor_hybrid*.py
extractor_llm_v1.py
extractor_production_v1.py
extractor_v2_pro.py
universal_extractor_v1.py

# 文档 - 归档到 docs/
*.md (除README和EXTRACTOR_CATALOG)

# 脚本 - 归档到 scripts/shell/
*.sh

# 测试 - 归档到 tests/
test_*.py
test_*.json
test_*.md

方案B:激进归档

需要修改代码的归档:

# 如果要移动 extractor_pc_based.py:
# 需要修改其中的硬编码路径:
# rule_base_path = Path("/home/xia-lab/gene-family-mas-v2/rule_base_full.json")
# ->
# rule_base_path = Path(__file__).parent.parent / "data" / "rule_bases" / "rule_base_full.json"

📋 归档操作清单

阶段1:安全归档 (无需修改代码)

操作 命令 风险
归档SUC5提取器 mv extractor_suc5*.py extractors/archive/ 无
归档PC实验版 mv extractor_pc_122_types.py extractor_pc_complete*.py ... extractors/archive/ 低
归档旧版提取器 mv extractor_complete_v1.py ... extractors/archive/ 无
归档文档 mv *.md docs/ (保留README) 无
归档脚本 mv *.sh scripts/shell/ 低

阶段2:需要验证的归档

操作 验证方法 风险
移动rule_base*.json 检查extractor_pc_based.py路径 中
重构src/rag/extractors 运行test_litchi_v12.py 高

阶段3:不建议归档

文件/目录 原因
src/rag/extractors/ 模块间有依赖,脚本引用
src/rag/pdf_extractor.py 被多个脚本导入
src/rag/docling_extractor.py 被rebuild_index_batch.py导入
extractor_fusion_complete.py 主提取器,保持根目录方便使用

🔧 归档后路径更新

如果移动 rule_base_full.json:

# extractor_pc_based.py 第X行修改:
# 原:
rule_base_path = Path("/home/xia-lab/gene-family-mas-v2/rule_base_full.json")

# 改为:
rule_base_path = Path(__file__).parent / "data" / "rule_bases" / "rule_base_full.json"
# 或:
import os
rule_base_path = Path(os.environ.get("RULE_BASE_PATH", "/home/xia-lab/gene-family-mas-v2/rule_base_full.json"))

如果创建根目录软链接:

# 归档后创建软链接方便访问:
ln -s extractors/current/fusion/extractor_fusion_complete.py extractor.py
ln -s docs/guides/EXTRACTOR_CATALOG.md EXTRACTOR_CATALOG.md

✅ 建议执行顺序

  1. 先备份: git commit -m "before organization"
  2. 创建目录: mkdir -p extractors/archive docs/{changelogs,reports,plans,analysis,guides} scripts/shell
  3. 归档文档: 移动所有.md到docs/
  4. 归档提取器: 移动SUC5和PC实验版到extractors/archive/
  5. 归档脚本: 移动.sh到scripts/shell/
  6. 测试: 运行 python extractor_fusion_complete.py --help 验证
  7. 创建软链接: 根目录保留快捷方式

分析时间:2026-04-12