【问题标题】:In Microsoft Luis, how do I break up one word into multiple entities?在 Microsoft Luis 中,如何将一个单词分解为多个实体?
【发布时间】:2018-09-24 02:07:38
【问题描述】:

例如,我有如下课程的用户话语:

  CS101
  PHY101
  CHE101

如何从中获取 2 个实体,例如:课程名称、课程编号?

所以在我的例子中:

Utterance:  CS101
Entities:
  Course Name:  CS
  Course Number: 101

【问题讨论】:

  • 您可以添加用户话语的样本吗?
  • 这正是我写的:CS101、PHY101 等
  • 我一直在研究这个,但我无法让它工作,我认为你最好的选择是使用这个正则表达式 [a-z]{2,}[0-9]{3,} 创建一个 Regex Entity。这将匹配话语中至少有 2 个单词后跟至少 3 个数字的任何部分。在您的机器人代码中,您可以执行以下操作:var courseName = entity.Where(char.IsLetter); var courseNumber = entity.Where(char.IsNumber);
  • 这很不幸。不过,谢谢你调查它。
  • @Bill 我刚刚与一位 LUIS 开发人员直接交谈,并确认 Javier Capello 是正确的。使用 LUIS,我们知道它如何对内置话语中的单词进行标记,并且用户无法自定义标记化,这是您的课程(如 CS101 等)所需要的。LUIS 无法通过标记化方式将 CS 与 101 分开检测& 仅将其视为 1 个令牌。您可以按照 Javier 的建议在您的机器人代码中使用 RegEx 以进行适当的解析

标签: nlp azure-language-understanding


【解决方案1】:

不幸的是,正如 cmets 中提到的 @Zeryth 和 @Javier,Luis 目前不支持这一点。这是我基于 cmets 使用的解决方法:

        let regex = /([A-Za-z]+)[^a-zA-Z\d:]?(\d{1,3})/g
        var match = regex.exec(matchString);
        if(match){
            ClassName = new Entity({type:"ClassName",entity:match[1],score:1});
            ClassNumber = new Entity({type:"ClassNumber",entity:match[2],score:1});
        }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多