跳到主要内容

解析器

Parser 组件用于从结构化数据(DataFrameData)中提取文本。 你既可以基于模板生成文本,也可以直接把输入整体字符串化。 最终输出为一个包含解析结果的 Message

它是流程中非常实用的数据提取与重组组件。 以下场景都可以参考它的用法:

A flow that uses a Parser component to extract text from a Structured Output component.

解析模式

Parser 组件有两种模式:ParserStringify

Parser 模式中,你可以定义一个文本模板,模板里既可以包含固定字符串,也可以包含用于提取键值的变量。

你可以在模板任意位置使用大括号定义变量。 变量名必须与输入 DataFrameData 中的键一致,例如列名。 例如,{name} 会提取 name 这个键的值。 有关 DataFrameData 的内容结构,请参阅SkillFlaw 数据类型

如果你的模板同时包含字面文本和变量,你可以使用双层花括号来转义字面花括号,从而避免该文本被解释为变量。 例如:This is a template with {{literal text in curly braces}} and a {variable}

流程运行时,Parser 会遍历输入数据,并为每条解析结果生成一个 Message。 例如,对 DataFrame 进行解析时,会按行生成多个 Message,每条消息都填充该行对应字段的值。

员工摘要模板

下面这个模板会把员工数据转换成自然语言摘要,描述其入职时间与当前岗位:


_10
{employee_first_name} {employee_last_name} was hired on {start_date}.
_10
Their current position is {job_title} ({grade}).

生成的 Message 会用实际提取值替换变量,例如:


_10
Renlo Kai was hired on 11-July-2017.
_10
Their current position is Software Engineer (Principal).

员工档案模板

下面这个模板使用 Markdown 和员工数据生成一份员工档案:


_10
# Employee Profile
_10
## Personal Information
_10
- **Name:** {name}
_10
- **ID:** {id}
_10
- **Email:** {email}

流程运行时,Parser 会遍历 DataFrame 的每一行,把模板变量替换为对应字段值,并把每一行的结果输出为一个 Message

以下是 Parser 模式下可用的参数。

有些参数在可视化编辑器中默认处于隐藏状态。 你可以通过组件标题栏菜单中的 控件 来修改全部参数。

NameDisplay NameInfo
input_dataData or DataFrame输入参数。要解析的 DataDataFrame
patternTemplate输入参数。解析模板,支持纯文本和键变量({KEY_NAME})。详见上方示例。
sepSeparator输入参数。定义多行/多条输出间的分隔符。默认值为 \n(换行)。
clean_dataClean Data输入参数。是否清除 DataFrameData 中每个单元格/键里的空行和空值。默认启用(true)。

测试与排查解析结果

如需测试 Parser,点击 Run component,再点击 Inspect output,查看解析后的 Message。 如果你希望在 Playground 中直接看到结果,也可以把它连接到 Chat Output

如果 Parser 输出的 Message 中存在空值或异常值,通常意味着:输入与解析模式之间的映射有误、源数据本身有缺失,或输入内容并不适合直接抽取为纯文本。

例如,假设你使用如下模板解析某个 DataFrame


_10
{employee_first_name} {employee_last_name} is a {job_title} ({grade}).

如果某一行中 employee_first_name 为空、gradenull,则可能生成类似这样的 Message


_10
Smith is a Software Engineer (null).

要排查这类问题,可以从以下几方面入手:

  • 确认模板中的变量名与传入 ParserDataDataFrame 键名一致。 如果你想直接查看传入 Parser 的数据,请在上游组件上点击 Inspect output

  • 检查源数据本身是否存在缺失值或错误值。 你可以通过多种方式处理这些问题: