【发布时间】:2010-11-26 21:23:16
【问题描述】:
目前我有一个非常简单的自动回复/聊天机器人。为了让它发挥更复杂的作用(如帮助机器人),需要对其进行大量修改。我不是 php 程序员,但我想我知道经过一些研究后需要做什么,我只是不完全理解 php.net 上关于 pregmatch 和 fopen 等的文章。我知道我可以下载现成的帮助机器人,但我的学习曲线在哪里?我也不着急,我喜欢这些小挑战。我在别处问过这个问题,那里的知识分子要么一无所知,要么根本无法被打扰——他们只是不停地告诉我下载一个预制的帮助机器人。
任何帮助将不胜感激,但请不要将我送回 php 手册,因为我已经尝试过使用它。我需要一种全新的方法。
我有一个表格供用户输入(最大长度)50 个字符的文本问题。我认为限制用户可以输入的字符数是一个优势,这样字符串的操作就变得更容易了。 用户提交问题后,需要将其传递给变量。
- 我想将字符串中的单词与文件中的单词列表进行比较
- 如果文件中不存在这些词,则已将它们添加到其中。
- 确定某些关键字(例如:谁;什么;在哪里;何时;如何;为什么;哪个)来分解问题
- 识别任何名词以进一步分解问题(名词显然将是一个相当大的列表,我必须手动创建)。
- 将结果与响应列表(我将手动创建的另一个列表)进行比较。
- 输出最佳匹配响应。
以下代码是基本代码,尚未检查输入字符串中的关键字组合。我已尽我所能对代码进行了注释。
以下是我的responder002.php文件:
/*create the 'question' variable for the users text to be stored in:*/
$question=strtolower($_POST['question']));
/*begin creating the form*/
$ask='<br /><form action="responder002.php" method="POST">Question: <input type="text" name="question">
<input type="submit" value="Ask"></form>';
$answer='<h2>Answer</h2><br />';
/*if the $question variable is empty then ask for input*/
if (empty($question))
{
print $ask;
exit;
}
/*otherwise ....*/
else
{
/*if the variable contains the following strings output to screen the matching response*/
if ($question=="hello"||$question=="Hello"||$question=="hi"||$question=="Hi"||$question=="G'day"||$question=="hey")
{
$answerq="Hello how are you?";
}
if ($question=="good"||$question=="good thanks")
{
$answerq="Im glad to hear you are good.";
}
if ($question=="fine"||$question=="fine thanks") {
$answerq="Im glad to hear you are fine.";
}
echo '<i>You asked me:</i> '.$question.'
<br />
<i>I replied:';
if (empty($answerq)) {
echo 'Sorry, I dont know the answer';
}
echo '</i>'.$answerq.' '.$ask.;
exit;
}
echo '</table>';
$h->endpage();
?>
【问题讨论】:
-
您需要编辑您的问题以解决问题。使用代码
101010按钮同时突出显示这些代码区域以使其正确显示。 -
我认为
/* otherwise ...... */ else {是我见过的最搞笑的评论。 -
您的报价不平衡。您在此处打开了一个字符串:
echo '</i>'.$answerq.' '.$ask.'; -
我很抱歉。带着 4 个孩子的单身父亲,整晚都在从事许多项目。这样做的目的是通过慢慢发展和完善分析用户输入的方法来尝试给用户更准确的答案。一旦我了解了如何将数据传递到文件中的基础知识,与响应文件中的现有数据进行比较,并输出响应,我就可以继续进行实验。
-
您好 Nick,我想我会帮助您并做一些教学,如果我的介绍性教程过于简单或以某种方式居高临下,我们深表歉意,这不是本意。我不知道你的水平,只是从你现有的代码中猜测。看看有没有帮助。