test_step1.py 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. """
  2. Step 1 测试:从招标文件、采购需求、澄清公告中提取表/函/表格。
  3. 运行: uv run python scripts/test_step1.py
  4. 本脚本会调用当前配置的 LLM,并把结果保存为:
  5. output/171-上海群众艺术馆/step1_extracted_items.pkl
  6. 后续 test_step2.py 会读取该文件,不再重复提取。
  7. """
  8. import logging
  9. import os
  10. import pickle
  11. import sys
  12. from _bootstrap import PROJECT_ROOT
  13. # ---------- 测试数据(环境变量可覆盖) ----------
  14. TENDER_FILE = os.environ.get(
  15. "PROPOSA_TENDER_FILE",
  16. "test_data/171-上海群众艺术馆/上海市群众艺术馆物业管理服务采购项目招标文件.pdf",
  17. )
  18. PROCUREMENT_FILE = os.environ.get(
  19. "PROPOSA_PROCUREMENT_FILE",
  20. "test_data/171-上海群众艺术馆/采购需求.docx",
  21. )
  22. CLARIFICATION_FILE = os.environ.get("PROPOSA_CLARIFICATION_FILE", "")
  23. OUTPUT_DIR = os.environ.get(
  24. "PROPOSA_STEP1_OUTPUT_DIR",
  25. os.environ.get("PROPOSA_WORK_DIR", "output/171-上海群众艺术馆"),
  26. )
  27. STEP1_ITEMS_FILE = os.environ.get(
  28. "PROPOSA_STEP1_ITEMS_FILE",
  29. os.path.join(OUTPUT_DIR, "step1_extracted_items.pkl"),
  30. )
  31. VISUAL_DOCX_DIR = os.environ.get(
  32. "PROPOSA_STEP1_VISUAL_DIR",
  33. os.path.join(OUTPUT_DIR, "内容提取"),
  34. )
  35. os.environ.setdefault("BID_LLM_CACHE_DIR", os.path.join(OUTPUT_DIR, ".llm_cache"))
  36. # ---------- 日志 ----------
  37. logging.basicConfig(
  38. level=logging.INFO,
  39. format="%(asctime)s [%(levelname)s] %(message)s",
  40. datefmt="%H:%M:%S",
  41. stream=sys.stderr,
  42. )
  43. from step1_parsing import extract_items_from_tender
  44. print("=" * 60)
  45. print("Step 1: 提取招标文件中的表/函/表格(提示词+代码统一入口)")
  46. print("=" * 60)
  47. items = extract_items_from_tender(
  48. tender_file=TENDER_FILE,
  49. procurement_file=PROCUREMENT_FILE,
  50. clarification_file=CLARIFICATION_FILE,
  51. output_dir=VISUAL_DOCX_DIR,
  52. )
  53. os.makedirs(OUTPUT_DIR, exist_ok=True)
  54. with open(STEP1_ITEMS_FILE, "wb") as file:
  55. pickle.dump(items, file)
  56. table_count = sum(1 for i in items if i.item_type in ("表", "表格"))
  57. letter_count = sum(1 for i in items if i.item_type == "函")
  58. print(f"\n提取项数: {len(items)}(表/表格 {table_count} 项,函 {letter_count} 项)")
  59. print(f"可视化 DOCX 输出目录: {VISUAL_DOCX_DIR}")
  60. print(f"Step1 中间产物: {STEP1_ITEMS_FILE}")
  61. for it in items:
  62. src = f"pages={it.pages}" if it.pages else ""
  63. print(f" [{it.item_type}] {it.name} {src}")
  64. print()
  65. print("Step 1 测试完成 [OK]")