pymupdf 剖析 PDF

打印 上一主题 下一主题

主题 810|帖子 810|积分 2430

使用大模型处置惩罚文档时,必要对二进制格式的文档进转剖析提取文字和图片,本文使用 pymupdf 开源库,对 PDF 举行剖析提取文字和图片。
安装依赖

首先安装 pymupdf 依赖
  1. pymupdf4llm==0.0.17
  2. pymupdf==1.24.10
  3. apscheduler==3.10.4
复制代码
PDF 转 Markdown

pymupdf 将 PDF 转换为 markdown,传入 pdf 路径举行处置惩罚。
  1. def  convert_to_md(pdf_path):
  2.     return pymupdf4llm.to_markdown(pdf_path)
复制代码
PDF 中提取图片

传入 PDF 路径,保存图片,并返回路径列表。
  1. def extract_image(pdf_path):
  2.     doc = pymupdf.open(pdf_path) # open a document
  3.     image_path_list = []
  4.     rad_prefix = ''.join(random.choices(string.ascii_letters, k=5))
  5.     Path(f"images/{rad_prefix}").mkdir(parents=True)
  6.     for page_index in range(len(doc)): # iterate over pdf pages
  7.         page = doc[page_index] # get the page
  8.         image_list = page.get_images()
  9.         # print the number of images found on the page
  10.         if image_list:
  11.             print(f"Found {len(image_list)} images on page {page_index}")
  12.         else:
  13.             print("No images found on page", page_index)
  14.         
  15.         for image_index, img in enumerate(image_list, start=1): # enumerate the image list
  16.             xref = img[0] # get the XREF of the image
  17.             pix = pymupdf.Pixmap(doc, xref) # create a Pixmap
  18.             if pix.n - pix.alpha > 3: # CMYK: convert to RGB first
  19.                 pix = pymupdf.Pixmap(pymupdf.csRGB, pix)
  20.             
  21.             image_path = Path("images/%s/page_%s-image_%s.png" % (rad_prefix,page_index, image_index)).absolute()
  22.             image_path_list.append(image_path)
  23.             pix.pil_save(image_path) # save the image as png
  24.             pix = None
  25.     return image_path_list
复制代码
可视化

通过 Gradio 可视化 PDF 转换。
  1. import gradio as gr
  2. import pdf
  3. def covnert_pdf(x):
  4.     print(x)
  5.     md_content = pdf.convert_to_md(x)
  6.     image_list = pdf.extract_image(x)
  7.     return [md_content , image_list]
  8. with gr.Blocks() as demo:
  9.     gr.Markdown(
  10.         value="# PDF 提取"
  11.     )
  12.     with gr.Tab("Markdown"):
  13.         md = gr.Markdown(
  14.              height=500
  15.         )
  16.     with gr.Tab("Images"):
  17.         gallery = gr.Gallery(columns=4,  object_fit="None", height="auto", show_download_button=True)
  18.     with gr.Row():
  19.         go_btn = gr.UploadButton()
  20.         go_btn.upload(covnert_pdf, go_btn, [md, gallery])
  21. from apscheduler.schedulers.background import BackgroundScheduler
  22. demo.launch()
复制代码


总结

pymupdf 转 markdown 的结果还是不错的,可以到 Modelscope 的空间举行体验。https://modelscope.cn/studios/model1001/pdf_converter

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

曂沅仴駦

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表