Documentation
¶
Index ¶
- type ParseFunc
- type RawDoc
- func New(content string, docType RawDocType) RawDoc
- func Open(path string) (RawDoc, error)
- func ParseCSV(r io.Reader) (RawDoc, error)
- func ParseDocx(r io.Reader) (RawDoc, error)
- func ParseEML(r io.Reader) (RawDoc, error)
- func ParseEPUB(r io.Reader) (RawDoc, error)
- func ParseHTML(r io.Reader) (RawDoc, error)
- func ParseImage(r io.Reader) (RawDoc, error)
- func ParseJSON(r io.Reader) (RawDoc, error)
- func ParseLog(r io.Reader) (RawDoc, error)
- func ParseMSG(r io.Reader) (RawDoc, error)
- func ParseMarkdown(r io.Reader) (RawDoc, error)
- func ParsePDF(r io.Reader) (RawDoc, error)
- func ParsePPTX(r io.Reader) (RawDoc, error)
- func ParseTOML(r io.Reader) (RawDoc, error)
- func ParseText(r io.Reader) (RawDoc, error)
- func ParseXML(r io.Reader) (RawDoc, error)
- func ParseXls(r io.Reader) (RawDoc, error)
- func ParseXlsx(r io.Reader) (RawDoc, error)
- func ParseYAML(r io.Reader) (RawDoc, error)
- type RawDocType
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type ParseFunc ¶
ParseFunc 文件解析器函数签名。
解析器返回 RawDoc 接口实现,由具体类型(image/doc/text/data)决定归一化策略。 fileName/size/modTime 等文件级元数据由 Open 工厂在调用 ParseFunc 之后回填。
type RawDoc ¶ added in v2.0.13
type RawDoc interface {
// ID 返回文档唯一标识(FileName 的 SHA256;New 场景基于内容生成)。
ID() string
// Type 返回归一化类型,用于路由分块器/结构化器/提取器实现。
Type() RawDocType
// FileName 返回文件名(必须是绝对路径;New 场景允许为空)。
FileName() string
// Content 返回归一化后的内容(文档为 Markdown,数据为 JSON,图片为 Base64,文本为原文)。
Content() string
// Size 返回原始文件大小(字节)。
Size() int64
// ModTime 返回原始文件修改时间。
ModTime() time.Time
// Meta 返回元数据(如 title/pages/doc_type/thumbnail_size 等可选扩展信息)。
Meta() map[string]any
}
RawDoc 归一化后的文档接口。
设计要点:
- 接口化保证文档原子性:实现可以是基于文件、内存或网络的任意来源
- 7 个方法统一文档基础信息:ID/Type/FileName/Content/Size/ModTime/Meta
- FileName() 必须返回绝对路径(相对路径视为 critical bug)
- 不支持内嵌附件
实现由 rawdoc.go 提供:imageDoc / docDoc / textDoc / dataDoc 4 种类型。 工厂方法 Open(path) / New(content, docType) 也在 rawdoc.go 中实现。
func New ¶
func New(content string, docType RawDocType) RawDoc
New 从文本内容和类型构造 RawDoc(无文件场景)。
适用场景:
- 直接索引内存中的文本(如 API 接收的字符串)
- 测试用例构造
- 动态生成内容(如 LLM 输出)
fileName 字段为空,ID() 基于内容生成。 调用方应保证 content 已归一化(New 不会再走 ParseFunc)。
func Open ¶
Open 基于文件路径打开并归一化为 RawDoc。
设计约束:
- path 必须为绝对路径,否则返回 error
- 自动根据扩展名归一化为 4 种类型之一
- 调用 ParseFunc 获取归一化内容,再回填 fileName/size/modTime
func ParseCSV ¶
ParseCSV 读取 CSV 文件并归一化为 dataDoc(内容为 JSON 字符串)。
归一化策略:
- 第一行作为表头(key),后续每行转为一个 JSON 对象
- 输出 JSON 数组字符串:[{"col1":"v1","col2":"v2"},...]
- 元数据包含 rows(含表头)和 columns
func ParseDocx ¶
ParseDocx 读取 .docx 文件并转换为 docDoc(内容为 Markdown)。 仅使用标准库(archive/zip + encoding/xml)。 元数据包含从 core.xml 提取的 title(若存在)。
func ParseEML ¶
ParseEML 解析 EML 邮件文件(RFC 822/MIME 格式),归一化为 dataDoc(内容为 JSON 字符串)。
归一化策略:
- 提取发件人、收件人、主题、日期、正文等结构化字段
- HTML 正文转为纯文本(去除标签),优先保留 text/plain
- 输出 JSON 对象字符串:{"from":"...","to":"...","subject":"...","body":"..."}
- 元数据包含 email 标记和邮件头字段
func ParseEPUB ¶
ParseEPUB 解析 EPUB 电子书,将内容提取为 docDoc(Markdown)。 EPUB 是 ZIP 容器,包含 OPF 元数据文件和 XHTML 内容文件。 使用已有的 html-to-markdown 库将 XHTML 转为 Markdown。 元数据包含 title/author/language(若存在),不返回嵌入图片。
func ParseHTML ¶
ParseHTML 将 HTML 内容转换为 docDoc(内容为 Markdown)。 使用 html-to-markdown 库处理标题、列表、链接、表格、图片、代码块等元素。 自动从 <title> 标签提取文档标题写入元数据。
func ParseImage ¶
ParseImage 读取图片文件,返回 imageDoc(内容为 Base64 编码的缩略图)。 仅加载缩略图(224x224)以节省内存,并检测图片真实 MIME 类型写入元数据。
func ParseJSON ¶ added in v2.0.13
ParseJSON 读取 JSON 文件并归一化为 dataDoc(内容为 JSON 字符串)。
归一化策略:
- 校验输入是合法 JSON 后原样返回(紧凑格式化)
- 输出 JSON 字符串(紧凑格式,无缩进)
- 元数据包含 type 标记
func ParseLog ¶ added in v2.0.13
ParseLog 读取日志文件并归一化为 dataDoc(内容为 JSON 字符串)。
归一化策略:
- 按行切分日志,每行转为一个 JSON 对象 {"line":N,"text":"..."}
- 输出 JSON 数组字符串:[{"line":1,"text":"..."},{"line":2,"text":"..."}]
- 空行会被跳过
- 元数据包含 lines(总行数,含空行)
func ParseMSG ¶
ParseMSG 解析 Outlook MSG 文件(OLE2 复合文档格式)。 提取发件人、主题、日期、收件人等元信息,将正文转为 dataDoc(JSON 字符串)。
func ParseMarkdown ¶ added in v2.0.13
ParseMarkdown 解析 Markdown 文件,返回 RawDocDoc 类型。 Markdown 文件内容已经是 Markdown 格式,无需转换。
func ParsePDF ¶
ParsePDF 解析 PDF 文件并转换为 docDoc(内容为 Markdown)。 元数据包含 title/author/pages(若存在),不提取嵌入图片附件。
func ParsePPTX ¶
ParsePPTX 读取 .pptx 文件并转换为 docDoc(内容为 Markdown)。 仅使用标准库(archive/zip + encoding/xml)。 元数据包含 title 和 slide_count。
func ParseTOML ¶ added in v2.0.13
ParseTOML 读取 TOML 文件并归一化为 dataDoc(内容为 JSON 字符串)。
归一化策略:
- 将 TOML 解析为通用数据结构,再序列化为紧凑 JSON 字符串
- 输出 JSON 字符串(紧凑格式,无缩进)
- 元数据包含 source_format 标记
func ParseXML ¶ added in v2.0.13
ParseXML 读取 XML 文件并归一化为 dataDoc(内容为 JSON 字符串)。
归一化策略:
- 将 XML 解析为通用数据结构,再序列化为紧凑 JSON 字符串
- 属性使用 "@name" 前缀;文本节点使用 "#text" 字段
- 重复子元素自动合并为数组
- 输出 JSON 字符串(紧凑格式,无缩进)
- 元数据包含 source_format 标记
func ParseXls ¶ added in v2.0.13
ParseXls 读取 .xls(旧版 BIFF 格式)文件并归一化为 dataDoc(内容为 JSON 字符串)。
.xls 是 Excel 97-2003 的二进制格式,与 .xlsx(OOXML / ZIP)不同; 解析需要 ole2 + xls 专用库(github.com/extrame/xls)。
归一化策略:
- 每个 sheet 转为一个对象,包含 name 和 rows
- 每个 sheet 的第一行作为表头,后续每行转为对象
- 输出 JSON 数组字符串:[{"sheet":"Sheet1","rows":[...]},...]
- 元数据包含 sheet_count
容错处理:使用 defer recover 兜底单个 sheet 的解析异常, 避免某个 sheet 的格式异常导致整个文件解析失败。
type RawDocType ¶ added in v2.0.13
type RawDocType string
RawDocType 文档归一化后的 4 种类型。
按文件内容本质归一化为 4 类,消除 MIME/扩展名歧义。 分块器、结构化器、提取器均依据 RawDocType 路由到对应实现。
const ( // RawDocImage 图片类型:jpg/png/gif/webp/bmp/tiff 等,缩限最小边长后转 Base64。 RawDocImage RawDocType = "image" // RawDocDoc 文档类型:pdf/docx/html/epub/pptx 等,统一为 Markdown。 RawDocDoc RawDocType = "document" // RawDocText 纯文本类型:txt/md/代码等,内容不变。 RawDocText RawDocType = "text" // RawDocData 数据类型:csv/json/xml/yaml/toml/excel/eml/msg/log 等,统一为 JSON。 RawDocData RawDocType = "data" )