【问题标题】:Recognize name out of user input从用户输入中识别名称
【发布时间】:2017-12-23 12:04:44
【问题描述】:

我想用 Javascript 进行基本的 AI 聊天。

1) 如果用户说“嗨,我的名字是 Thore”,我想检查与某些预定义值最接近的匹配项。

我的数组如下所示:

const nameSentences = [`my name is`, `i'm`, `they call me`];

如何检查最接近的匹配项是什么?在这个例子中,它应该是我的数组的第一个值。

2) 第二部分是如何从用户输入中获取名称。是否可以预定义变量应放置的位置?

类似的东西

const nameSentences = [`my name is ${varName}`, `i'm ${varName}`, `they call me ${varName}`];

然后用用户输入对匹配的句子进行子串化以保存变量的名称?

【问题讨论】:

  • 您可以按顺序检查用户输入的每个单词是否匹配。最多的匹配可以从数组中选择。给定示例,用户名将是匹配单词之后的不匹配单词。见Javascript fuzzy search that makes sense
  • 但是 'Hi,' 也应该没有匹配项。我应该添加另一个数组来过滤掉这些单词吗?
  • 您可以将值存储在数据库中并使用全文搜索功能。否则你需要一些 JS 库来做类似的工作。
  • 不确定您的意思?您希望 "Hi," 发生什么? "Hi," 不是问题预期结果的一部分。例如 my name is 在输入字符串 'Hi, my name is Thore' 中匹配。不匹配的两个单词和逗号可以被索引引用。

标签: javascript arrays pattern-matching artificial-intelligence string-matching


【解决方案1】:

您可以将接受名称的不同方式保存为正则表达式,并在正则表达式中捕获名称。您可以随心所欲地变得强大,但这是一个起点。

一旦找到匹配项,您就可以停止迭代可能的变体,您可以获取匹配项并输出名称。

const nameSentences = [
  /i'm (\w+)/i,
  /my name is (\w+)/i,
  /they call me (\w+)/i
];

function learnName(input) {
  let match;
  for (let i = 0; i < nameSentences.length; i++) {
    match = input.match(nameSentences[i]);
    if (match) break;
  }

  if (match) {
    return `Hello, ${match[1]}. It's nice to meet you.`;
  } else {
    return `I didn't catch that, would you mind telling me your name again?`;
  }
}

console.log(learnName('Hi, my name is Thore.'));
console.log(learnName('They call me Bob.'));
console.log(learnName(`I'm Joe.`));
console.log(learnName(`Gibberish`));

【讨论】:

  • 谢谢!正是我想要的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-01-20
  • 1970-01-01
  • 2013-09-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-10
相关资源
最近更新 更多