菜鸟求助,请高手帮我解释下面的代码

duanrencai 2013-03-21 09:18:24
这是个人机对话的小程序,本人刚学,看的不明白,请帮我给加个注释,最好全面点的,还有聊天机器人是怎么写的,谁搞过请帮帮忙,指导指导,先谢谢了
字数限制,贴不全,愿意帮忙的我发完整的过去

#include "eliza.h"
// gets input from the user
void Eliza::get_input() {
//std::cout << "\n\n" << m_sUserName << ": ";
std::cout << "\n" << ">";
save_prev_input();
std::getline(std::cin, m_sInput);
save_log("USER");
}

// removes punctuation from the input
// and do some more preprocessing
void Eliza::preProcessInput() {
if(m_sInput.length() > 0) {
tok.cleanString(m_sInput, " ?!,;");
trimRight(m_sInput, '.');
UpperCase(m_sInput);
m_sInput.insert(0, " ");
m_sInput.append(" ");
}
}

void Eliza::preProcessResponse() {
if(is_template(m_sResponse)) {
findSymbol(m_sResponse);
if(m_sKeyWord == m_sInput) {
m_sSuffix = m_sInput;
} else if(!m_bMemoryRecall){
extract_suffix();
} else {
m_bMemoryRecall = 0;
}
if(m_sSuffix.length() == 0) {
while(is_template(m_sResponse) && response_list.size() > 1) {
response_list.erase(response_list.begin());
m_sResponse = response_list[0];
}
if(is_template(m_sResponse)) {
response_list = topicChanger;
select_response();
}
}
if(m_sSuffix.length() > 0 && m_sSymbol != "%") {
transpose_sentence(m_sSuffix);
correct_sentence(m_sSuffix);
trimRight(m_sSuffix, ' ');
m_sSuffix.insert(0, " ");
}
replace(m_sResponse, m_sSymbol, m_sSuffix);
}
if(m_sUserName != "USER") {
replace(m_sResponse, "USER", m_sUserName);
}
}

void Eliza::memorise_input() {
m_sSymbol = "@";
extract_suffix();
memory.push(m_sSuffix);
}

bool Eliza::similar_response() const {
int len = m_sResponse.length();
int len2 = m_sPrevResponse.length();
int repeat_count = 0;
for(int i = 0; i < len && i < len2; ++i) {
if(m_sResponse[i] == m_sPrevResponse[i]) {
++repeat_count;
} else {
break;
}
}
return repeat_count > 1;
}

inline bool Eliza::bot_repeat() const {
int pos = rfind(vResponseLog, m_sResponse);
if(pos != -1) {
return (pos + 1 < response_list.size());
}
return 0;
}

void Eliza::start() {
time_t ltime;
time(<ime);
logfile.open("log.txt", std::ios::out | std::ios::app);
if(logfile.fail()) {
throw std::string("can't save conversation log");
}
logfile << "\n\nConversation log - " << ctime(<ime) << std::endl;
response_list = signOn;
select_response();
print_response();
save_log("ELIZA");
}

// prints the bot response on the screen
void Eliza::print_response() {
if(m_sResponse.length() > 0) {
simulate_thinking();
std::cout << m_sResponse;
//simulate_typist();
}
}

// select responses randomly from a list of responses
inline void Eliza::select_response() {
shuffle(response_list, response_list.size());
m_sResponse = response_list[0];
}

void Eliza::add_response(vstring v) {
int size = v.size();
for(int i = 0; i < size; ++i) {
response_list.push_back(v[i]);
}
}

void Eliza::save_user_name() {
if(m_sKeyWord == "MY NAME IS" || m_sKeyWord == "YOU CAN CALL ME") {
extract_suffix();
m_sUserName = m_sSuffix;
trimLR(m_sUserName, " ");
}
}
...全文
142 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
duanrencai 2014-06-02
  • 打赏
  • 举报
回复
结帖了,自己慢慢研究
傻傻不解释 2013-03-26
  • 打赏
  • 举报
回复
这么蛋疼!!!
  • 打赏
  • 举报
回复
这段代码基本上可以自解释,看不懂英文查单词,断点逐步调试永远是必修的步骤
无间虚者 2013-03-21
  • 打赏
  • 举报
回复
lz,没人会这么无聊给你解释滴。。。

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧