C++ 聊天机器人:基于语料库的智能问答系统
以下是一个简单的 C++ 聊天机器人的示例代码,它可以根据用户输入的问题,从 config.ini 文件中加载的语料库中找到匹配度最高的问题,并输出相应的回答。代码还实现了断句功能,可以对用户输入的句子进行分割,并逐句进行回答。
#include <iostream>
#include <fstream>
#include <sstream>
#include <string>
#include <vector>
#include <algorithm>
// 问题-回答对
struct QA {
std::string question;
std::string answer;
};
// 加载语料库
std::vector<QA> loadCorpus(const std::string& corpusFile) {
std::vector<QA> corpus;
std::ifstream file(corpusFile);
std::string line;
while (std::getline(file, line)) {
std::istringstream iss(line);
std::string question, answer;
std::getline(iss, question, ',');
std::getline(iss, answer, ',');
corpus.push_back({ question, answer });
}
file.close();
return corpus;
}
// 计算字符串相似度(简化为字符匹配个数)
int calculateSimilarity(const std::string& str1, const std::string& str2) {
int count = 0;
for (char c : str1) {
if (str2.find(c) != std::string::npos) {
count++;
}
}
return count;
}
// 根据用户输入查找匹配度最高的问题
std::string findBestMatch(const std::string& input, const std::vector<QA>& corpus) {
int maxSimilarity = 0;
std::string bestMatch;
for (const QA& qa : corpus) {
int similarity = calculateSimilarity(input, qa.question);
if (similarity > maxSimilarity) {
maxSimilarity = similarity;
bestMatch = qa.answer;
}
}
return bestMatch;
}
// 断句并回答
std::vector<std::string> splitSentences(const std::string& input) {
std::vector<std::string> sentences;
std::istringstream iss(input);
std::string sentence;
while (std::getline(iss, sentence, '.') || std::getline(iss, sentence, ',')) {
sentences.push_back(sentence);
}
return sentences;
}
int main() {
// 加载语料库
std::vector<QA> corpus = loadCorpus('config.ini');
while (true) {
std::string input;
std::cout << '你: ';
std::getline(std::cin, input);
// 断句
std::vector<std::string> sentences = splitSentences(input);
// 回答每个句子
for (const std::string& sentence : sentences) {
// 查找匹配度最高的问题并回答
std::string answer = findBestMatch(sentence, corpus);
if (!answer.empty()) {
std::cout << '机器人: ' << answer << std::endl;
} else {
std::cout << '机器人: 对不起,我不明白你的问题。' << std::endl;
}
}
}
return 0;
}
上述代码中,假设语料库文件 config.ini 格式如下:
你好,你好啊
你叫什么名字,我叫小机器人
今天天气怎么样,今天天气晴朗
你可以根据自己的需求和语料库来修改代码。聊天机器人会根据用户输入的问题,在语料库中找到匹配度最高的问题,并输出相应的回答。用户输入的句子会先进行断句,然后逐句回答。如果找不到匹配的问题,机器人会回答“对不起,我不明白你的问题。”
原文地址: https://www.cveoy.top/t/topic/nBP 著作权归作者所有。请勿转载和采集!