以编程方式使用文档

PaddleOCR 是百度开发的一款强大且轻量级的OCR工具包,可将图像和PDF与LLM连接起来。它支持超过100种语言,并将文档内容转换为结构化的、可用于AI的数据。

此集成通过以下方式提供PaddleOCR的大模型文档解析功能: PaddleOCRVLLoader 文档加载器。

概览

集成详情

本地可序列化JS支持
PaddleOCRVLLoaderlangchain-paddleocr

加载器特性

来源文档延迟加载原生异步支持
PaddleOCRVLLoader

PaddleOCRVLLoader 使您能够:

  • - 使用百度PaddleOCR-VL系列模型(如PaddleOCR-VL、PaddleOCR-VL-1.5)从PDF和图像文件中提取文本和布局信息
  • - 处理来自本地文件或远程URL的文档

先决条件

要使用PaddleOCR-VL加载器,您需要:

  1. **API访问**: 访问PaddleOCR-VL API端点
  2. **认证**: API的访问令牌(可以直接提供或通过 PADDLEOCR_ACCESS_TOKEN 环境变量)

API URL和访问令牌都可以在 PaddleOCR官网上找到。只需点击 **API** 按钮并从提供的API调用示例中复制URL和令牌。

设置

pip install langchain-paddleocr

初始化

基础初始化需要API端点URL和文件路径:

from langchain_paddleocr import PaddleOCRVLLoader
from pydantic import SecretStr

loader = PaddleOCRVLLoader(
    file_path="path/to/document.pdf",
    api_url="your-api-endpoint",
    access_token=SecretStr("your-access-token")  # Optional if using environment variable
)

通过环境变量进行认证:

然后在初始化时不使用访问_令牌参数:

loader = PaddleOCRVLLoader(
    file_path="path/to/document.pdf",
    api_url="your-api-endpoint"
)

高级配置

加载器支持众多配置选项以微调文档处理:

loader = PaddleOCRVLLoader(
    file_path=["document1.pdf", "document2.jpg"],  # Multiple files
    api_url="your-api-endpoint",

    access_token=None,  # Optional: SecretStr for API authentication
    file_type="pdf",  # Optional: "pdf" or "image", or None for auto-detection

    use_doc_orientation_classify=False,  # Enable document orientation classification
    use_doc_unwarping=False,  # Enable document unwarping
    use_layout_detection=None,  # Enable layout detection (None = use service default)
    use_chart_recognition=None,  # Enable chart recognition (None = use service default)
    use_seal_recognition=None,  # Enable seal recognition (None = use service default)
    use_ocr_for_image_block=None,  # Run OCR on image blocks (None = use service default)

    layout_threshold=None,  # Detection threshold (None = use service default)
    layout_nms=None,  # Apply non-maximum suppression (None = use service default)
    layout_unclip_ratio=None,  # Layout unclip ratio (None = use service default)
    layout_merge_bboxes_mode=None,  # Mode for merging layout bounding boxes (None = use service default)
    layout_shape_mode=None,  # Layout shape mode (None = use service default)

    prompt_label=None,  # Prompt label for VLM (None = use service default)
    format_block_content=None,  # Format block content (None = use service default)
    repetition_penalty=None,  # Repetition penalty for VLM sampling (None = use service default)
    temperature=None,  # Temperature for VLM sampling (None = use service default)
    top_p=None,  # Top-p sampling value for VLM (None = use service default)
    min_pixels=None,  # Minimum pixels allowed in preprocessing (None = use service default)
    max_pixels=None,  # Maximum pixels allowed in preprocessing (None = use service default)
    max_new_tokens=None,  # Maximum tokens generated by VLM (None = use service default)

    merge_layout_blocks=None,  # Merge layout blocks across columns (None = use service default)
    markdown_ignore_labels=None,  # Layout labels to ignore in Markdown (None = use service default)
    vlm_extra_args=None,  # Additional VLM configuration parameters (None = use service default)

    prettify_markdown=None,  # Prettify Markdown output (None = use service default)
    show_formula_number=None,  # Include formula numbers in Markdown (None = use service default)
    restructure_pages=None,  # Restructure results across pages (None = use service default)
    merge_tables=None,  # Merge tables across pages (None = use service default)
    relevel_titles=None,  # Relevel titles (None = use service default)
    visualize=None,  # Include visualization results (None = use service default)

    additional_params=None,  # Additional API parameters
    timeout=300,  # Request timeout in seconds
)

基础用法

加载文档

# Load a single document
loader = PaddleOCRVLLoader(
    file_path="https://arxiv.org/pdf/2408.09869",
    api_url="your-api-endpoint"
)
docs = loader.load()

# Inspect the results
for doc in docs[:2]:
    print(f"Content: {doc.page_content[:200]}...")
    print(f"Source: {doc.metadata['source']}")
    print("---")

处理多种文件类型

加载器会根据文件扩展名自动检测文件类型:

# Mixed file types - auto-detected
files = [
    "document.pdf",      # PDF file
    "image.jpg",         # Image file
    "https://example.com/report.pdf"  # Remote PDF
]

loader = PaddleOCRVLLoader(file_path=files, api_url="your-api-endpoint")

支持的图像格式: .jpg, .jpeg, .png, .bmp, .tiff, .tif, .webp 支持的文档格式: .pdf

高级功能

访问原始API响应

加载器会在文档元数据中包含完整的API响应:

docs = loader.load()
first_doc = docs[0]

# Access raw API response for advanced processing
raw_response = first_doc.metadata["paddleocr_vl_raw_response"]
print(f"Layout results: {len(raw_response['result']['layoutParsingResults'])}")

错误处理

加载器提供详细的错误消息以便故障排除:

try:
    docs = loader.load()
except ValueError as e:
    print(f"Processing failed: {e}")
    # Common issues: invalid API endpoint, authentication errors, unsupported file types

最佳实践

错误处理

  • 网络超时: 设置适当的 timeout 参数以处理大型文档
  • 认证: 使用环境变量进行安全的令牌管理
  • 文件验证:在处理前验证文件可访问性

故障排除

常见问题

  1. **认证错误**:确保 PADDLEOCR_ACCESS_TOKEN 已设置或 access_token 已提供
  2. **文件类型错误**:验证文件扩展名和可访问性
  3. **API 连接问题**:检查端点 URL 和网络连接

调试模式

要进行详细调试,请检查原始 API 响应:

docs = loader.load()
if docs:
    raw_response = docs[0].metadata.get("paddleocr_vl_raw_response")
    print("API Response structure:", raw_response.keys())

API 参考