Экспертная система - это вычислительная система, в которую включены знания специалистов о некоторой конкретной предметной области и которая в пределах этой области способна принимать экспертные решения. В нашем случаи предметная область это кафедра информатики и высшей математики. Экспертная система (ЭС) представляет собой человеко-машинную систему.
Основой любой экспертной системы есть база знаний. В нашем случаи базой знаний будет служить база данных MySQL. По этому рассмотрим модель данных. База данных будет состоять из двух таблиц:
1. Таблица вопросов - служит для всевозможных вопросов, которые может задать пользователь.
2. Таблица ответов - служит для ответов на вопросы пользователей.
Данные таблицы имеют связь один ко многим - для одного ответа может быть множество вопросов.
Для того, что-бы пользователь мог вести диалог с экспертной системой, будем использовать якоря.
Например представим такой диалог:
Пользователь: Ты играешь в компьютерные игры?
Экспертная система: Да, я обожаю играть в игры. А ты любишь играть?
Далее пользователь может ответить “да, люблю” или “нет, не люблю”. На эти ситуации необходимая разная реакция экспертной системы, а привязка должна быть конкретно к этому вопросу, поэтому необходимо использовать якоря.
На следующем изображении изображена модель данных:
После создания модели данных можно переходить к созданию интерфейса экспертной системы. Система должна иметь поле ввода, для вопросов пользователя и текстовое поле для выдачи ответа на вопрос. Также система должна иметь скрытое поле якоря. Верстка формы может иметь следующий вид:
Интерфейс экспертной системы может иметь следующий вид:
После создания модели данных и интерфейса, можно переходить к серверной части: связь системы с базой данных и выполнение к ней запросов. Для подключения базы данных можно использовать следующую функцию:
function connectDB()
{
$host='localhost'; // хост
$dbase='expert'; // имя базы данных
$user='root'; // пользователь
$pswd=''; // пароль пользователя
$mysqli = mysql_connect($host, $user, $pswd) or die("Не соединяется с mysql");
mysql_select_db($dbase) or die("Не подключается к базе");
return $mysqli;
}
function select($good, $yakor, $query) // Запрос для получения ответа и якоря
{
$mysqli = connectDB();
mysql_query("SET NAMES utf8");
$res = mysql_query($query);
return $res;
}
function res_answer($res) //Возвращаем ответ
{
$answer = 0;
while ($row = mysql_fetch_array($res))
{
$answer= $row['answers'];
}
if($answer==null)
$answer=0;
return $answer;
}
$query="SELECT answers.answers,answers.yakor FROM questions,answers
WHERE answers.id=questions.id_answer
AND questions.yakor='$yakor' AND MATCH(questions) AGAINST('$good')";
require_once "functions.php";
$yakor=0;
$answer='Я Expert! Отвечу на ваши вопросы о кафедре ИВМ';
try // обработчик исключений
{
if (isset($_POST['submit'])) // Если данные из текстового поля переданы
{
$questions = htmlspecialchars($_POST['questions']); // Записываем данные в переменную
$yakor = htmlspecialchars($_POST['yakor']);
if($yakor==null)
{
$yakor=0;
}
$questions = substr($questions, 0, 50); //обрезаем вопрос до 50
// убираем лишние символы(!@@#$%&*()_ и т.д.):
$questions = preg_replace("/[^\w\x7F-\xFF\s]/", " ", $questions);
//разрешим искать только по словам, которые длиннее двух букв:
$good = trim(preg_replace("/\s(\S{1,2})\s/", " ", ereg_replace(" +", " ", " $questions ")));
$good = ereg_replace(" +", " ", $good); // сжимаем двойные пробелы
if($questions!=null)
{
if($yakor==0) // запрос ==
{
$query="SELECT answers.answers,answers.yakor FROM questions,answers
WHERE answers.id=questions.id_answer
AND questions.yakor='$yakor' AND questions LIKE ('$good')";
}
if($yakor!=0) // запрос %%
{
$query="SELECT answers.answers,answers.yakor FROM questions,answers
WHERE answers.id=questions.id_answer
AND questions.yakor='$yakor' AND MATCH(questions) AGAINST('$good')";
}
$res = select($good, $yakor,$query); // вызываем ф-цию запроса
// вызываем ф-цию для получения ответа, записываем ответ в переменную:
$answer = res_answer($res);
if($answer==null)
{
$answer=0;
}
$res = select($good, $yakor, $query);
// вызываем ф-цию для получения якоря, записываем якорь в переменную:
$yakor = res_yakor($res);
if($answer==null)
{
$query="SELECT answers.answers,answers.yakor FROM questions,answers
WHERE answers.id=questions.id_answer
AND questions.yakor=0 AND questions LIKE ('$good')";
$res = select($good, $yakor,$query);// вызываем ф-цию запроса
// вызываем ф-цию для получения ответа, записываем ответ в переменную:
$answer = res_answer($res);
if($answer==null)
{
$answer=0;
}
$res = select($good, $yakor, $query);
// вызываем ф-цию для получения якоря, записываем якорь в переменную:
$yakor = res_yakor($res);
}
}
if($answer==null)
{
$answer="Я не знаю ответ, возможно вы некорректно ввели данные";
}
$hi = null; //если данные переданы обнуляем приветствие
$bad = "Извините. Вопрос задан не корректно!"; // Переменная, если в базе ничего не нашли; } }
}
}
catch(Exception $e)
{
echo $e;
}
Вы можете скачать | zip- архив готового примера, а также задать ваши вопросы автору материала: связаться с автором примера.