C++ 聊天机器人:基于字符匹配的问答系统
下面是一个简单的示例代码,实现了一个基本的聊天机器人。机器人通过遍历预定义的问题和对应的答案,找到与用户输入的问题字符匹配程度最高的问题,并输出对应的答案。
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
// 定义问题和对应的答案
std::vector<std::pair<std::string, std::string>> qa = {
{'你好', '你好呀!'},
{'你是谁', '我是一个聊天机器人。'},
{'天气怎么样', '今天天气晴朗,温度适宜。'},
{'你喜欢什么', '我喜欢和人类交流。'},
{'再见', '再见,祝你有个愉快的一天!'}
};
// 计算字符串相似度
int computeSimilarity(const std::string& s1, const std::string& s2) {
int m = s1.length();
int n = s2.length();
std::vector<std::vector<int>> dp(m + 1, std::vector<int>(n + 1));
// 初始化边界条件
for (int i = 0; i <= m; ++i) {
dp[i][0] = i;
}
for (int j = 0; j <= n; ++j) {
dp[0][j] = j;
}
// 动态规划计算编辑距离
for (int i = 1; i <= m; ++i) {
for (int j = 1; j <= n; ++j) {
if (s1[i - 1] == s2[j - 1]) {
dp[i][j] = dp[i - 1][j - 1];
} else {
dp[i][j] = std::min({dp[i - 1][j - 1], dp[i][j - 1], dp[i - 1][j]}) + 1;
}
}
}
return dp[m][n];
}
// 获取匹配程度最高的问题的答案
std::string getAnswer(const std::string& question) {
int maxSimilarity = 0;
std::string answer = '对不起,我不明白你的问题。';
for (const auto& q : qa) {
int similarity = computeSimilarity(question, q.first);
if (similarity > maxSimilarity) {
maxSimilarity = similarity;
answer = q.second;
}
}
return answer;
}
int main() {
std::string question;
std::cout << '你好,请输入你的问题:' << std::endl;
while (getline(std::cin, question)) {
std::string answer = getAnswer(question);
std::cout << '机器人回答:' << answer << std::endl;
std::cout << '请继续输入你的问题:' << std::endl;
}
return 0;
}
在上面的代码中,我们首先定义了一些问题和对应的答案,保存在qa向量中。然后,我们使用动态规划算法计算用户输入的问题与预定义问题的相似度,相似度越高表示匹配程度越高。最后,我们遍历所有的问题,找到匹配程度最高的问题,并输出对应的答案。
请注意,这只是一个简单的示例,实际中可能需要更复杂的算法和数据结构来实现更高效和准确的问题匹配。
原文地址: http://www.cveoy.top/t/topic/nLU 著作权归作者所有。请勿转载和采集!