下面是一个基于 C++ 的简单聊天机器人示例代码:

#include <iostream>
#include <fstream>
#include <string>
#include <vector>
#include <algorithm>

std::string trim(const std::string& str) {
    size_t first = str.find_first_not_of(" 	

");
    size_t last = str.find_last_not_of(" 	

");
    return str.substr(first, (last - first + 1));
}

std::string removePunctuation(const std::string& str) {
    std::string result;
    for (char c : str) {
        if (!ispunct(c)) {
            result += c;
        }
    }
    return result;
}

std::string getBestMatch(const std::string& question, const std::vector<std::pair<std::string, std::string>>& corpus) {
    std::string questionWithoutPunctuation = removePunctuation(question);
    std::string bestMatch;
    int bestMatchScore = 0;
    for (const auto& pair : corpus) {
        std::string corpusQuestion = removePunctuation(pair.first);
        std::string::size_type pos = questionWithoutPunctuation.find(corpusQuestion);
        if (pos != std::string::npos) {
            int score = corpusQuestion.length();
            if (score > bestMatchScore) {
                bestMatch = pair.second;
                bestMatchScore = score;
            }
        }
    }
    return bestMatch;
}

int main() {
    std::ifstream configFile("config.ini");
    if (!configFile) {
        std::cout << "Failed to open config.ini" << std::endl;
        return 1;
    }

    std::vector<std::pair<std::string, std::string>> corpus;
    std::string line;
    while (std::getline(configFile, line)) {
        size_t eqPos = line.find('=');
        if (eqPos != std::string::npos) {
            std::string question = trim(line.substr(0, eqPos));
            std::string answer = trim(line.substr(eqPos + 1));
            corpus.push_back(std::make_pair(question, answer));
        }
    }

    std::string userInput;
    std::cout << "Enter your question: ";
    std::getline(std::cin, userInput);

    std::string delimiter = ",.,。";
    size_t start = 0;
    size_t end = userInput.find_first_of(delimiter);
    while (end != std::string::npos) {
        std::string question = trim(userInput.substr(start, end - start));
        std::string answer = getBestMatch(question, corpus);
        std::cout << "Answer: " << answer << std::endl;
        start = end + 1;
        end = userInput.find_first_of(delimiter, start);
    }
    std::string question = trim(userInput.substr(start));
    std::string answer = getBestMatch(question, corpus);
    std::cout << "Answer: " << answer << std::endl;

    return 0;
}

在与上述代码相同的目录下,创建一个名为config.ini的文件,将问题和回答按照问题=回答的格式写入文件中,例如:

你好=你好!
你叫什么名字=我叫聊天机器人。
你喜欢什么颜色=我喜欢蓝色。

编译并运行代码后,程序会提示你输入问题。你可以输入多个问题,每个问题以中文逗号、英文逗号或句号断开。程序将根据你的输入,在配置文件中寻找与每个问题最匹配的问题,并输出对应的回答。

C++ 聊天机器人:使用语料库实现问答功能

原文地址: https://www.cveoy.top/t/topic/jNc 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录