document

package
v2.0.13 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jul 26, 2026 License: MIT Imports: 35 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type ParseFunc

type ParseFunc func(r io.Reader) (RawDoc, error)

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

func Open(path string) (RawDoc, error)

Open 基于文件路径打开并归一化为 RawDoc。

设计约束:

  • path 必须为绝对路径,否则返回 error
  • 自动根据扩展名归一化为 4 种类型之一
  • 调用 ParseFunc 获取归一化内容,再回填 fileName/size/modTime

func ParseCSV

func ParseCSV(r io.Reader) (RawDoc, error)

ParseCSV 读取 CSV 文件并归一化为 dataDoc(内容为 JSON 字符串)。

归一化策略:

  • 第一行作为表头(key),后续每行转为一个 JSON 对象
  • 输出 JSON 数组字符串:[{"col1":"v1","col2":"v2"},...]
  • 元数据包含 rows(含表头)和 columns

func ParseDocx

func ParseDocx(r io.Reader) (RawDoc, error)

ParseDocx 读取 .docx 文件并转换为 docDoc(内容为 Markdown)。 仅使用标准库(archive/zip + encoding/xml)。 元数据包含从 core.xml 提取的 title(若存在)。

func ParseEML

func ParseEML(r io.Reader) (RawDoc, error)

ParseEML 解析 EML 邮件文件(RFC 822/MIME 格式),归一化为 dataDoc(内容为 JSON 字符串)。

归一化策略:

  • 提取发件人、收件人、主题、日期、正文等结构化字段
  • HTML 正文转为纯文本(去除标签),优先保留 text/plain
  • 输出 JSON 对象字符串:{"from":"...","to":"...","subject":"...","body":"..."}
  • 元数据包含 email 标记和邮件头字段

func ParseEPUB

func ParseEPUB(r io.Reader) (RawDoc, error)

ParseEPUB 解析 EPUB 电子书,将内容提取为 docDoc(Markdown)。 EPUB 是 ZIP 容器,包含 OPF 元数据文件和 XHTML 内容文件。 使用已有的 html-to-markdown 库将 XHTML 转为 Markdown。 元数据包含 title/author/language(若存在),不返回嵌入图片。

func ParseHTML

func ParseHTML(r io.Reader) (RawDoc, error)

ParseHTML 将 HTML 内容转换为 docDoc(内容为 Markdown)。 使用 html-to-markdown 库处理标题、列表、链接、表格、图片、代码块等元素。 自动从 <title> 标签提取文档标题写入元数据。

func ParseImage

func ParseImage(r io.Reader) (RawDoc, error)

ParseImage 读取图片文件,返回 imageDoc(内容为 Base64 编码的缩略图)。 仅加载缩略图(224x224)以节省内存,并检测图片真实 MIME 类型写入元数据。

func ParseJSON added in v2.0.13

func ParseJSON(r io.Reader) (RawDoc, error)

ParseJSON 读取 JSON 文件并归一化为 dataDoc(内容为 JSON 字符串)。

归一化策略:

  • 校验输入是合法 JSON 后原样返回(紧凑格式化)
  • 输出 JSON 字符串(紧凑格式,无缩进)
  • 元数据包含 type 标记

func ParseLog added in v2.0.13

func ParseLog(r io.Reader) (RawDoc, error)

ParseLog 读取日志文件并归一化为 dataDoc(内容为 JSON 字符串)。

归一化策略:

  • 按行切分日志,每行转为一个 JSON 对象 {"line":N,"text":"..."}
  • 输出 JSON 数组字符串:[{"line":1,"text":"..."},{"line":2,"text":"..."}]
  • 空行会被跳过
  • 元数据包含 lines(总行数,含空行)

func ParseMSG

func ParseMSG(r io.Reader) (RawDoc, error)

ParseMSG 解析 Outlook MSG 文件(OLE2 复合文档格式)。 提取发件人、主题、日期、收件人等元信息,将正文转为 dataDoc(JSON 字符串)。

func ParseMarkdown added in v2.0.13

func ParseMarkdown(r io.Reader) (RawDoc, error)

ParseMarkdown 解析 Markdown 文件,返回 RawDocDoc 类型。 Markdown 文件内容已经是 Markdown 格式,无需转换。

func ParsePDF

func ParsePDF(r io.Reader) (RawDoc, error)

ParsePDF 解析 PDF 文件并转换为 docDoc(内容为 Markdown)。 元数据包含 title/author/pages(若存在),不提取嵌入图片附件。

func ParsePPTX

func ParsePPTX(r io.Reader) (RawDoc, error)

ParsePPTX 读取 .pptx 文件并转换为 docDoc(内容为 Markdown)。 仅使用标准库(archive/zip + encoding/xml)。 元数据包含 title 和 slide_count。

func ParseTOML added in v2.0.13

func ParseTOML(r io.Reader) (RawDoc, error)

ParseTOML 读取 TOML 文件并归一化为 dataDoc(内容为 JSON 字符串)。

归一化策略:

  • 将 TOML 解析为通用数据结构,再序列化为紧凑 JSON 字符串
  • 输出 JSON 字符串(紧凑格式,无缩进)
  • 元数据包含 source_format 标记

func ParseText

func ParseText(r io.Reader) (RawDoc, error)

ParseText 读取纯文本内容并原样返回为 textDoc。 元数据为空 map。

func ParseXML added in v2.0.13

func ParseXML(r io.Reader) (RawDoc, error)

ParseXML 读取 XML 文件并归一化为 dataDoc(内容为 JSON 字符串)。

归一化策略:

  • 将 XML 解析为通用数据结构,再序列化为紧凑 JSON 字符串
  • 属性使用 "@name" 前缀;文本节点使用 "#text" 字段
  • 重复子元素自动合并为数组
  • 输出 JSON 字符串(紧凑格式,无缩进)
  • 元数据包含 source_format 标记

func ParseXls added in v2.0.13

func ParseXls(r io.Reader) (RawDoc, error)

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 的格式异常导致整个文件解析失败。

func ParseXlsx

func ParseXlsx(r io.Reader) (RawDoc, error)

ParseXlsx 读取 .xlsx 文件并归一化为 dataDoc(内容为 JSON 字符串)。

归一化策略:

  • 每个 sheet 转为一个对象,包含 name 和 rows
  • 每个 sheet 的第一行作为表头,后续每行转为对象
  • 输出 JSON 数组字符串:[{"sheet":"Sheet1","rows":[...]},...]
  • 元数据包含 sheet_count

func ParseYAML added in v2.0.13

func ParseYAML(r io.Reader) (RawDoc, error)

ParseYAML 读取 YAML 文件并归一化为 dataDoc(内容为 JSON 字符串)。

归一化策略:

  • 将 YAML 解析为通用数据结构,再序列化为紧凑 JSON 字符串
  • 输出 JSON 字符串(紧凑格式,无缩进)
  • 元数据包含 type 标记

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"
)

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL