@@ -0,0 +1,30 @@
|
||||
"""PPT/PPTX parser: convert to PDF, then reuse PdfParser."""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
from pathlib import Path
|
||||
|
||||
from rag_cut.models import Block
|
||||
from rag_cut.parsers.base import BaseParser
|
||||
from rag_cut.parsers.office_to_pdf import convert_to_pdf
|
||||
from rag_cut.parsers.pdf_parser import PdfParser
|
||||
|
||||
|
||||
class PptParser(BaseParser):
|
||||
"""Parse presentations by converting to PDF and delegating to PdfParser."""
|
||||
|
||||
def __init__(self) -> None:
|
||||
self._pdf_parser = PdfParser()
|
||||
|
||||
def parse(self, path: Path, assets_dir: Path) -> list[Block]:
|
||||
assets_dir.mkdir(parents=True, exist_ok=True)
|
||||
pdf_dir = assets_dir / "_conversion"
|
||||
pdf_path = convert_to_pdf(path, pdf_dir)
|
||||
|
||||
blocks = self._pdf_parser.parse(pdf_path, assets_dir)
|
||||
source_fmt = path.suffix.lower().lstrip(".")
|
||||
for block in blocks:
|
||||
block.meta.setdefault("source_format", source_fmt)
|
||||
if page := block.meta.get("page"):
|
||||
block.meta["slide"] = page
|
||||
return blocks
|
||||
Reference in New Issue
Block a user