DeepSeek 本身并不直接支持 PDF 和图片文字的识别

DeepSeek 本身并不直接支持 PDF 和图片文字的识别,但可以通过结合外部工具(如 OCR 工具和 PDF 解析库)来实现这一功能。以下是详细的 Python 代码示例,展示如何将 PDF 和图片中的文字转换为文本内容。


1. 实现思路

  • PDF 文件
    • 对于文本型 PDF,使用 PDF 解析库(如 PyMuPDF)直接提取文字。
    • 对于扫描件或图像型 PDF,使用 OCR 工具(如 PaddleOCR)提取文字。
  • 图片文件
    • 使用 OCR 工具(如 PaddleOCR)直接识别图片中的文字。

2. 安装依赖

在开始之前,请确保安装以下 Python 库和工具:

pip install paddleocr fitz PyMuPDF requests

3. Python 代码实现

步骤 1:提取 PDF 中的文字
import fitz  # PyMuPDF
from paddleocr import PaddleOCR

# 初始化 PaddleOCR
ocr = PaddleOCR(use_angle_cls=True, lang="ch")

def extract_text_from_pdf(pdf_path):
    # 打开 PDF 文件
    pdf_document = fitz.open(pdf_path)
    text = ""

    # 遍历每一页
    for page_num in range(len(pdf_document)):
        page = pdf_document.load_page(page_num)
        page_text = page.get_text()

        if page_text.strip():  # 如果是文本型 PDF
            text += page_text
        else:  # 如果是图像型 PDF,使用 OCR
            pix = page.get_pixmap()
            image_path = f"page_{page_num + 1}.png"
            pix.save(image_path)
            result = ocr.ocr(image_path, cls=True)
            page_text = "\n".join([line[1][0] for line in result[0]])
            text += page_text

    return text

# 示例:提取 PDF 中的文字
pdf_path = "example.pdf"
extracted_text = extract_text_from_pdf(pdf_path)
print("提取的文本:", extracted_text)

步骤 2:提取图片中的文字
from paddleocr import PaddleOCR

# 初始化 PaddleOCR
ocr = PaddleOCR(use_angle_cls=True, lang="ch")

def extract_text_from_image(image_path):
    # 调用 PaddleOCR 识别图片中的文字
    result = ocr.ocr(image_path, cls=True)
    text = "\n".join([line[1][0] for line in result[0]])
    return text

# 示例:提取图片中的文字
image_path = "example.jpg"
extracted_text = extract_text_from_image(image_path)
print("提取的文本:", extracted_text)

步骤 3:结合 DeepSeek 处理提取的文本

将提取的文本传递给 DeepSeek 模型进行进一步处理(如生成摘要、回答问题等)。

import requests

def call_deepseek_model(text, model_size="7B"):
    url = "http://localhost:11434/api/generate"  # ollama 的 API 地址
    payload = {
        "model": f"deepseek-r1:{model_size}",
        "prompt": f"请处理以下文本:{text}",
        "stream": False
    }
    response = requests.post(url, json=payload)
    return response.json()["response"]

# 示例:处理提取的文本
response = call_deepseek_model(extracted_text, model_size="13B")
print("DeepSeek 的响应:", response)

4. 完整代码示例

以下是一个完整的代码示例,展示如何从 PDF 和图片中提取文字并调用 DeepSeek 模型处理:

import fitz  # PyMuPDF
from paddleocr import PaddleOCR
import requests

# 初始化 PaddleOCR
ocr = PaddleOCR(use_angle_cls=True, lang="ch")

def extract_text_from_pdf(pdf_path):
    # 打开 PDF 文件
    pdf_document = fitz.open(pdf_path)
    text = ""

    # 遍历每一页
    for page_num in range(len(pdf_document)):
        page = pdf_document.load_page(page_num)
        page_text = page.get_text()

        if page_text.strip():  # 如果是文本型 PDF
            text += page_text
        else:  # 如果是图像型 PDF,使用 OCR
            pix = page.get_pixmap()
            image_path = f"page_{page_num + 1}.png"
            pix.save(image_path)
            result = ocr.ocr(image_path, cls=True)
            page_text = "\n".join([line[1][0] for line in result[0]])
            text += page_text

    return text

def extract_text_from_image(image_path):
    # 调用 PaddleOCR 识别图片中的文字
    result = ocr.ocr(image_path, cls=True)
    text = "\n".join([line[1][0] for line in result[0]])
    return text

def call_deepseek_model(text, model_size="7B"):
    url = "http://localhost:11434/api/generate"  # ollama 的 API 地址
    payload = {
        "model": f"deepseek-r1:{model_size}",
        "prompt": f"请处理以下文本:{text}",
        "stream": False
    }
    response = requests.post(url, json=payload)
    return response.json()["response"]

# 示例 1:提取 PDF 中的文字
pdf_path = "example.pdf"
pdf_text = extract_text_from_pdf(pdf_path)
print("PDF 提取的文本:", pdf_text)

# 示例 2:提取图片中的文字
image_path = "example.jpg"
image_text = extract_text_from_image(image_path)
print("图片提取的文本:", image_text)

# 示例 3:调用 DeepSeek 处理提取的文本
response = call_deepseek_model(pdf_text, model_size="13B")
print("DeepSeek 的响应:", response)

5. 运行代码

  1. 将上述代码保存为 pdf_image_to_text.py
  2. 运行代码:
    python pdf_image_to_text.py
    

6. 总结

  • 使用 PyMuPDF 提取文本型 PDF 的文字。
  • 使用 PaddleOCR 提取图像型 PDF 和图片中的文字。
  • 将提取的文本传递给 DeepSeek 模型 进行进一步处理。

通过这种方式,您可以实现从 PDF 和图片中提取文字并调用 DeepSeek 模型的功能。

你可能感兴趣的:(pdf)