examples/pdf_to_markdown/main.py
Rama main · réplica de lectura del repositorio original.
"""
PDF to Markdown (v1) - CocoIndex pipeline example.
- Walk local PDF files
- Convert PDFs to markdown using docling
- Output markdown files to an output folder
"""
from __future__ import annotations
import pathlib
from docling.datamodel.accelerator_options import AcceleratorDevice, AcceleratorOptions
from docling.datamodel.base_models import InputFormat
from docling.datamodel.pipeline_options import PdfPipelineOptions
from docling.document_converter import DocumentConverter, PdfFormatOption
import cocoindex as coco
from cocoindex.connectors import localfs
from cocoindex.resources.file import PatternFilePathMatcher
_pipeline_options = PdfPipelineOptions(
accelerator_options=AcceleratorOptions(device=AcceleratorDevice.CPU)
)
_converter = DocumentConverter(
format_options={
InputFormat.PDF: PdfFormatOption(pipeline_options=_pipeline_options)
}
)
@coco.fn(memo=True)
def process_file(
file: localfs.File,
outdir: pathlib.Path,
) -> None:
# Get absolute path of the PDF file
markdown = _converter.convert(
file.file_path.resolve()
).document.export_to_markdown()
# Replace .pdf extension with .md
outname = file.file_path.path.stem + ".md"
localfs.declare_file(outdir / outname, markdown, create_parent_dirs=True)
@coco.fn
async def app_main(sourcedir: pathlib.Path, outdir: pathlib.Path) -> None:
files = localfs.walk_dir(
sourcedir,
recursive=True,
path_matcher=PatternFilePathMatcher(included_patterns=["**/*.pdf"]),
)
await coco.mount_each(process_file, files.items(), outdir)
app = coco.App(
"PdfToMarkdown",
app_main,
sourcedir=pathlib.Path("./pdf_files"),
outdir=pathlib.Path("./out"),
)