跳至内容

解析器

parsers 对象提供了针对常见数据格式的各种解析器。

JSON5

parsers.json5 函数用于解析 JSON5 格式。 JSON5 是对流行的 JSON 文件格式的扩展,旨在使其更易于手动编写和维护(例如用于配置文件)。

一般来说,将JSON文件作为JSON5解析不会造成损害,但它可能对语法错误更加宽容。除了JSON5之外,如果初始解析失败,还会应用JSON修复

  • JSON5 示例
{
// comments
unquoted: "and you can quote me on that",
singleQuotes: 'I can use "double quotes" here',
lineBreaks: "Look, Mom! \
No \\n's!",
hexadecimal: 0xdecaf,
leadingDecimalPoint: 0.8675309,
andTrailing: 8675309,
positiveSign: +1,
trailingComma: "in objects",
andIn: ["arrays"],
backwardsCompatible: "with JSON",
}

要解析,请使用parsers.JSON5。它支持文本内容或文件作为输入。

const res = parsers.JSON5("...")

YAML

parsers.YAML 函数用于解析 YAML格式。 YAML比JSON对LLM分词器更友好,常用于配置文件中。

fields:
number: 1
boolean: true
string: foo
array:
- 1
- 2

要解析,请使用parsers.YAML。它支持文本内容或文件作为输入。

const res = parsers.YAML("...")

TOML

parsers.TOML 函数用于解析 TOML格式。 相比JSON,TOML对LLM分词器更为友好,常用于配置文件中。

# This is a TOML document
title = "TOML Example"
[object]
string = "foo"
number = 1

要解析,请使用parsers.TOML。它支持文本内容或文件作为输入。

const res = parsers.TOML("...")

JSONL

JSONL 是一种将JSON对象按行存储的格式。每一行都是一个有效的JSON(5)对象(我们使用JSON5解析器以提高容错性)。

data.jsonl
{"name": "Alice"}
{"name": "Bob"}

你可以使用 parsers.JSONL 将 JSONL 文件解析为对象数组 (any[])。

const res = parsers.JSONL(file)

XML

parsers.XML 函数用于解析 XML格式

const res = parsers.XML('<xml attr="1"><child /></xml>')

属性名称前面会加上“@_”。

{
"xml": {
"@_attr": "1",
"child": {}
}
}

前言部分

Front matter 是文件头部的元数据部分,通常以YAML格式编写。

---
title: "Hello, World!"
---
...

你可以使用parsers.frontmatterMD将元数据解析为一个对象

const meta = parsers.frontmatter(file)

CSV

parsers.CSV 函数用于解析 CSV格式。如果成功,该函数会返回一个对象数组,其中每个对象代表CSV文件中的一行。

const res = parsers.CSV("...")

解析器会自动检测是否存在标题行;如果没有标题行,您应该在选项中传递一个标题名称数组。

const res = parsers.CSV("...", { delimiter: "\t", headers: ["name", "age"] })

PDF

parsers.PDF 函数用于读取PDF文件并尝试将其清晰地转换为文本格式。更多信息请参阅 /genaiscript/reference/scripts/pdf

DOCX

parsers.DOCX 函数将 .docx 文件读取为原始文本。

INI

parsers.INI 解析 .ini 文件,通常用于配置文件。这种格式类似于 key=value 格式。

KEY=VALUE

XLSX

parsers.XLSX 函数读取 .xlsx 文件并返回一个对象数组,其中每个对象代表电子表格中的一行。 第一行用作标题行。 该函数使用 xlsx 库。

const sheets = await parsers.XLSX("...filename.xlsx")
const { rows } = sheets[0]

默认情况下,它会读取第一个工作表的第一行作为标题。您可以通过传递工作表名称和/或处理范围作为选项来调整。

const res = await parsers.XLSX("...filename.xlsx", {
sheet: "Sheet2",
range: "A1:C10",
})

VTT, SRT

parsers.transcription 解析VTT或SRT转录文件为一系列片段。

const segments = await parsers.transcription("WEBVTT...")

解压缩

解压zip文件的内容并返回一个文件数组。

const files = await parsers.unzip(env.files[0])

HTML转文本

parsers.HTMLToText 使用 html-to-text 将HTML转换为纯文本。

const text = parsers.HTMLToText(html)

代码(JavaScript, Python, C, C++, Java, ...)

parsers.code 函数使用 Tree Sitter 库来解析源代码。它会返回一个可用于分析代码的AST(抽象语法树)。

// the whole tree
const { captures } = await parsers.code(file)
// with a query
const { captures } = await parsers.code(file, "(interface_declaration) @i")

tags查询是大多数tree-sitter库中提供的tree-sitter tags查询的内置别名。

const { captures } = await parsers.code(file, 'tags')
```
## Math expression
The `parsers.math` function uses [mathjs](https://mathjs.org/) to parse a math expression.
```js
const res = await parsers.math("1 + 1")

.env

parsers.dotEnv 解析 .env 文件,通常用于配置文件。这种格式类似于 key=value 格式。

KEY=VALUE

围栏

解析LLM的输出,类似于genaiscript def()函数的输出。 预期文本看起来像这样:

Foo bar:
```js
var x = 1
...
```
Baz qux:

同样支持。 ...

返回解析后的代码段列表。

const fences = parsers.fences("...")

annotations

将各种格式的错误和警告注释解析为对象列表。

const annotations = parsers.annotations("...")

令牌

parsers.tokens 用于估算当前模型中字符串的token数量。这对于估算可以从字符串生成的提示数量很有用。

const count = parsers.tokens("...")

validateJSON

parsers.validateJSON 函数根据模式验证 JSON 字符串。

const validation = parsers.validateJSON(schema, json)

mustache

在字符串和参数中运行mustache模板引擎。

const rendered = parsers.mustache("Today is {{date}}.", { date: new Date() })

jinja

运行jinja模板(使用@huggingface/jinja)。

const rendered = parsers.jinja("Today is {{date}}.", { date: new Date() })

tidyData

一组数据操作选项,在内部与defData一起使用。

const d = parsers.tidyData(rows, { sliceSample: 100, sort: "name" })

GROQ

对JSON对象应用GROQ查询。

const d = parsers.GROQ(
`*[completed == true && userId == 2]{
title
}`,
data
)

哈希

用于将对象、数组哈希化为适合哈希用途的字符串的工具。

const h = parsers.hash({ obj, other }, { length: 12 })

默认使用sha-1,但也可以使用sha-256。哈希打包逻辑可能会在genaiscript的不同版本之间发生变化。

unthink

某些模型会在标签内返回它们的内部推理过程。

<think>This is my reasoning...</think>
Yes

unthink函数用于移除标签。

const text = parsers.unthink(res.text)

命令行

使用CLI中的parse命令来尝试各种解析器。

终端窗口
# convert any known data format to JSON
genaiscript parse data mydata.csv