在将文件解析并转换为 Markdown 之前,我们会根据您尝试转换的文件类型执行一些清理任务。
检测到 HTML 文件时,在转换前会对 HTML 内容执行一系列操作:
- 忽略某些元素,包括
script和style标签。 - 提取 meta 标签。包括
title、description、og:title、og:description和og:image。 - 如果存在,提取 JSON-LD ↗ 内容。这将附加到转换后的 markdown 末尾。
- 如果存在,从
<base>元素1 提取用于解析相对链接的 base URL,按照规范(即仅计算 base URL 的第一个实例)。 - 如果
cssSelector选项:- 存在,则仅保留匹配该选择器的元素以供进一步处理;
- 缺失,则从文本中移除
<header>、<footer>和<head>等元素。
- 如果之前获得了 base URL,则剩余 HTML 中的相对链接会解析为完整 URL
1 主机也可以按请求设置,使用 HTML 转换选项。请参阅转换选项了解更多详情。
图像需要更多工作来准备转换。
对于动画 GIF 文件,仅提取并分析第一帧。其余帧会被丢弃。
首先,我们检测图像类型。如果是 SVG(可缩放矢量图形)文件,我们需要将其转换为光栅格式,以便使用必要的 Workers AI 模型不会失败。在这种情况下,SVG 会在内部转换为 PNG。
之后:
- 我们尝试确定图像尺寸。如果成功,我们判断图像是否被认为「过大」。如果宽度大于 1280px 或高度大于 720px,则图像「过大」。
- 如果图像过大,我们尝试调整大小以符合这些尺寸。如果调整失败,我们直接使用原始图像数据
- 图像被发送到对象检测模型。具体来说,我们使用 Workers AI 的
@cf/facebook/detr-resnet-50。 - 如果上一步检测到任何对象,它们会被附加到 prompt 中,用于指导图像转文本模型如何描述图像。
- 如果在请求的转换选项中指定了首选转换语言,之前的 prompt 会 enriched 一条指令,让模型以所需语言输出内容。请参阅转换选项了解更多详情。
- 最终 prompt 与图像数据一起发送到 Workers AI 的
@cf/google/gemma-4-26b-a4b-it模型。
- 提取元数据。可以从最终结果中移除。请参阅转换选项了解更多详情。
- 按顺序解析每一页。
- 我们尝试从 PDF 文件获取
StructTree对象。此数据结构是构成 PDF 内容的标记元素树,由 ISO 14289 (PDF/UA) ↗ 指定。 - 如果未获取到,我们_按原样_提取页面文本并返回。
- 如果成功获取
StructTree,我们遍历其节点以构建内容的语义 Markdown 表示。