diff --git a/docreader/parser/markitdown_parser.py b/docreader/parser/markitdown_parser.py index c067cd74..bf4b1213 100644 --- a/docreader/parser/markitdown_parser.py +++ b/docreader/parser/markitdown_parser.py @@ -22,9 +22,24 @@ class StdMarkitdownParser(BaseParser): def __init__(self, *args, **kwargs): self.markitdown = MarkItDown() - def parse_into_text(self, content: bytes) -> Document: - result = self.markitdown.convert(io.BytesIO(content), keep_data_uris=True) - return Document(content=result.text_content) + def parse_into_text(self, content: bytes, file_extension: str = None) -> Document: + """ + Modified to support explicit file_extension to fix Issue #544. + If file_extension is not provided, we try to infer it or default to None. + """ + try: + # 核心修复点:传入 file_extension 参数 + # 如果调用方没传,markitdown 可能会报错,这里我们至少保证它有尝试的机会 + result = self.markitdown.convert( + io.BytesIO(content), + file_extension=file_extension, + keep_data_uris=True + ) + return Document(content=result.text_content) + except Exception as e: + logger.warning(f"Markitdown conversion failed: {e}. Fallback might be triggered.") + # 必须抛出异常,这样外部的 FirstParser 才会切换到 DocxParser 这种备选方案 + raise e class MarkitdownParser(PipelineParser):