Ankündigung

Einklappen
Keine Ankündigung bisher.

Problem mit Schimpfworterkennung

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Problem mit Schimpfworterkennung

    Hallo zusammen,

    Ich beschäftige mich im Moment mit einem Chat, den wir auf einem root-Server installiert haben. Alles funktioniert auch ganz gut.

    Nun zu meinem Problem:

    Ich habe im Chat eine Art Bot-Funktion. Diese erkennt eine Message und das Chat-System gibt dann eine Antwort aus.
    z.b. /hilfe = Antwort vom System

    Hier mal der Code:
    Code:
    if (substr($_POST['message'], 0, 8)=="/hilfe"){
    				$this->dbObj->sqlSet("INSERT INTO {$this->_prefix}etchat_messages ( etchat_user_fid , etchat_text, etchat_text_css, etchat_timestamp, etchat_fid_room, etchat_privat)
    					VALUES ( 1, 'Hallo, ich bin das Chat-System, ich kann dir auf viele Dinge eine Antort geben. Bitte sende /Begriff !', 'color:#".$_SESSION['etchat_'.$this->_prefix.'syscolor'].";font-weight:bold;color:black;font-style:normal;', ".date('U').", ".(int)$_POST['room'].", 0)", false);
    			}
    Dieser Code erkennt eine Message und gibt dann eine Antwort aus.

    Ich möchte dieses aber gerne in eine Art "Schimpfworterkennung" umwandeln.
    Das heißt, das System soll innerhalb eines Satzes ein Wort erkennen und dann eine(n) Antwort/Kommentar abgeben.

    Da meine Kenntnisse NOCH nicht so berauschend sind, hoffe ich hier bei euch eine Lösung zu finden.

    Vielen Dank im voraus

    D_Hammer (Markus)

  • #2
    Forenrichtlinien

    Kommentar


    • #3
      Hab ich da was nicht beachtet, oder was soll der Beitrag jetzt da?
      Ich möchte hier keinem auf die Füße treten. Jeder fängt mal an und ich bin immer noch selber dabei eine Lösung zu finden für das oben angesprochene Problem. Ich würde mich nun mal über Denkanstöße und Lösungshilfen freuen und möchte hier nicht als "Schnorrer" dar stehen. Das liegt mir fern.

      Gruß

      Kommentar


      • #4
        Du nimmst den eingegebenen Text, und splittest ihn in Wörter auf (am Leerzeichen trennen). Dann kannst du jedes Wort einzeln untersuchen und entsprechend reagieren.

        Den Hinweis auf die Forenrichtlinien hast du bekommen, weil du nach einem Konzept (Denkanstöße, Lösungsansatz) suchst, ohne selber etwas in dieser Richtung vorgestellt zu haben. Wir helfen gerne bei Problemen während der Umsetzung deines eigenen Konzepts, weniger gerne erledigen wir deine Denkarbeit und erstellen dir das Konzept.

        Kommentar


        • #5
          Danke dir für die Information.

          Was meine eigenen Denkanstöße angeht, hatte ich einiges versucht. Da ich aber ein bloßer Anfänger bin, wußte ich jetzt nicht wie ich das ausdrücken sollte.
          Will nicht das hier andere meine Arbeit machen, sondern das ich eventuell was lernen kann.
          Aber danke für den Tipp, werd es mal am Wochenende versuchen umzusetzen.

          Kommentar


          • #6
            Man muss nicht Wort für Wort der Eingabe selbst testen. Das kann PHP besser:

            PHP-Code:
            $woerter = array(
                            
            'wort1' => 'ersatzwort1',
                            
            'wort2' => 'ersatzwort2',
                            
            'wort3' => 'ersatzwort3',
                        );
            $eingabe strtr($eingabe,§woerter); 

            Kommentar


            • #7
              Zitat von Wolla Beitrag anzeigen
              PHP-Code:
              $woerter = array(
                              
              'wort1' => 'ersatzwort1',
                              
              'wort2' => 'ersatzwort2',
                              
              'wort3' => 'ersatzwort3',
                          );
              $eingabe strtr($eingabe,[B]$woerter[/B]); 

              Kommentar


              • #8
                Immer diese Tuppfühler

                Genau:
                $woerter, nicht §woerter

                Kommentar


                • #9
                  Diese Funktion die ihr mir gerade zeigt, war schon im Chat vorgegeben.
                  Das heißt, wenn jemand ein Wort schreibt, das im Filter angegeben ist, wird es ersetzt.
                  Meine Überlegung war aber ine ganz andere:

                  In diesem Code:

                  PHP-Code:
                  if (substr($_POST['message'], 08)=="/hilfe"){
                                  
                  $this->dbObj->sqlSet("INSERT INTO {$this->_prefix}etchat_messages ( etchat_user_fid , etchat_text, etchat_text_css, etchat_timestamp, etchat_fid_room, etchat_privat)
                                      VALUES ( 1, 'Hallo, ich bin das Chat-System, ich kann dir auf viele Dinge eine Antort geben. Bitte sende /Begriff !', 'color:#"
                  .$_SESSION['etchat_'.$this->_prefix.'syscolor'].";font-weight:bold;color:black;font-style:normal;', ".date('U').", ".(int)$_POST['room'].", 0)"false); 
                  erkennt das System "Befehle" die im Chat geschrieben werden und antwortet darauf. Hier z.b. /hilfe
                  Schreibe ich aber das Wort /hilfe in einen Satz wie z.b.

                  Ich bräuchte /hilfe (ist nur ein Beispiel), erkennt das System diesen Befehl leider nicht.
                  Jetzt suche ich nach der Funktion die das vorgegebene Wort in einem Satz erkennt und nicht nur alleine.
                  Da ich blutiger Anfänger, weiß ich gar nicht wie ich vorgehen muß. Bin gerade wieder dabei mir das Tutorial zum xten mal zu verinnerlichen. Aber ich komm zu verrecken nicht darauf.
                  Hab schon versucht das mit dem ändern von (substr($_POST['message'] zu verwirklichen. Gibt ja ne schöne Liste aber da bin ich wohl auf dem Holzweg...

                  Kommentar


                  • #10
                    PHP-Code:
                    substr($_POST['message'], 08)=="/hilfe" 
                    Na, wieviele Zeichen stecken denn in "/hilfe"... (Tipp: nicht

                    Kommentar


                    • #11
                      Zitat von lstegelitz Beitrag anzeigen
                      PHP-Code:
                      substr($_POST['message'], 08)=="/hilfe" 
                      Na, wieviele Zeichen stecken denn in "/hilfe"... (Tipp: nicht
                      Ist ja nett gemeint, hat aber leider nichts mit meinem Problem zu tun.
                      Mir geht es darum das das Wort "/hilfe" in einem Satz erkannt wird.
                      Im Moment erkennt das System leider nur das Wort an sich...

                      Kommentar


                      • #12
                        Selbst wenn die Anzahl der Buchstaben richtig wäre, müsste es am Anfang stehen, was nicht so sein muß:
                        Schreibe ich aber das Wort /hilfe in einen Satz
                        Davon mal abgesehen wäre die 0 dann auch durch 1 zu ersetzen, da / das erste Zeichen wäre.

                        Eine Alternative wäre m.M.n. das hier:
                        PHP-Code:
                        $needHelp stripos$_POST['message'], '/hilfe' ) !== false;

                        if( 
                        $needHelp ) echo 'Wie kann ich Ihnen helfen?'

                        Kommentar


                        • #13
                          Da es sich aber hier um einem Chat handelt der über eine SQL-Datenbank läuft, habe ich das mit

                          PHP-Code:
                          {
                          $this->dbObj->sqlSet("INSERT INTO {$this->_prefix}etchat_messages ( etchat_user_fid , etchat_text, etchat_text_css, etchat_timestamp, etchat_fid_room, etchat_privat)
                                              VALUES ( 1, 'Hallo, ich bin das System und kann dir bei folgenden Dingen helfen:', 'color:#"
                          .$_SESSION['etchat_'.$this->_prefix.'syscolor'].";font-weight:normal;font-style:normal;', ".date('U').", ".(int)$_POST['room'].", 0)"false);
                                      } 
                          gelöst. Die Antwort vom System wird "INSERT INTO" in die "etchat_messages" geschieben. In dieser stehen alle Nachrichten die User oder das System geschrieben haben und wird jede Sekunde aktualisiert und im Chat ausgegeben.
                          Ich suche halt nach einer Lösung, die den Upload in die Datenbank beibehält, aber den ganzen String nach diesem Wort durchsucht.

                          PHP-Code:
                          if (substr($_POST['message'], 06)=="/hilfe"
                          Dieser Codeschnipsel besagt doch das(wenn ich das richtig interpretiere):

                          Führe Upload in Datenbank aus, wenn die Message = /hilfe ist.

                          die erste 0 ist die Startposition ab der gesucht wird
                          die 6 beschreibt die Länge des gesuchten Wortes

                          Ich habe die 0 durch eine 1 ersetzt und es erfolg garkeine Ausgabe mehr.

                          Ich blick da nicht mehr durch...
                          Wahrscheinlich hab ich mir als Anfänger da was viel zu schweres aufgebrummt.^^

                          Kommentar


                          • #14
                            Das funktioniert wie gesagt auch nur, wenn Du NUR "/hilfe" schreibst. Wenn du es in einem Satz einbaust, wie z.B. "Ich brauche /hilfe", funktioniert das nicht mehr.
                            Abhilfe ist immer noch die Funktion stripos()!

                            Kommentar


                            • #15
                              /hilfe ist ein Schimpfwort?

                              Kommentar

                              Lädt...
                              X