extract_pdf_tables.py 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. """
  2. Phase 1: 招标文件解析 — PDF 表格提取
  3. 封装 pdf_table_to_docx 模块,提取 PDF 中的表格到 DOCX 文件。
  4. 用法:
  5. from phase1_parsing.extract_pdf_tables import extract_tables
  6. meta = extract_tables("data/招标文件.pdf", "output/tables/")
  7. """
  8. import os
  9. import json
  10. def extract_tables(pdf_path: str, output_dir: str = "output/phase1_tables") -> dict:
  11. """
  12. 从 PDF 提取表格,保存为独立 DOCX 文件 + JSON 元数据。
  13. Args:
  14. pdf_path: PDF 文件路径
  15. output_dir: 输出目录
  16. Returns:
  17. tables.json 的元数据字典
  18. """
  19. from pdf_table_to_docx.extractor import PDFTableExtractor
  20. os.makedirs(output_dir, exist_ok=True)
  21. extractor = PDFTableExtractor(pdf_path)
  22. result_dir = extractor.to_docx_directory(
  23. output_dir=output_dir,
  24. page_width_cm=21.0,
  25. page_height_cm=29.7,
  26. margin_cm=2.0,
  27. )
  28. metadata_file = os.path.join(result_dir or output_dir, "tables.json")
  29. if os.path.exists(metadata_file):
  30. with open(metadata_file, "r", encoding="utf-8") as f:
  31. meta = json.load(f)
  32. print(f"[Phase1] 表格已提取: {meta.get('total_tables', 0)} 个表格")
  33. return meta
  34. print("[Phase1] 未检测到表格")
  35. return {"total_tables": 0, "tables": []}
  36. if __name__ == "__main__":
  37. meta = extract_tables("data/松江区机关事务管理局物业管理服务招标文件.pdf")
  38. for t in meta.get("tables", []):
  39. print(f" 表{t['id']}: {t['rows']}行{t['cols']}列 页码{t['pages']}")