解析器
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=VALUEXLSX
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>Yesunthink函数用于移除标签。
const text = parsers.unthink(res.text)命令行
使用CLI中的parse命令来尝试各种解析器。
# convert any known data format to JSONgenaiscript parse data mydata.csv