ocr_demo.py 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. import json
  2. import os
  3. from loguru import logger
  4. from pathlib import Path
  5. from app.common.s3 import get_s3_config
  6. from demo.demo_test import get_json_from_local_or_s3
  7. from magic_pdf.dict2md.ocr_mkcontent import ocr_mk_mm_markdown_with_para, ocr_mk_nlp_markdown, ocr_mk_mm_markdown, ocr_mk_mm_standard_format
  8. from magic_pdf.libs.commons import join_path
  9. from magic_pdf.pdf_parse_by_ocr import parse_pdf_by_ocr
  10. def save_markdown(markdown_text, input_filepath):
  11. # 获取输入文件的目录
  12. directory = os.path.dirname(input_filepath)
  13. # 获取输入文件的文件名(不带扩展名)
  14. base_name = os.path.basename(input_filepath)
  15. file_name_without_ext = os.path.splitext(base_name)[0]
  16. # 定义输出文件的路径
  17. output_filepath = os.path.join(directory, f"{file_name_without_ext}.md")
  18. # 将Markdown文本写入.md文件
  19. with open(output_filepath, 'w', encoding='utf-8') as file:
  20. file.write(markdown_text)
  21. def read_json_file(file_path):
  22. with open(file_path, 'r') as f:
  23. data = json.load(f)
  24. return data
  25. def ocr_local_parse(ocr_pdf_path, ocr_json_file_path):
  26. try:
  27. ocr_pdf_model_info = read_json_file(ocr_json_file_path)
  28. pth = Path(ocr_json_file_path)
  29. book_name = pth.name
  30. ocr_parse_core(book_name, ocr_pdf_path, ocr_pdf_model_info)
  31. except Exception as e:
  32. logger.exception(e)
  33. def ocr_online_parse(book_name, start_page_id=0, debug_mode=True):
  34. try:
  35. json_object = get_json_from_local_or_s3(book_name)
  36. # logger.info(json_object)
  37. s3_pdf_path = json_object["file_location"]
  38. s3_config = get_s3_config(s3_pdf_path)
  39. ocr_pdf_model_info = json_object["doc_layout_result"]
  40. ocr_parse_core(book_name, s3_pdf_path, ocr_pdf_model_info, s3_config=s3_config)
  41. except Exception as e:
  42. logger.exception(e)
  43. def ocr_parse_core(book_name, ocr_pdf_path, ocr_pdf_model_info, start_page_id=0, s3_config=None):
  44. save_tmp_path = os.path.join(os.path.dirname(__file__), "../..", "tmp", "unittest")
  45. save_path = join_path(save_tmp_path, "md")
  46. save_path_with_bookname = os.path.join(save_path, book_name)
  47. text_content_save_path = f"{save_path_with_bookname}/book.md"
  48. pdf_info_dict = parse_pdf_by_ocr(
  49. ocr_pdf_path,
  50. s3_config,
  51. ocr_pdf_model_info,
  52. save_path,
  53. book_name,
  54. debug_mode=True)
  55. parent_dir = os.path.dirname(text_content_save_path)
  56. if not os.path.exists(parent_dir):
  57. os.makedirs(parent_dir)
  58. # markdown_content = mk_nlp_markdown(pdf_info_dict)
  59. markdown_content = ocr_mk_mm_markdown_with_para(pdf_info_dict)
  60. with open(text_content_save_path, "w", encoding="utf-8") as f:
  61. f.write(markdown_content)
  62. standard_format = ocr_mk_mm_standard_format(pdf_info_dict)
  63. standard_format_save_path = f"{save_path_with_bookname}/standard_format.txt"
  64. with open(standard_format_save_path, "w", encoding="utf-8") as f:
  65. f.write(str(standard_format))
  66. if __name__ == '__main__':
  67. #ocr_pdf_path = r"D:\project\20231108code-clean\ocr\new\双栏\s0043-1354(02)00581-x.pdf"
  68. #ocr_json_file_path = r"D:\project\20231108code-clean\ocr\new\双栏\s0043-1354(02)00581-x.json"
  69. # ocr_pdf_path = r"D:\project\20231108code-clean\ocr\new\双栏\j.1540-627x.2006.00176.x.pdf"
  70. # ocr_json_file_path = r"D:\project\20231108code-clean\ocr\new\双栏\j.1540-627x.2006.00176.x.json"
  71. ocr_pdf_path = r"/home/cxu/workspace/Magic-PDF/ocr_demo/j.1540-627x.2006.00176.x.pdf"
  72. ocr_json_file_path = r"/home/cxu/workspace/Magic-PDF/ocr_demo/j.1540-627x.2006.00176.x.json"
  73. # ocr_pdf_path = r"/home/cxu/workspace/Magic-PDF/ocr_demo/ocr_1.pdf"
  74. # ocr_json_file_path = r"/home/cxu/workspace/Magic-PDF/ocr_demo/ocr_1.json"
  75. ocr_local_parse(ocr_pdf_path, ocr_json_file_path)
  76. #ocr_online_parse(book_name="美国加州中学教材/edu_00000060")