Hallo,
ik ben (meerendeels uit verveling) begonnen een soort van chatbot AI dingetje temaken in CSS. nu heb ik een werkende code:
#pragma warning(disable: 4786)
#include <iostream>
#include <string>
#include <vector>
#include <ctime>
const int MAX_RESP = 4;
typedef std::vector<std::string> vstring;
vstring find_match(std::string input);
void copy(char *array[], vstring &v);
typedef struct {
char *input;
char *responses[MAX_RESP];
}record;
record KnowledgeBase[] = {
{"What is your name", //text input
{"My name is Elissia.",
"You can call me Elissia.", //answers
"You may call me Elissia.",
"Why do you want to know my name?"}
},
};
size_t nKnowledgeBaseSize = sizeof (KnowledgeBase) / sizeof (KnowledgeBase[0]);
int main()
{
srand((unsigned) time(NULL));
std::string sInput = "";
std::string sResponse = "";
while(1) {
std::cout<< ">";
std::getline(std::cin, sInput);
vstring responses = find_match(sInput);
if (sInput == "Bye") { //this will make sure that if the line says Bye, the program will shutdown
std::cout << "it was nice talking to you, cya" << std::endl;
break;
}
else if(responses.size() == 0){
std::cout << "I'm not sure if I understand what you are talking about." << std::endl;
}
else{
int nSelection = rand() % MAX_RESP;
sResponse = responses[nSelection]; std::cout << sResponse << std::endl;
}
}
return 0;
}
vstring find_match(std::string input){
vstring result;
for(int i = 0; i < nKnowledgeBaseSize; ++i){
if(std::string(KnowledgeBase .input) == input) {
copy(KnowledgeBase.responses, result);
return result;
}
}
return result;
}
void copy(char *array[], vstring &v) {
for(int i = 0; i < MAX_RESP; ++i) {
v.push_back(array);
}
}
maar om een reply tekrijgen, moet in de console precies hetzelfde zinnetje geschreven worden als de text input in de knowledge base. (hoofdletter gevoelig).
nu wil ik dus weten, hoe maak ik een systeem, wat antwoorden bepaalt door een paar keywoorden
oftewel iets als
if(sInput contains 'how','are','you'){ cout << "I'm fine"
(dit is geen correcte code, dat weet ik) of dat dit gedaan word via een knowledge database in xml of AIML.
ook wil ik hiervoor een functie gebruiken, vergelijkbaar met de casetolower of casetoupper (weet niet of ik dit nu correct geschreven heb) in php.
ik ben redelijk nieuw in c++, dus het kan zijn dat er wat eenvoudig oplosbare vragen tussen zitten.
bedankt voor jullie hulp
(de bovenstaande code heb ik niet zelf bedacht, maar heb ik van het web, en ik gebruik ms visual studio voor het programeren van software)
ik ben (meerendeels uit verveling) begonnen een soort van chatbot AI dingetje temaken in CSS. nu heb ik een werkende code:
#pragma warning(disable: 4786)
#include <iostream>
#include <string>
#include <vector>
#include <ctime>
const int MAX_RESP = 4;
typedef std::vector<std::string> vstring;
vstring find_match(std::string input);
void copy(char *array[], vstring &v);
typedef struct {
char *input;
char *responses[MAX_RESP];
}record;
record KnowledgeBase[] = {
{"What is your name", //text input
{"My name is Elissia.",
"You can call me Elissia.", //answers
"You may call me Elissia.",
"Why do you want to know my name?"}
},
};
size_t nKnowledgeBaseSize = sizeof (KnowledgeBase) / sizeof (KnowledgeBase[0]);
int main()
{
srand((unsigned) time(NULL));
std::string sInput = "";
std::string sResponse = "";
while(1) {
std::cout<< ">";
std::getline(std::cin, sInput);
vstring responses = find_match(sInput);
if (sInput == "Bye") { //this will make sure that if the line says Bye, the program will shutdown
std::cout << "it was nice talking to you, cya" << std::endl;
break;
}
else if(responses.size() == 0){
std::cout << "I'm not sure if I understand what you are talking about." << std::endl;
}
else{
int nSelection = rand() % MAX_RESP;
sResponse = responses[nSelection]; std::cout << sResponse << std::endl;
}
}
return 0;
}
vstring find_match(std::string input){
vstring result;
for(int i = 0; i < nKnowledgeBaseSize; ++i){
if(std::string(KnowledgeBase .input) == input) {
copy(KnowledgeBase.responses, result);
return result;
}
}
return result;
}
void copy(char *array[], vstring &v) {
for(int i = 0; i < MAX_RESP; ++i) {
v.push_back(array);
}
}
maar om een reply tekrijgen, moet in de console precies hetzelfde zinnetje geschreven worden als de text input in de knowledge base. (hoofdletter gevoelig).
nu wil ik dus weten, hoe maak ik een systeem, wat antwoorden bepaalt door een paar keywoorden
oftewel iets als
if(sInput contains 'how','are','you'){ cout << "I'm fine"
(dit is geen correcte code, dat weet ik) of dat dit gedaan word via een knowledge database in xml of AIML.
ook wil ik hiervoor een functie gebruiken, vergelijkbaar met de casetolower of casetoupper (weet niet of ik dit nu correct geschreven heb) in php.
ik ben redelijk nieuw in c++, dus het kan zijn dat er wat eenvoudig oplosbare vragen tussen zitten.
bedankt voor jullie hulp

(de bovenstaande code heb ik niet zelf bedacht, maar heb ik van het web, en ik gebruik ms visual studio voor het programeren van software)