正则表达式输入指南
  • PDF

正则表达式输入指南

  • PDF

正则表达式是对表达形式多样的语句进行压缩描述的表达式。Chatbot Builder使用的是名为“nlu_script”的内部定义的正则表达式。善用正则表达式语法可以补充一部分不能通过自然语言覆盖的部分。

nlu_script基本说明

special symbols
内部定义的正则表达式nlu_script中作为语法使用的特殊符号如下。

( ) { } [ ] < > \: + * ^ ~ = . | & - / `

用文字直接表达正则表达式语法符号
如需以文字方式直接输入语法中使用的特殊符号,而不是参照正则表达式语法时,需要将特殊符号用半角双引号(" ")括起来。用半角双引号(" ")括起来的特殊符号会识别为文字而不是正则表达式语法。注意不要输错为单引号。

잘지내(니|냐)"?"
-> 잘지내?, 잘지내니?, 잘지내냐?

空格
如果Token之间没有空格,则不匹配包含空格的Token。因此,建议在韩语实例中可能出现空格的地方尽可能地加入空格。
예를 들어, “안녕하세요”라고 입력하면 챗봇은 “안녕하세요”만 인식하지만, “안녕 하세요”라고 입력하면 “안녕하세요”와 “안녕 하세요”를 모두 인식하게 됩니다.

안녕하세요
-> 안녕하세요 (O) / 안녕 하세요 (X)
안녕 하세요
-> 안녕하세요, 안녕 하세요 (O)

基本标记法

必要发言表达式[ ]

[ ]在描述必要的发言内容时使用。主要用于将必须出现的词类捆绑在一起描述的情况且可重叠使用。
以下示例为把必要发言用[ ]括起来后,在[ ]内利用表达OR含义的“|”列出相似词。用该正则表达式编写的句子可以处理9个句子。

[주문|배달|배송] [해줘|해주세요|해줘요]
-> 주문해줘, 배달해줘, 배송해줘, 주문해주세요, 배달해주세요, 배송해주세요, 주문해줘요, 배달해줘요, 배송해줘요

可选发言表达式( )

( )在描述选择性出现的发言内容时使用。相关表达式可以重叠使用。可主要用于将长问题中可能被省略的助词或修饰词捆绑在一起描述的情况。在韩语中,敬语词或词尾应用型可通过利用( )捆绑在一起描述。
예시와 같이, 안녕(하세요|하신가|하냐)로 작성할 경우, ( )는 ‘안녕’에 붙을 수 있는 어미로 선택적으로 출현 가능한 발화이며, ‘|’는 OR의 의미를 나타냅니다. 그래서 안녕(하세요|하신가|하냐)로 한 문장으로 안녕, 안녕하세요, 안녕하신가, 안녕하냐를 모두 처리할 수 있습니다.

안녕(하세요|하신가|하냐)
-> 안녕, 안녕하세요, 안녕하신가, 안녕하냐

Token之间的连接表达式::

::在描述Token之间的连接关系时使用,主要用于连接词干::词尾变形。输入此表达式时,不得包含空格。

주[라|세요]
-> 주라, 주 라, 주세요, 주 세요
주::[라|세요]
-> 주라, 주세요

[아버지|어머니]가 방에 들어가신다
-> 아버지가 방에 들어가신다(O)/ 아버지 가방에 들어가신다(O)
[아버지|어머니]::가 방에 들어가신다
-> 아버지가 방에 들어가신다(O)/ 아버지 가방에 들어가신다(X)

OR逻辑符号表达式|

|代表OR逻辑符号。主要用在描述必须出现的发言内容时的方括号[]或一起使用可选发言表达式中的括号()中。

[칼로리|열량]알려줘
-> 칼로리 알려줘, 열량 알려줘

안녕(하세요|하신가|하냐)
-> 안녕, 안녕하세요, 안녕하신가, 안녕하냐

组合已输入Token的表达式~[ ]~

需要组合[]内输入的Token时使用~[]~。~[]~内输入的Token用逗号(,)隔开。输入了过多的Token时,为了防止出现候选模式过多的情况(排列,permutation),规定~[]~中只能包含5个以下Token。
如示例所示,以~[账户,创建]~的方法编写时,均可覆盖到“账户创建方法”和“创建账户方法”两者。

~[账户,创建]~方法
-> 账户创建方法,创建账户方法

已输入的Token的重复组合表达式[ ]^

需要重复组合[]内输入的Token时使用[ ]^。但是,由于可能会出现系统负载,因此将用于此模式的正则表达式问题的数量限制为每个域不超过100个。

  • `[k]^(a,b): []内输入的Token k重复a以上、b以下次数。
  • `[k]^<a: []内输入的Token k重复次数少于a。
  • `[k]^>a: []内输入的Token k重复次数超过a。
[빨리]^(1,3)
-> 빨리, 빨리빨리, 빨리빨리빨리(O) / 빨리빨리빨리빨리(X)
[빨리]^<3
-> 빨리, 빨리빨리(O) / 빨리빨리빨리, 빨리빨리빨리빨리(X)
[빨리]^>2
-> 빨리빨리빨리, 빨리빨리빨리빨리(O) / 빨리, 빨리빨리(X)

匹配任意单词的表达式<?>

<?>是需要匹配任意单词时使用的通配符。但是,此表达式可能产生连带效果,建议一定要在必要的情况下使用。

  • <?>:匹配任意1个字的单词。
  • <?>*?:匹配任意单词。没有任何单词时也能匹配。没有字数限制。
  • <?>+?:匹配任意单词。没有任何单词时不匹配。没有字数限制。
<?>吉童
-> 洪吉童(O)/洪洪吉童(X)
[你好] <?>*?
-> 你好,哲秀(O)/你好(O)
[你好] <?>+?
-> 你好,哲秀(O)/你好(X)

指定例外Token的表达式\

“\”在指定不允许匹配的发言内容中的例外Token时使用。在进行例外处理的Token前输入“\”,即可限制用户的多种发言内容。

  • 例外表达式必须位于通配符之前。
  • 建议每个正则表达式模式使用的例外表达式不超过一个。
\[김철수|홍길동] <?>*? [슬픈|좋은|즐거운] 노래 틀어줘
-> 아이유 슬픈 노래 틀어줘 (O) / 아이유나 이지은 슬픈 노래 틀어줘 (O) / 지금 아이유 슬픈 노래 틀어줘 (O)
-> 아이유나 홍길동 슬픈 노래 틀어줘 (O) / 홍길동이나 아이유 슬픈 노래 틀어줘 (O)
-> 홍길동 슬픈 노래 틀어줘 (X) / 김철수 슬픈 노래 틀어줘 (X)

 \[<?>*? 김철수|<?>*? 홍길동] <?>*? [슬픈|좋은|즐거운] 노래 틀어줘
-> 아이유 슬픈 노래 틀어줘 (O) / 아이유나 이지은 슬픈 노래 틀어줘 (O) / 지금 아이유 슬픈 노래 틀어줘 (O)
-> 아이유나 홍길동 슬픈 노래 틀어줘 (X) / 홍길동이나 아이유 슬픈 노래 틀어줘 (X)
-> 홍길동 슬픈 노래 틀어줘 (X) / 김철수 슬픈 노래 틀어줘 (X)

**[잘못된 패턴 예시]**
[\김철수|\홍길동] <?>*? [슬픈|좋은|즐거운] 노래 틀어줘
<?>*? [\김철수|\홍길동] [슬픈|좋은|즐거운] 노래 틀어줘

通过将特定模式置换为指定文本来保存的表达式:

当需要将特定模式规范为指定文本并保存时使用。一般情况下,实体分析值以规范的值保存;同时可以变更值设置,以便仅限任务可以按原样保存用户响应值。

  • 以a:b的形式输入,如果用户输入a,则置换为b保存。
  • 规范对象只应用于位于“:”前方的一个Token。
1. a1|a2|a3:b
- 用户输入a1:匹配到该模式,并保存为a1
- 用户输入a2:匹配到该模式,并保存为a2
- 用户输入a3:匹配到该模式,从a3转换为b,并且以b保存
- 用户输入b:不会匹配到该模式

2. [a1|a2|a3]:b
- 用户输入a1:匹配到该模式,从a1转换为b,并且以b保存
- 用户输入a2:匹配到该模式,从a2转换为b,并且以b保存
- 用户输入a3:匹配到该模式,从a3转换为b,并且以b保存
- 用户输入b:不会匹配到该模式

3. a1|[a2|a3]:b
- 用户输入a1:匹配到该模式,并保存为a1
- 用户输入a2:匹配到该模式,从a2转换为b,并且以b保存
- 用户输入a3:匹配到该模式,从a3转换为b,并且以b保存
- 用户输入b:不会匹配到该模式
  • 如果英文字母位于b的位置,则规范化仅支持小写字母。
1. a:b
- 用户输入a:匹配到该模式,并保存为b

2. a:B
- 用户输入a:匹配到该模式,并保存为b。不会保存为B
参考

该表达式只可用于模式型实体。

导入域实体和系统实体的表达式@{ }, `@{ }

需要输入Chatbot Builder内添加的域实体、系统实体、正则表达式变量和系统变量时使用@{ }、@{ }。导入添加为域实体的单词时使用@{ },导入系统实体中添加的术语时使用@{ }。

域实体输入方法

@菜单:炸鸡、披萨

@{菜单}[订单|配送]
-> 订炸鸡,配送炸鸡,订披萨,配送披萨

系统实体输入方法

`@{TELNUM}

帮我`@{TELNUM}[确认|查询]
-> 查询一下010-0000-0000,查询一下010-1234-5678...

正则表达式输入方法

@var.숫자: [1|2|3|4|5|6|7|8|9]

@var.{숫자} @var.{숫자} [세|살] (입니다)
-> 11세 입니다, 23살 입니다

导入表单的表达式#{ }

导入表单时使用#{ }。创建对话时,以#{表单名称}形式输入回复便可以导入在表单菜单中添加的主观式表单或客观式表单。

#{游戏服务}

导入操作方法的表达式${ }

导入操作方法时使用${ }。以${操作方法}形式输入时可导入已添加的操作方法。

“${membership.name}客户的剩余积分为${membership.point}分。”

本文是否有帮助

What's Next