【问题标题】:Problem with pattern regex in Watson's entityWatson 实体中的模式正则表达式问题
【发布时间】:2020-05-06 16:10:18
【问题描述】:

您好。

我需要 Watson 识别代表客户已下订单的公司分支机构的实体。我们目前在 customer_branch 实体上使用以下模式:

\d{1,5}-[xX\d]{1}

对话节点询问客户的分公司,并带有以下消息:“请输入您下订单的分公司编号,格式为 XXXXX-X:”,期望类似:

12345-6

虽然我们的大多数客户都正确输入了分行编号,但也有一些客户做到了:

分支 12345-6

编号 12345-6

nr。 12345-6

号码 12345-6

这导致 Watson 无法识别实体 customer_branch,让他们感到沮丧。为了解决这个问题,我们考虑在模式中使用以下正则表达式:

(?:(br[ae]{1}nch|n[umbe]{0,4}r))?(?:[\s.]*)?(\d{1,5}-[xX\d]{1})

我们认为的逻辑如下:

  • 一个正则表达式组,用于忽略“branch”、“number”、“nr”等任何单词。和 等等,可以或不可以存在;

  • 另一个忽略句点和 任何数量的空间,可以存在也可以不存在;

  • 最后 一个来捕获分支号。

但是,在我们进行了一些测试之后,Watson 仍然无法正确识别实体,如下例所示:

"customer_branch": "nr 12345-6"

我们假设问题出在正则表达式中,但我们无法识别它;因为它在 regex101.com 上正常工作。 Watson 是否正确识别排除正则表达式组,例如 (?: Something_here)?我们感谢任何提示。谢谢大家。

【问题讨论】:

  • 如果您使用英语,则可以转到带注释的实体。正则表达式引擎松散地基于 Java 引擎:cloud.ibm.com/docs/services/…
  • 亲爱的 data_henrik,您好。我的母语是葡萄牙语-BR。谢谢。

标签: regex ibm-cloud ibm-watson regex-group watson-assistant


【解决方案1】:

另一种解决方案是捕获整个用户输入,然后使用string functions 提取数字。您可以先搜索(包含)分支,然后使用 ternary operator 根据结果进行切换。

恕我直言,基于模式的实体适用于一些精确的输入,但如果您允许太多变化,则很难用单一模式捕获它。

您是否尝试过为单个实体创建多个模式?每个值都可以分配有自己的模式。这样您就可以将 customer_branch 作为实体,将 number_onlybranch_number 作为值。

【讨论】:

  • data_henrik,感谢您的回答。我们会尝试的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-23
  • 2013-12-01
  • 1970-01-01
  • 2015-07-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多