Lernfähiger Chatbot spricht dank Windows.

Hallo,

ich habe vor einiger Zeit einen lernfähigen PHP Chatbot gecodet (Henri). Nun kam ich auf die witzige Idee, ihn mittels VB6 an die Windows Spracherkennung und -ausgabe zu koppeln.
Joa, weiß nicht. Vielleicht braucht jemand einen Freund, dann bekommt er noch Skype. :wink:
Oder ihr habt Lust ihn weiter zu entwickeln. Aufjedenfall, find ich ihn ganz nett.

Video:
https://www.youtube.com/watch?v=j7dYFF7qUDQ
 
Ich poste euch mal den Source, er ist eigentlich ganz simpel gehalten und funktioniert dennoch gut (Wenn man sich an ein paar Regeln beim Training hält).
1. Jede Aussage vom Bot ist eine Frage
2. Ausführlich in Sätzen antworten aber dennoch allgemein bleiben, damit die Anwort als auch Aussage durchgehen kann.
z.B.:
F: "Kennst du Bob Marley?" <--
A: "Bob Marley finde ich gut." ^

PHP:
<?php
session_start();
mysql_connect("localhost", "name", "pass");
mysql_select_db("database");

//Datenbank mit tabelle 'hirn' und Spalten 'antwort', 'frage'.

$say         = urldecode(mysql_real_escape_string($_GET['say']));
//Eingabe

$sql         = "SELECT antwort FROM hirn WHERE frage LIKE '%$say%'";
$erg         = mysql_query($sql);
$row         = mysql_fetch_object($erg);
echo mysql_error();
if  (mysql_num_rows($erg) > 0){
    $num    = mysql_num_rows($erg);
    $zufall = rand(1, $num);
    while ($row = mysql_fetch_object($erg)) {
        $c_say = $row->antwort;
        $e++;
        if ($e == $zufall) {
            break; 
        }
    }
$out = "F (".mysql_num_rows($erg).")-(".$e.") ";

//Phrase erkannt

} else {



$sql         = "SELECT antwort FROM hirn WHERE MATCH (frage) AGAINST ('$say' IN BOOLEAN MODE)";
$erg         = mysql_query($sql);
$row         = mysql_fetch_object($erg);



if  (mysql_num_rows($erg)==0){
    $sql = "SELECT antwort FROM hirn WHERE MATCH (antwort) AGAINST ('$say' IN BOOLEAN MODE)";
    $erg=mysql_query($sql);
    $row=mysql_fetch_object($erg);

        if  (mysql_num_rows($erg) > 0){
            if (mysql_num_rows($erg)==1) {
                $row = mysql_fetch_object($erg);
                $c_say = $row->antwort;
                $e=1;
            } else {
                $num    = mysql_num_rows($erg);
                $zufall = rand(1, $num);
                while ($row = mysql_fetch_object($erg)) {
                    $c_say = $row->antwort;
                    $e++;
                    if ($e == $zufall) {
                        break; 
                    }
                    //Match BOOLEAN MODE
                }
            }
            $out = "2 (".mysql_num_rows($erg).")-(".$e.") ";
        }else {
            $sql="SELECT antwort FROM hirn ORDER BY RAND() LIMIT 1";
            $erg=mysql_query($sql);
            $row=mysql_fetch_object($erg);
            $c_say = $row->antwort;
            $out = "z (".mysql_num_rows($erg).") ";
            //Zufallsantwort
            
        }
             
} else {
$num    = mysql_num_rows($erg);
$zufall = rand(0, $num);
    while ($row = mysql_fetch_object($erg)) {
        $c_say = $row->antwort;
        $e++;
        if ($e == $zufall) {
            break; 
        }
    }

$out = "1 (".mysql_num_rows($erg).")-(".$e.") ";
}

}


    if ($_SESSION['last']!=""){
    $oo=$_SESSION['last'];
    $sql="SELECT id FROM hirn WHERE frage='$oo' AND antwort='$say'";
    $erg=mysql_query($sql);
        if (mysql_num_rows($erg)<1){
        $sql="INSERT INTO hirn (frage,antwort) VALUES ('$oo', '$say');";
        //mysql_query($sql);    //lernen (Auskommentiert, da nicht Jedermann seinen Mist eintragen soll.)
        }
    }
$_SESSION['last']=$c_say;
//Das zuletzt gesagte merken.

mysql_close();

echo $c_say;
?>

PS: Ich habe gerade eben den Code nochmal geändert, dh ungetestet. Die Sache liegt schon etwas zurück.

Db mit ca 1000 Datensätzen häng ich an.

^^Ach nun verfehlt es ein bissel das Thema, eventuell verschieben.

Danke.
 
Zuletzt bearbeitet:
Zum Training am besten alle Assoziationsroutinen ausschalten und nur Zufallssätze generieren lassen, so kommen schneller die neuen dran. Ansonsten kaut man irgendwann zum tausendsten mal z.B. die Begrüßung durch (Davon kennt er reichlich)...
 
Zurück
Oben