90 lines
2.6 KiB
Python
90 lines
2.6 KiB
Python
|
|
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)
|