本文档适用于 IBM Watson® Knowledge Studio 上的 IBM Cloud®。 要查看 Knowledge Studio Marketplace 上 IBM 先前版本的文档,请单击此链接。
规则
创建可识别文档中模式的基于规则的模型。 使用规则可捕获文档中出现的模式,并传达有关底层实体类型的信息。
类概述
构造规则时,使用类来表示信息类型。 这些类与实体类型类似。 那么,在定义规则时为什么不直接使用实体类型呢? 原因是在构建规则时,可以定义仅用于构建其他更复杂类的中间类。 这些中间类仅作为一种工具。 它们本身并没有什么用。 中间类要与其他中间类配合使用,以定义更有用、更完整的类。 中间类是必需的,但并不作为类型系统的一部分公开。 要使基于规则的模型能够执行有用的操作(例如,对具有实体提及项的文档进行预注释),必须将规则创建期间使用的复杂类映射到类型系统中的等效实体类型。
例如,您需要一个可以识别人员姓名的模型。 为了训练机器学习模型来识别人员的姓名,您将使用 PERSON
实体类型对注释集内文档中以各种格式编写的许多不同姓名进行注释,然后训练模型来识别人员姓名。 要创建基于规则的模型来识别人员姓名,需要定义规则来描述用于编写人员姓名的文本模式。 因此,您可能会创建 FirstName
类和 LastName
类,并使用这些中间类来定义 FullName
类。 您可以定义用于确定 FullName
类相对于公共前缀 (例如 Dr.
) 和公共后缀 (例如 Jr.
) 的位置的条件。 使用基于规则的模型时, FullName
类将映射到 PERSON
实体类型。
避免将中间类映射到类型系统中的实体的另一个原因是,如果使用基于规则的模型对文档进行预注释,然后将这些文档添加到参考标准中以用于训练机器学习模型,您并不希望在定义规则时会生成重叠实体提及项。 例如,如果要将中间类 FirstName
和复杂类 FullName
映射到 PERSON
实体,那么出现 John Doe, Jr.
时会导致出现重叠提及项。
规则编辑器工具
规则编辑器提供了一些可帮助您定义规则的工具。
-
字典
添加字典并为其分配类名。 如果找到的任何词与字典中的条目相匹配,会自动使用分配的类对这些词进行注释。
-
正则表达式
正则表达式 (regex) 是用于定义搜索模式的字符序列。 基本示例为
[A-Z][a-z]*
,用于查找首字母大写的词。[A-Z]
与任何大写字母(A 到 Z)匹配、[a-z]*
与任何小写字母(a 到 z)匹配零次或更多次。 星号 (*) 是用于定义重复设置(零次或更多次)的字符。请考虑使用基于 Web 的免费正则表达式实用程序,帮助您确定用于捕获要查找的模式的正确表达式。
例如,文档可能具有类似于以下短语的多个引用:
35-year-old driver 16-year-old learner
语法
n-year-old x
是通常用来表示人员的模式。 您可以定义正则表达式规则来查找与n-year-old x
模式匹配的短语,然后将其注释为PERSON
实体提及项。
正则表达式最佳实践
虽然包含在规则编辑器中的正则表达式工具可识别遵循 java.util.regex.Pattern
语法的表达式,但并不支持整个语法。 使用正则表达式工具时,请考虑以下最佳实践:
- 规则仅在令牌边界进行匹配。 不能编写与令牌子序列匹配的规则。 有关更多信息,请参阅记号化器。
- 使正则表达式保持简单明了。
- 考虑使用字典,而不是正则表达式。 虽然您可能会认为一个巧妙的规则可以捕获多个表达式,但一般情况下,字典匹配的速度比规则匹配更快。 而且,字典更容易进行维护。
- 不要完全依赖正则表达式来匹配记号,最好是使用字典、正则表达式和规则的组合。 例如,假设场景是匹配一个句子(例如
My mobile is 123-456
)中的电话号码。 您可以编写规则来使用正则表达式匹配该句子。 但是在这种情况下,建议的方法是添加字典以查找诸如 mobile 和 _phone_之类的词,编写一个简单的正则表达式以捕获可能的电话号码序列,然后创建一个规则以扫描模式序列,如dictionary term
+text
+regex
中所示 示例语句My mobile is 123-456
。 - 避免不必要使用 lookahead 和 lookbehind (
(?=ABC)
)。 在许多情况下,您可以通过使用正则表达式和规则的组合来实现相同的结果。