to_markdown.rst 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. Convert To Markdown
  2. ========================
  3. Local File Example
  4. ^^^^^^^^^^^^^^^^^^
  5. .. code:: python
  6. import os
  7. from magic_pdf.data.data_reader_writer import FileBasedDataWriter, FileBasedDataReader
  8. from magic_pdf.data.dataset import PymuDocDataset
  9. from magic_pdf.model.doc_analyze_by_custom_model import doc_analyze
  10. # args
  11. pdf_file_name = "abc.pdf" # replace with the real pdf path
  12. name_without_suff = pdf_file_name.split(".")[0]
  13. # prepare env
  14. local_image_dir, local_md_dir = "output/images", "output"
  15. image_dir = str(os.path.basename(local_image_dir))
  16. os.makedirs(local_image_dir, exist_ok=True)
  17. image_writer, md_writer = FileBasedDataWriter(local_image_dir), FileBasedDataWriter(
  18. local_md_dir
  19. )
  20. image_dir = str(os.path.basename(local_image_dir))
  21. # read bytes
  22. reader1 = FileBasedDataReader("")
  23. pdf_bytes = reader1.read(pdf_file_name) # read the pdf content
  24. # proc
  25. ## Create Dataset Instance
  26. ds = PymuDocDataset(pdf_bytes)
  27. ## inference
  28. infer_result = ds.apply(doc_analyze, ocr=True)
  29. ### draw model result on each page
  30. infer_result.draw_model(os.path.join(local_md_dir, f"{name_without_suff}_model.pdf"))
  31. ## pipeline
  32. pipe_result = infer_result.pipe_ocr_mode(image_writer)
  33. ### draw layout result on each page
  34. pipe_result.draw_layout(os.path.join(local_md_dir, f"{name_without_suff}_layout.pdf"))
  35. ### draw spans result on each page
  36. pipe_result.draw_span(os.path.join(local_md_dir, f"{name_without_suff}_spans.pdf"))
  37. ### dump markdown
  38. pipe_result.dump_md(md_writer, f"{name_without_suff}.md", image_dir)
  39. S3 File Example
  40. ^^^^^^^^^^^^^^^^
  41. .. code:: python
  42. import os
  43. from magic_pdf.data.data_reader_writer import S3DataReader, S3DataWriter
  44. from magic_pdf.data.dataset import PymuDocDataset
  45. from magic_pdf.model.doc_analyze_by_custom_model import doc_analyze
  46. bucket_name = "{Your S3 Bucket Name}" # replace with real bucket name
  47. ak = "{Your S3 access key}" # replace with real s3 access key
  48. sk = "{Your S3 secret key}" # replace with real s3 secret key
  49. endpoint_url = "{Your S3 endpoint_url}" # replace with real s3 endpoint_url
  50. reader = S3DataReader('unittest/tmp/', bucket_name, ak, sk, endpoint_url) # replace `unittest/tmp` with the real s3 prefix
  51. writer = S3DataWriter('unittest/tmp', bucket_name, ak, sk, endpoint_url)
  52. image_writer = S3DataWriter('unittest/tmp/images', bucket_name, ak, sk, endpoint_url)
  53. # args
  54. pdf_file_name = (
  55. "s3://llm-pdf-text-1/unittest/tmp/bug5-11.pdf" # replace with the real s3 path
  56. )
  57. # prepare env
  58. local_dir = "output"
  59. name_without_suff = os.path.basename(pdf_file_name).split(".")[0]
  60. # read bytes
  61. pdf_bytes = reader.read(pdf_file_name) # read the pdf content
  62. # proc
  63. ## Create Dataset Instance
  64. ds = PymuDocDataset(pdf_bytes)
  65. ## inference
  66. infer_result = ds.apply(doc_analyze, ocr=True)
  67. ### draw model result on each page
  68. infer_result.draw_model(os.path.join(local_dir, f'{name_without_suff}_model.pdf')) # dump to local
  69. ## pipeline
  70. pipe_result = infer_result.pipe_ocr_mode(image_writer)
  71. ### draw layout result on each page
  72. pipe_result.draw_layout(os.path.join(local_dir, f'{name_without_suff}_layout.pdf')) # dump to local
  73. ### draw spans result on each page
  74. pipe_result.draw_span(os.path.join(local_dir, f'{name_without_suff}_spans.pdf')) # dump to local
  75. ### dump markdown
  76. pipe_result.dump_md(writer, f'{name_without_suff}.md', "unittest/tmp/images") # dump to remote s3
  77. Check :doc:`../data/data_reader_writer` for more [reader | writer] examples and check :doc:`../../api/pipe_operators` or :doc:`../../api/model_operators` for api details