1

我想在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://stackoverflow.com/questions/23305000/javascript-fuzzy-search-that-makes-sense/) – guest271314

+0

但是'嗨'也應該沒有匹配。我應該添加另一個數組來過濾掉這些單詞嗎? – Thore

+0

您可以將這些值存儲在數據庫中並使用全文搜索功能。否則,你需要一些JS庫來做類似的工作。 –

回答

3

您可以將不同的方式保存爲正則表達式,並在正則表達式中捕獲該名稱。你可以像你想要的那樣健壯,但這是一個起點。

一旦找到匹配,您可以停止迭代可能的變化,您可以採取匹配並輸出名稱。

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