跳转到主要内容
对于每个搜索元素,Extraction Rules 活动中的代码包含一系列按顺序执行的规则。每条规则由两部分组成,并以分号结束:
左侧部分
=>
右侧部分;
左侧部分用于检查条件或查找满足该条件的值。右侧部分用于创建新的搜索元素实例,并将这些值赋给这些实例。

示例

下面这个简单规则会查找名称为 kw_Contract 且包含关键字 “Contract” 的搜索元素:
[ t: "Contract" ] // looking for a word "Contract" and assigning the token to a new variable called t
=>
kw_Contract( t ); // 每次出现单词 "Contract" 时创建 kw_Contract 搜索元素的新实例

左侧部分结构

左侧部分最多包含三个组成部分:
Existence_condition
Token_template
Additional_check

存在条件(可选)

查找具有指定属性的对象。我们建议在对象存在时为其指定一个名称,以便在同一规则中再次引用该对象。条件还可以用于指定对象不存在的情况。 示例 如果只需要找到一个 SellerName 搜索元素的实例,请在规则开头声明尚未找到任何实例:
~SellerName // 检查 SellerName 搜索元素尚未找到
注意。 使用否定条件时,不能指定变量名,因为否定条件表示不存在相应对象。
此条件用于检查是否存在地址命名实体:
a: NERAddress // 检查地址命名实体是否存在,并将其赋值给名为 a 的新变量
有关本部分中使用语法的详细信息,请参阅存在条件

标记模板(必需)

由一系列标记组成。标记是自然语言中的一个单词或一个标点符号。标记通常不包含空格,只有极少数情况除外,例如空格位于作为单个词使用的固定搭配中:such asa lot 示例 例如,下面的标记模板由一个匹配关键词“Grantor”的标记、一个为冒号的标记,以及一个可重复的、带有 Person 命名实体的标记组成(之所以设置为可重复,是因为人名可能由多个单词构成,每个单词都是单独的标记):
["Grantor"] [":"] [p: @NERPerson]+
该模板会匹配类似 “Grantor: Anne Smith” 的文本字符串,并将值 “Anne Smith” 赋给变量 p 有关本部分所使用语法的详细信息,请参阅 Token template

附加检查(可选)

对规则中已引用的对象进行更多条件检查。 示例 例如,假设您正在查找合同的当事方,并已将字段分成两个单独的组实例,每个当事方一个组。在找到一个组织名称和一个地址之后,您可以检查这些搜索元素是否具有相同的父对象。如果是,则意味着该地址属于该组织。
n: Party.OrgName // the organization name search element was found earlier
[ a: @Party.Address ] // finds the token on which the address search element was found
// 检查组织名称和地址搜索元素
// 是否为同一 Party 组元素实例的子元素
parent( n ) == parent( obj( a ) )
有关本部分所用语法的详细说明,请参见 Additional check

右侧部分结构

右侧部分由一个或多个逗号分隔的片段组成,这些片段会创建组和搜索元素的新实例,并为搜索元素赋值:
Create_group_A,
Create_element_B_and_assign_value
通常,规则的左侧部分会匹配到一个标记、一段标记序列或一个对象,并将其赋给一个变量。然后,右侧部分可以使用该变量,将其值写入某个搜索元素。例如,下面的代码会将 t 的值写入 Element1 搜索元素:

示例

[t: "Lease"] ["Agreement"]
=>
Root.kw_AgreementType( t );
有关此部分所用语法的详细信息,请参阅右侧部分
注意: 代码只会创建 Extraction Rules 活动中已存在的搜索元素和分组搜索元素的实例,无法通过代码创建新的搜索元素。若要在结构中创建其他搜索元素,请在 Activity Editor 中使用 Search Elements 选项卡

引用搜索元素

要在代码中访问搜索元素,您需要使用能够明确标识该元素的名称。如果某个元素具有唯一名称,您可以直接通过其名称引用它。如果存在多个同名元素,则需要指定足够具体的路径来唯一标识该元素。

示例

考虑以下搜索元素的嵌套结构:
  • Property
    • Type
    • Address
  • Buyer
    • FullName
    • Address
要在代码中引用买方的姓名,可以直接使用 “FullName”,因为具有该名称的元素是唯一的。“Buyer.FullName” 或 “Root.Buyer.FullName” 也同样可行。 要引用买方的地址,则必须至少添加父级组的名称,因为有两个名为 “Address” 的元素。在这里,你应当使用 “Buyer.Address” 或 “Root.Buyer.Address”。

针对特定语言的规则

您可以指定应执行该规则的文档语言。这样该规则将不会应用于其他语言。请在规则前加上井号(#)和两位字母的语言代码(ISO-639-1 标准)。

支持的语言代码

语言代码
英语en
德语de
法语fr
西班牙语es
意大利语it
葡萄牙语(标准)pt
日语ja
俄语ru
例如,如果处理英文和西班牙文文档,则可以使用语言特定的关键字:

示例

#en
[ t: "Grantor" ] // 英文文档的关键字
=>
kw_landlord( t );

#es
[ t: "Arrendador" ] // 西班牙文文档的关键字
=>
kw_landlord( t );