From 0229ff6cb75aa63e5ba6582766d0e5b9cba1fdfa Mon Sep 17 00:00:00 2001 From: Richard Ye <33409792+richardye101@users.noreply.github.com> Date: Fri, 7 Mar 2025 18:45:14 -0500 Subject: [PATCH] feat: sort pptx shapes to be parsed in top-to-bottom, left-to-right order (#1104) * Sort PPTX shapes to be read in top-to-bottom, left-to-right order Referenced from https://github.com/ssine/pptx2md/blob/39bef65b312035baeade932aad8d221e37daae5f/pptx2md/parser.py#L249 * Update README.md * Fixed formatting. * Added missing import --- README.md | 2 +- .../src/markitdown/converters/_pptx_converter.py | 7 +++++-- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 0aa788c..40f4b82 100644 --- a/README.md +++ b/README.md @@ -14,7 +14,7 @@ MarkItDown is a lightweight Python utility for converting various files to Markd At present, MarkItDown supports: - PDF -- PowerPoint +- PowerPoint (reading in top-to-bottom, left-to-right order) - Word - Excel - Images (EXIF metadata and OCR) diff --git a/packages/markitdown/src/markitdown/converters/_pptx_converter.py b/packages/markitdown/src/markitdown/converters/_pptx_converter.py index bea1226..bcde6c9 100644 --- a/packages/markitdown/src/markitdown/converters/_pptx_converter.py +++ b/packages/markitdown/src/markitdown/converters/_pptx_converter.py @@ -6,6 +6,7 @@ import re import html from typing import BinaryIO, Any +from operator import attrgetter from ._html_converter import HtmlConverter from ._llm_caption import llm_caption @@ -160,10 +161,12 @@ class PptxConverter(DocumentConverter): # Group Shapes if shape.shape_type == pptx.enum.shapes.MSO_SHAPE_TYPE.GROUP: - for subshape in shape.shapes: + sorted_shapes = sorted(shape.shapes, key=attrgetter("top", "left")) + for subshape in sorted_shapes: get_shape_content(subshape, **kwargs) - for shape in slide.shapes: + sorted_shapes = sorted(slide.shapes, key=attrgetter("top", "left")) + for shape in sorted_shapes: get_shape_content(shape, **kwargs) md_content = md_content.strip()