从用户输入中识别名字
问题描述:
我想在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}`];
,又重新串匹配的句子与用户输入保存名称的变量?
答
您可以将不同的方式保存为正则表达式,并在正则表达式中捕获该名称。你可以像你想要的那样健壮,但这是一个起点。
一旦找到匹配,您可以停止迭代可能的变化,您可以采取匹配并输出名称。
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`));
+0
谢谢!正是我在找什么。 – Thore
可以检查用户输入的每个单词序列匹配。大多数匹配可以从数组中选择。在给定示例中,用户名将是匹配词后面不匹配的词。请参阅[Javascript模糊搜索有道理](https://stackoverflow.com/questions/23305000/javascript-fuzzy-search-that-makes-sense/) – guest271314
但是'嗨'也应该没有匹配。我应该添加另一个数组来过滤掉这些单词吗? – Thore
您可以将这些值存储在数据库中并使用全文搜索功能。否则,你需要一些JS库来做类似的工作。 –