解析器
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: fooarray: - 1 - 2
要解析,请使用parsers.YAML
。它支持文本内容或文件作为输入。
const res = parsers.YAML("...")
TOML
parsers.TOML
函数用于解析 TOML格式。
相比JSON,TOML对LLM分词器更为友好,常用于配置文件中。
# This is a TOML documenttitle = "TOML Example"[object]string = "foo"number = 1
要解析,请使用parsers.TOML
。它支持文本内容或文件作为输入。
const res = parsers.TOML("...")
JSONL
JSONL 是一种将JSON对象按行存储的格式。每一行都是一个有效的JSON(5)对象(我们使用JSON5解析器以提高容错性)。
{"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.frontmatter
或MD将元数据解析为一个对象
const meta = parsers.frontmatter(file)
CSV
parsers.CSV
函数用于解析 CSV格式。如果成功,该函数会返回一个对象数组,其中每个对象代表CSV文件中的一行。
const res = parsers.CSV("...")
解析器会自动检测是否存在标题行;如果没有标题行,您应该在选项中传递一个标题名称数组。
const res = parsers.CSV("...", { delimiter: "\t", headers: ["name", "age"] })
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 treeconst { captures } = await parsers.code(file)// with a queryconst { 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.
```jsconst res = await parsers.math("1 + 1")
.env
parsers.dotEnv
解析 .env 文件,通常用于配置文件。这种格式类似于 key=value
格式。
KEY=VALUE
围栏
解析LLM的输出,类似于genaiscript def()函数的输出。 预期文本看起来像这样:
Foo bar:```jsvar 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 JSONgenaiscript parse data mydata.csv