从用户输入中识别名字

问题描述:

我想在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}`]; 

,又重新串匹配的句子与用户输入保存名称的变量?

+0

可以检查用户输入的每个单词序列匹配。大多数匹配可以从数组中选择。在给定示例中,用户名将是匹配词后面不匹配的词。请参阅[Javascript模糊搜索有道理](https://*.com/questions/23305000/javascript-fuzzy-search-that-makes-sense/) – guest271314

+0

但是'嗨'也应该没有匹配。我应该添加另一个数组来过滤掉这些单词吗? – Thore

+0

您可以将这些值存储在数据库中并使用全文搜索功能。否则,你需要一些JS库来做类似的工作。 –

您可以将不同的方式保存为正则表达式,并在正则表达式中捕获该名称。你可以像你想要的那样健壮,但这是一个起点。

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

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