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)