从用户输入中识别名称

Posted

技术标签:

【中文标题】从用户输入中识别名称【英文标题】: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' 中匹配。不匹配的两个单词和逗号可以被索引引用。 【参考方案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`));

【讨论】:

谢谢!正是我想要的。

以上是关于从用户输入中识别名称的主要内容,如果未能解决你的问题,请参考以下文章

Tensorflow 模型:如何从 proto buff 文件中识别输入/输出节点名称?

从输入用户保存名称和网站的持久数据

当用户从选择框中选择选项时更改输入字段的值

如何识别用户在评论框中输入的 URL?

如何在批处理文件中识别用户输入帮助(/?)

如何实现textinput控制和识别