PythonPDF识别之文本内容与表格提取方法总结

Written by

in

文章目录
  • 在数字化办公的浪潮中,PDF文件以其格式稳定、兼容性强等优点,成为文档存储与传输的重要载体。然而,当我们需要从PDF中提取文本和表格进行进一步处理或分析时,却常常面临诸多挑战。 不同的PDF文件类型、复杂的排版布局、扫描版PDF的图像识别等问题,都可能成为提取过程中的“拦路虎”。本文将深入探讨多种PDF文本与表格提取方法,结合实际代码示例,为大家呈现一份全面的PDF提取指南。
  • 在PDF文本与表格提取的征程中,我们遇到了各种挑战,也探索了多种解决方案。每种方法都有其独特的适用场景和优缺点: 简单文本提取:PyPDF2和fitz是不错的选择,简单易用,适合初学者快速上手。 表格与精确文本提取:pdfplumber在处理表格方面表现出色,能够满足对文本和表格精确提取的需求。 复杂PDF处理:pdfminer的灵活性使其能够应对复杂的PDF结构,适合需要深度自定义提取逻辑的场景。 扫描PDF处理:pytesseract和PaddleOCR是OCR技术的代表,能够攻克扫描版PDF的难题,但对图像质量有一定要求。 商业应用:aspose.pdf以其高质量的提取效果和稳定性,成为商业应用中的优选,尽管需要考虑成本因素。 简化提取流程:textract通过封装底层逻辑,提供了简洁高效的文本提取方式,适合快速开发。 智能表格提取:camelot在表格提取方面表现出色,能够智能识别PDF中的表格结构,提高提取效率。 到此这篇关于Python PDF识别之文本内容与表格提取方法总结的文章就介绍到这了,更多相关Python PDF识别内容请搜索风君子博客以前的文章或继续浏览下面的相关文章希望大家以后多多支持风君子博客! 您可能感兴趣的文章: Python实现精准提取 PDF中的文本,表格与图片 python利用pdfplumber进行pdf文档解析提取 Python如何批量提取pdf文本内容 使用Python开发一个PDF文本提取工具 Python使用pdfminer库玩转PDF文本提取 使用Python实现提取PDF文件中指定页面的内容 Python从PDF中提取文本的方法效率总结
  • 目录
    • 一、前言
    • 二、文本提取方法
      • 1. pdfplumber:精准提取文本与表格
      • 2. fitz(PyMuPDF):快速提取文本与图像
      • 3. PyPDF2:简单文本提取的利器
      • 4. pdfminer:深度自定义提取逻辑
      • 5. pdfquery:提取特定区域文本
      • 6. pytesseract与PaddleOCR:攻克扫描版PDF
      • 7. aspose.pdf:商业应用的高质量选择
      • 8. textract:简化文本提取流程
    • 三、表格提取方法
      • 1. pdfplumber:精确表格提取
      • 2. camelot:智能表格提取
      • 3. aspose.pdf:高质量表格提取
    • 四、总结

      在数字化办公的浪潮中,PDF文件以其格式稳定、兼容性强等优点,成为文档存储与传输的重要载体。然而,当我们需要从PDF中提取文本和表格进行进一步处理或分析时,却常常面临诸多挑战。

      不同的PDF文件类型、复杂的排版布局、扫描版PDF的图像识别等问题,都可能成为提取过程中的“拦路虎”。本文将深入探讨多种PDF文本与表格提取方法,结合实际代码示例,为大家呈现一份全面的PDF提取指南。

      pdfplumber是一个功能强大的Python库,尤其在处理包含表格的PDF文件时表现出色。通过pdfplumber,我们不仅能提取文本,还能对表格进行精确解析。

      import pdfplumber
      
      pdf_path = "你的PDF文件路径"
      
      with pdfplumber.open(pdf_path) as pdf:
          text = ""
          for page in pdf.pages:
              page_text = page.extract_text()
              text += page_text
              print(page_text)

      fitz,即PyMuPDF,以其高效性著称。它不仅能够快速提取PDF中的文本,还能处理PDF中的图像内容。

      import fitz
      
      doc = fitz.open(pdf_path)
      text = ""
      for page in doc:
          page_text = page.get_text()
          text += page_text
          print(page_text)

      PyPDF2是一个广为人知的PDF处理库,虽然其功能相对基础,但对于简单的文本提取任务已经足够。

      import PyPDF2
      
      def extract_text_from_pdf(pdf_path):
          pdfReader = PyPDF2.PdfReader(pdf_path)
          text = ""
          for page_num in range(len(pdfReader.pages)):
              page = pdfReader.pages[page_num]
              text += page.extract_text()
          return text
      
      print(extract_text_from_pdf(pdf_path))
      

      pdfminer是一个高度可定制的PDF处理库,适用于需要深度自定义提取逻辑的场景。

      from pdfminer.high_level import extract_text
      
      def extract_text_from_pdf(pdf_path):
          text = extract_text(pdf_path)
          return text
      
      print(extract_text_from_pdf(pdf_path))

      pdfquery通过坐标定位,能够精确提取指定区域的文本内容。
       

      import pdfquery
      
      def extract_specific_text_from_pdf(pdf_path):
          pdf = pdfquery.PDFQuery(pdf_path)
          pdf.load()
          text = pdf.pq('LTTextLineHorizontal:in_bbox("100, 500, 400, 600")').text()
          return text
      
      print(extract_specific_text_from_pdf(pdf_path))
      

      对于扫描版PDF或图像型PDF,可以使用pytesseract和PaddleOCR进行OCR识别。

      pytesseract:

      from pdf2image import convert_from_path
      import pytesseract
      
      def extract_text_from_scanned_pdf(pdf_path):
          pages = convert_from_path(pdf_path)
          text = ""
          for page in pages:
              text += pytesseract.image_to_string(page, lang='chi_sim') + "n"
          return text
      
      print(extract_text_from_scanned_pdf(pdf_path))
      

      PaddleOCR

      from pdf2image import convert_from_path
      from paddleocr import PaddleOCR
      
      def extract_text_from_scanned_pdf(pdf_path, lang='ch'):
          ocr = PaddleOCR(use_angle_cls=True, lang=lang)
          pages = convert_from_path(pdf_path)
          text = ""
          for page in pages:
              result = ocr.ocr(page, cls=True)
              for idx in range(len(result)):
                  res = result[idx]
                  for line in res:
                      text += line[1][0] + "n"
          return text
      
      print(extract_text_from_scanned_pdf(pdf_path))

      aspose.pdf是一个商业库,提供了高质量的文本和表格提取功能。

      from aspose.pdf import Document
      from aspose.pdf.text import TextFragmentAbsorber
      
      def extract_text_from_pdf(pdf_path):
          pdf_doc = Document(pdf_path)
          absorber = TextFragmentAbsorber()
          text = ""
          for page in pdf_doc.pages:
              page.accept(absorber)
              for fragment in absorber.text_fragments:
                  text += fragment.text + "n"
              absorber.text_fragments.clear()
          return text
      
      print(extract_text_from_pdf(pdf_path))
      

      textract是一个简洁高效的文本提取库,能够快速实现文本提取功能。

      import textract
      
      def extract_text_from_pdf(pdf_path):
          text = textract.process(pdf_path, method='pdfminer')
          print("-----------textract--------------------")
          print(text.decode('utf-8'))
          return text.decode('utf-8')
      
      print(extract_text_from_pdf(pdf_path))

      pdfplumber不仅擅长文本提取,还能精确提取PDF中的表格数据。

      import pdfplumber
      
      with pdfplumber.open(pdf_path) as pdf:
          for page in pdf.pages:
              table = page.extract_table()
              if table:
                  for row in table:
                      print(row)

      camelot是一个专门用于从PDF中提取表格数据的Python库,它能够智能地识别PDF中的表格结构。

      import camelot
      import pandas as pd
      
      def extract_tables_from_pdf(pdf_path):
          tables = camelot.read_pdf(pdf_path, flavor='stream')
          combined_df = pd.concat([table.df for table in tables])
          print("-----------camelot--------------------")
          return combined_df
      
      tables_df = extract_tables_from_pdf(pdf_path)
      print(tables_df)

      aspose.pdf库也提供了表格提取的功能,适合商业应用。

      from aspose.pdf import Document
      from aspose.pdf.text import TextFragmentAbsorber
      
      def extract_tables_from_pdf(pdf_path):
          pdf_doc = Document(pdf_path)
          absorber = TextFragmentAbsorber()
          tables = []
          for page in pdf_doc.pages:
              page.accept(absorber)
              for fragment in absorber.text_fragments:
                  # 处理表格数据
                  pass
          return tables
      
      print(extract_tables_from_pdf(pdf_path))

      在PDF文本与表格提取的征程中,我们遇到了各种挑战,也探索了多种解决方案。每种方法都有其独特的适用场景和优缺点:

      • 简单文本提取:PyPDF2和fitz是不错的选择,简单易用,适合初学者快速上手。
      • 表格与精确文本提取:pdfplumber在处理表格方面表现出色,能够满足对文本和表格精确提取的需求。
      • 复杂PDF处理:pdfminer的灵活性使其能够应对复杂的PDF结构,适合需要深度自定义提取逻辑的场景。
      • 扫描PDF处理:pytesseract和PaddleOCR是OCR技术的代表,能够攻克扫描版PDF的难题,但对图像质量有一定要求。
      • 商业应用:aspose.pdf以其高质量的提取效果和稳定性,成为商业应用中的优选,尽管需要考虑成本因素。
      • 简化提取流程:textract通过封装底层逻辑,提供了简洁高效的文本提取方式,适合快速开发。
      • 智能表格提取:camelot在表格提取方面表现出色,能够智能识别PDF中的表格结构,提高提取效率。

      到此这篇关于Python PDF识别之文本内容与表格提取方法总结的文章就介绍到这了,更多相关Python PDF识别内容请搜索风君子博客以前的文章或继续浏览下面的相关文章希望大家以后多多支持风君子博客!

      您可能感兴趣的文章:

      • Python实现精准提取 PDF中的文本,表格与图片
      • python利用pdfplumber进行pdf文档解析提取
      • Python如何批量提取pdf文本内容
      • 使用Python开发一个PDF文本提取工具
      • Python使用pdfminer库玩转PDF文本提取
      • 使用Python实现提取PDF文件中指定页面的内容
      • Python从PDF中提取文本的方法效率总结

      站内搜索