From 56166abff6f65e6e8ad7751b7edd0eda3253e142 Mon Sep 17 00:00:00 2001 From: Aw <62973442+Awei-996@users.noreply.github.com> Date: Mon, 11 May 2026 21:54:25 +0800 Subject: [PATCH] =?UTF-8?q?fix(parser):=20=E4=BF=AE=E5=A4=8D=20Docling=20?= =?UTF-8?q?=E8=A7=A3=E6=9E=90=E6=96=87=E6=A1=A3=E6=97=B6=E5=9B=BE=E7=89=87?= =?UTF-8?q?=E9=94=99=E4=BD=8D=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 遍历所有图片生成等长替换列表,非 data URI 图片填空字符串, 确保占位符替换严格 1:1,避免混合图片类型时顺序错乱。 --- .../package/yuxi/plugins/parser/unified.py | 35 ++++++++----------- 1 file changed, 14 insertions(+), 21 deletions(-) diff --git a/backend/package/yuxi/plugins/parser/unified.py b/backend/package/yuxi/plugins/parser/unified.py index 7e263256..a7b82ad6 100644 --- a/backend/package/yuxi/plugins/parser/unified.py +++ b/backend/package/yuxi/plugins/parser/unified.py @@ -127,31 +127,24 @@ def _convert_with_docling(file_path: Path, params: dict | None = None) -> str: doc = result.document if hasattr(doc, "pictures") and doc.pictures: - image_refs: list[tuple[str, bytes]] = [] - + replacements: list[str] = [] for pic in doc.pictures: - if hasattr(pic, "image") and hasattr(pic.image, "uri"): - uri = str(pic.image.uri) - if uri.startswith("data:"): + uri = str(pic.image.uri) if hasattr(pic, "image") and hasattr(pic.image, "uri") else "" + if uri.startswith("data:"): + try: image_data, mime_type = _parse_data_uri(uri) - timestamp = int(time.time() * 1000000) - filename = f"image_{timestamp}.{mime_type.split('/')[-1]}" - image_refs.append((filename, image_data)) - - image_urls: list[str] = [] - for filename, image_data in image_refs: - try: - url = _upload_image_to_minio(image_data, filename, image_bucket, image_prefix) - image_urls.append(f"![{filename}]({url})") - except Exception as e: # noqa: BLE001 - logger.error(f"上传图片失败 {filename}: {e}") - image_urls.append(f"[图片: {filename}]") + filename = f"image_{int(time.time() * 1000000)}.{mime_type.split('/')[-1]}" + url = _upload_image_to_minio(image_data, filename, image_bucket, image_prefix) + replacements.append(f"![{filename}]({url})") + except Exception as e: # noqa: BLE001 + logger.error(f"上传图片失败 {filename}: {e}") + replacements.append("") + else: + replacements.append("") markdown = doc.export_to_markdown() - - for url in image_urls: - markdown = re.sub(r"", url, markdown, count=1) - + for replacement in replacements: + markdown = re.sub(r"", replacement, markdown, count=1) return markdown return doc.export_to_markdown()