MedResearcher/pdf_parser.py
iomgaa 099159dfb7 feat: 新增PDF解析功能模块
- pdf_parser.py: PDF解析主程序,支持命令行参数和并发处理
- src/parse.py: PDF解析核心模块,提供PDFParser类
  * 支持OCR API调用,将PDF转换为Markdown格式
  * 内置HTTP会话管理、连接池优化和重试机制
  * 支持并发处理和详细进度显示
  * 完善的错误处理和日志记录功能
2025-08-24 15:07:42 +08:00

90 lines
2.6 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import argparse
from src.parse import PDFParser
def setup_args():
"""设置命令行参数解析
Returns:
argparse.Namespace: 解析后的命令行参数
"""
parser = argparse.ArgumentParser(
description='PDF解析工具 - 用于将PDF文件通过OCR API转换为Markdown格式',
formatter_class=argparse.RawDescriptionHelpFormatter,
epilog='''
使用示例:
%(prog)s # 使用默认参数
%(prog)s --pdf-dir dataset/pdfs # 指定PDF目录
%(prog)s --parallel 10 # 设置并行度为10
%(prog)s --markdown-dir output/markdowns # 指定输出目录
'''
)
parser.add_argument(
'--pdf-dir',
default="dataset/pdfs",
help='PDF文件目录 (默认: dataset/pdfs)'
)
parser.add_argument(
'--parallel',
type=int,
default=5,
help='并发处理线程数 (默认: 5降低并发避免服务器过载)'
)
parser.add_argument(
'--markdown-dir',
default="dataset/markdowns",
help='Markdown输出目录 (默认: dataset/markdowns)'
)
return parser.parse_args()
def main():
"""主函数 - 执行PDF解析任务"""
try:
# 解析命令行参数
args = setup_args()
# 初始化PDF解析器
parser = PDFParser(
pdf_dir=args.pdf_dir,
parallel=args.parallel,
markdown_dir=args.markdown_dir
)
print(f"=== PDF解析工具启动 ===")
print(f"PDF目录: {args.pdf_dir}")
print(f"并发数: {args.parallel}")
print(f"输出目录: {args.markdown_dir}")
print(f"========================")
# 执行PDF解析
print("开始处理PDF文件...")
stats = parser.parse_all_pdfs()
print(f"\n=== 解析完成 ===")
print(f"总数: {stats['total']} 个文件")
print(f"成功: {stats['success']} 个 ({stats['success']/stats['total']*100:.1f}%)" if stats['total'] > 0 else "成功: 0 个")
print(f"失败: {stats['failed']} 个 ({stats['failed']/stats['total']*100:.1f}%)" if stats['total'] > 0 else "失败: 0 个")
print(f"================")
return 0
except FileNotFoundError as e:
print(f"错误: 找不到指定的目录 - {e}")
return 1
except ValueError as e:
print(f"错误: 参数值无效 - {e}")
return 1
except Exception as e:
print(f"错误: 程序执行异常 - {e}")
return 1
if __name__ == "__main__":
exit_code = main()
exit(exit_code)