| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778 |
- """
- Step 1 测试:从招标文件、采购需求、澄清公告中提取表/函/表格。
- 运行: uv run python scripts/test_step1.py
- 本脚本会调用当前配置的 LLM,并把结果保存为:
- output/171-上海群众艺术馆/step1_extracted_items.pkl
- 后续 test_step2.py 会读取该文件,不再重复提取。
- """
- import logging
- import os
- import pickle
- import sys
- from _bootstrap import PROJECT_ROOT
- # ---------- 测试数据(环境变量可覆盖) ----------
- TENDER_FILE = os.environ.get(
- "PROPOSA_TENDER_FILE",
- "test_data/171-上海群众艺术馆/上海市群众艺术馆物业管理服务采购项目招标文件.pdf",
- )
- PROCUREMENT_FILE = os.environ.get(
- "PROPOSA_PROCUREMENT_FILE",
- "test_data/171-上海群众艺术馆/采购需求.docx",
- )
- CLARIFICATION_FILE = os.environ.get("PROPOSA_CLARIFICATION_FILE", "")
- OUTPUT_DIR = os.environ.get(
- "PROPOSA_STEP1_OUTPUT_DIR",
- os.environ.get("PROPOSA_WORK_DIR", "output/171-上海群众艺术馆"),
- )
- STEP1_ITEMS_FILE = os.environ.get(
- "PROPOSA_STEP1_ITEMS_FILE",
- os.path.join(OUTPUT_DIR, "step1_extracted_items.pkl"),
- )
- VISUAL_DOCX_DIR = os.environ.get(
- "PROPOSA_STEP1_VISUAL_DIR",
- os.path.join(OUTPUT_DIR, "内容提取"),
- )
- os.environ.setdefault("BID_LLM_CACHE_DIR", os.path.join(OUTPUT_DIR, ".llm_cache"))
- # ---------- 日志 ----------
- logging.basicConfig(
- level=logging.INFO,
- format="%(asctime)s [%(levelname)s] %(message)s",
- datefmt="%H:%M:%S",
- stream=sys.stderr,
- )
- from step1_parsing import extract_items_from_tender
- print("=" * 60)
- print("Step 1: 提取招标文件中的表/函/表格(提示词+代码统一入口)")
- print("=" * 60)
- items = extract_items_from_tender(
- tender_file=TENDER_FILE,
- procurement_file=PROCUREMENT_FILE,
- clarification_file=CLARIFICATION_FILE,
- output_dir=VISUAL_DOCX_DIR,
- )
- os.makedirs(OUTPUT_DIR, exist_ok=True)
- with open(STEP1_ITEMS_FILE, "wb") as file:
- pickle.dump(items, file)
- table_count = sum(1 for i in items if i.item_type in ("表", "表格"))
- letter_count = sum(1 for i in items if i.item_type == "函")
- print(f"\n提取项数: {len(items)}(表/表格 {table_count} 项,函 {letter_count} 项)")
- print(f"可视化 DOCX 输出目录: {VISUAL_DOCX_DIR}")
- print(f"Step1 中间产物: {STEP1_ITEMS_FILE}")
- for it in items:
- src = f"pages={it.pages}" if it.pages else ""
- print(f" [{it.item_type}] {it.name} {src}")
- print()
- print("Step 1 测试完成 [OK]")
|