从用户输入中识别名称
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`));
【讨论】:
谢谢!正是我想要的。以上是关于从用户输入中识别名称的主要内容,如果未能解决你的问题,请参考以下文章