Zum Inhalt springen

Mefisto

Mitglieder
  • Gesamte Inhalte

    28
  • Benutzer seit

  • Letzter Besuch

Alle Inhalte von Mefisto

  1. Also ich suche nach wie vor nache einem freien, deutschen Wörterbuch auf SQLite-Basis... Es geht natürlich auch jedes andere Format, man wird das ja irgendwie konvertieren können. Weiß da nicht vielleicht doch einer Rat? Danke schonmal im Voraus, Jonathan
  2. Hallo! Ich weiß, das Thema hier ist inzwischen lange veraltet. Aber es hat mich einfach wieder überkommen, etwas an "CINA" weiterzubasteln. Als ich mir hier nochmal den Thread durchgelesen habe, ist mir nach und nach mehr klar geworden, dass ich wahrscheinlich falsch angefangen habe. Also; gestern habe ich nochmal ganz neu angefangen und habe jetzt auch schon wieder ein wenig Code. Veränderungen von alt zu neu: 1. Kein Qt mehr, der "Kern" wird ausschließlich in C++ geschrieben. Hinterher kommt eine hübsches Qt Interface dazu, aber nur zur Steuerung des "Kerns". 2. Weg von Mustern; Einfach nur die Eingabe mit einem Regular-Expression-Muster abzugleichen ist nicht so anspruchsvoll und raubt dem Chatbot irgendwie seine Faszination. Also: Jetzt hat das ganze den selben Ansatz wie FreeHal. Natürlich nicht mit dem Ziel, eine Konkurenz darstellen zu wollen (wenn ich das Programm denn überhaupt jemals soweit schaffe!) Das sind so die zwei maßgeblichen Dinge, die ich jetzt ändern will. Was bis jetzt an dem Projekt auf zwei Beinen steht ist die Satzanalyse: Erkennung von Sätzen anhand von Satzzeichen, Aufteilung in einzelne Wörter und Speicherung in einen Vektor, um damit weiterarbeiten zu können. Was als nächstes kommt ist die Erkennung der Wörter, also welcher Worttyp (Nomen, Prädikat, Adjektiv, Atribut, etc.). Da dies für jede Sprache unterschiedlich ist, kommt ab jetzt auch die Datenbank ins Spiel. Und natürlich poste ich hier nicht aus Zeitvertreib, ich habe nämlich diesbezüglich auch gleich eine Frage: Gibt es eventuell eine Wörterdatenbank, die man kostenfrei verwenden darf? Also in der alle Wörter der deutschen Sprache verzeichnet sind und deren Worttyp? Weil auch wenn das Programm später selbstlernend ist, sollte es ja wenigstens über einen groben Basiswortschatz verfügen, den es schon kann. (Beispiel: Ein Baby lernt am Anfang mühsam jedes Wort und kann kaum Sätze bilden. Das wird im Laufe der Zeit besser und ab 6 Jahren sollte einfacher Satzbau kein Problem mehr sein. Ich würde diese 6 Jahre in meinem Programm gerne überspringen ) Würde mich über Hilfe natürlich wie immer freuen und hoffe es ist mir niemand böse, dass ich diesen Thread wieder aus der Versenkung geholt habe! Liebe Grüße, Jonathan
  3. So, mal wieder etwas weitergeschrieben. Ich habe jetzt meinen kompletten parser umgeschrieben, sodass er mit eienr Datenbank funktionieren sollte. Nur jetzt habe ich damit ein ziemlich großes und blödes Problem: Ich würde gerne eine Disk-basierte Datenbank verwenden, da bietet sich unter QT ja SQLite an. Soweit so gut. Nur ich muss ja auch das Reg-Exp in der Datenbank verstauen und mit dem Befehl "... REGEXP ..." hinterher wieder aus der Datenbank auslesen. Eigentlich unterstützt SQLite ja auch diesen Vergleich, um einen String mit einer Regular Expression aus der Datenbank zu vergleichen, nur dummerweise tut dies nicht die abgespeckte Version, die QT von Hause aus mitbringt. Was mache ich da jetzt? Weil ohne Regexp ist das ganze ja nicht wirklich realisierbar... Wäre nett, wenn mir jemand helfen könnte Liebe Grüße und einen guten Abend, Jonathan
  4. Jup, danke, funktioniert jetzt super. Genau so wie ichs mir die Woche über überlegt habe... Und ansonsten nochmal vielen Dank so überhaupt für die ganze Hilfe und das Testen! Ist wirklich nett Ich werd jetzt wohl erstmal etwas am Inhalt schreiben und dann vielleicht heute oder die kommende Woche mal eine erste "nutzbare" Version hochladen... Liebe Grüße, Jonathan
  5. So, ich habe meine Funktion jetzt vom QString zur QStringList abgeändert und es funktioniert alles soweit ganz gut. Nur jetzt habe ich ein Problem. Meine Funktion soll ja, sofern kein Thema gesetzt war und auch innerhalb der Funktion nicht durch ein [sETTOPIC ...] ein Thema gesetzt wurde, logischerweise kein Thema zurückgeben. Also eine StringList mit nur einem einzigen String, der Antwort des Bots. Nur dann habe ich folgendes Problem: Wie erkenne ich hinterher beim Sortieren von Antwort und Thema, was Antwort und was Thema ist? Angenommen das Thema ist immer das letzte Element der QStringList, dann wäre folgendes Möglich: 1: Mir gehts auch gut. 2: Wie geht es Ihnen denn? 3: Gesundheit Hier würde der PC zwei Strings ausgeben und das thema auf Gesundheit setzen. Wenn nun aber kein Thema gesetzt wird und der PC auf 3 Eingaben antwortet, sähe das ganze so aus: 1: Mir gehts auch gut. 2: Wie geht es Ihnen denn? 3: Ist heute nicht schönes Wetter? Natürlich sollte hier der dritte String auch ausgegeben werden, aber logischerweise würde er auch als Thema gesetzt werden. Ich denke mal, ein leeres Element an die StringList anzuhängen wäre unsinnig, ich weiß nicht mal, ob das überhaupt geht... Auch das ganze mit "Thema: " einzuleiten und hinterher wieder rauszulöschen ist sicher nicht so professionell... Wie löse ich das denn am besten?
  6. Wow, vielen Dank für diese ausführliche Antwort... Das mit der Klasse hatte ich mir auch schon überlegt, aber ich würde gerne ein Funktion machen, die Hinterher andere Leute einfach in Ihr Programm einbauen können... Und es gibt ja nichts einfacheres als einen Funktionsaufruf... Dass ich das ganze mit Parametern löse ist ja ansich auch kein Problem, es funktioniert ja. Nur das blöde ist dann halt, dass eine Funktion nur einen Rückgabewert haben kann... An einen StringList als Workaround dafür habe ich auch schon gedacht, und das werde ich wohl auch dann als nächstes probieren. Vielen Dank wie gesagt, jetzt werde ich erstmal tüfteln, dass es soweit wie es jetzt ist läuft... Vereinfacht wird wie in Mathe hinterher
  7. Dankeschön, dass ist sehr nett Eine Beispieldatei, in welcher das, was ich heute neu dazu zu machen versucht habe zu sehen ist (also das mit SETTOPIC und IFTOPIC), ist in "language/de/gimp.mod"... Bevor ich heute dran weitergemacht habe hat alles wunderbar kompilliert und funktioniert. Das heißt die züfällige Ausgabe bei (möglichkeit1|möglichkeit2|möglichkeit3) und alles andere funktioniert. cina_0-0-3-debug.zip
  8. Hm ich experimentiere jetzt schon seit einer Stunde mit gdb rum... Bin das Programm inzwischen per "step" vom Anfang an Schritt für Schritt durchgegangen und es kam kein brauchbares Ergebnis... Also irgendwie bin ich zu doof zum Debuggen... Was kann ich denn noch probieren? Liebe Grüße, Jonathan P.S.: Ich habe gerade noch rausgefunden, dass der Fehler mit Sicherheit in der Datei "parser.cpp" liegen muss. Ich habe einen Breakpoint in die betreffende Funktion "QString parse()" gesetzt und dieser wurde erreicht. Es wird also die Funktion aufgerufen.
  9. Ok, hier der Backtrace: #0 0xb762a57b in QString::append () from /usr/lib/libQtCore.so.4 #1 0x0804cb1a in mainwindow::sendString () #2 0x08051a9d in mainwindow::qt_metacall () #3 0xb76eaa60 in QMetaObject::activate () from /usr/lib/libQtCore.so.4 #4 0xb76eb7e2 in QMetaObject::activate () from /usr/lib/libQtCore.so.4 #5 0xb7c947a7 in QLineEdit::returnPressed () from /usr/lib/libQtGui.so.4 #6 0xb7c9d406 in QLineEdit::keyPressEvent () from /usr/lib/libQtGui.so.4 #7 0xb794f81e in QWidget::event () from /usr/lib/libQtGui.so.4 #8 0xb7c9b157 in QLineEdit::event () from /usr/lib/libQtGui.so.4 #9 0xb78f78ec in QApplicationPrivate::notify_helper () from /usr/lib/libQtGui.so.4 #10 0xb7900806 in QApplication::notify () from /usr/lib/libQtGui.so.4 #11 0xb76d5e61 in QCoreApplication::notifyInternal () from /usr/lib/libQtCore.so.4 #12 0xb79583de in ?? () from /usr/lib/libQtGui.so.4 #13 0xb798ebb0 in ?? () from /usr/lib/libQtGui.so.4 #14 0xb7990d26 in ?? () from /usr/lib/libQtGui.so.4 #15 0xb7967af5 in QApplication::x11ProcessEvent () from /usr/lib/libQtGui.so.4 #16 0xb79927aa in ?? () from /usr/lib/libQtGui.so.4 #17 0xb72006f8 in g_main_context_dispatch () from /usr/lib/libglib-2.0.so.0 #18 0xb7203da3 in ?? () from /usr/lib/libglib-2.0.so.0 #19 0xb7203f61 in g_main_context_iteration () from /usr/lib/libglib-2.0.so.0 #20 0xb7700478 in QEventDispatcherGlib::processEvents () from /usr/lib/libQtCore.so.4 #21 0xb7991ea5 in ?? () from /usr/lib/libQtGui.so.4 #22 0xb76d452a in QEventLoop::processEvents () from /usr/lib/libQtCore.so.4 #23 0xb76d46ea in QEventLoop::exec () from /usr/lib/libQtCore.so.4 #24 0xb76d6da5 in QCoreApplication::exec () from /usr/lib/libQtCore.so.4 #25 0xb78f7767 in QApplication::exec () from /usr/lib/libQtGui.so.4 #26 0x0804c105 in main () Danke übrigens für den Tipp mit dem srand()
  10. So, nach ja inzwischen einiger Zeit wollte ich mich mal wieder hier melden. Ich hatte die letzte Woche eher wenig Zeit und deswegen habe ich kaum dran weitergearbeitet. Heute hat mich aber mal wieder der Wahn gepackt und ich wollte etwas weitermachen... Die Parser-Funktion hatte ich schon anfang der Woche überarbeitet und komplett neu gemacht (Datei war fast halb so groß hinterher )... Jetzt heute wollte ich mich etwas mit der Erinnerungs-Funktion beschäftigen: Innerhalb der Module kann der Benutzer entweder mit "[sETTOPIC irgendeinthema]" ein Thema setzen oder mit "[iFTOPIC irgendeinthema]" das aktuelle Thema abfragen. Somit kann z.B. folgendes realisiert werden: User: Hallo! Bot: Auch hallo User: Ich habe ein Problem mit GIMP... Bot: Ok, dann schießen Sie mal los! (hier wird das Thema auf "gimp" gesetzt... User: Wie erstelle ich ein neues Bild? (nirgendwo das Wort gimp drin) Bot: Klicken Sie im Hauptfenster von GIMP auf "Datei->Neu". Im letzten Satz ist im "Trigger-Teil" des Modules der Zusatz "[iFTOPIC gimp]"... Da der User vorher GIMP erwähnt hat, wurde auch "gimp" als thema gespeichert mit diesem einfachen trigger: <trigger 1>gimp</trigger> <out>[sETTOPIC gimp]</out> Soweit so gut, ich bin auch fertig, das ganze zu schreiben. Nur dummerweise funktioniert es nicht. Es kompilliert zwar alles, aber sobald ich etwas eingebe und der parser das ganze verarbeiten soll, stürzt das Programm ab (Segmentation fault, sagt zumindest gdb)... Der Fehler liegt also wahrscheinlich in meiner parser.cpp... Da ich selbst zu doof bin zu sehen, was ich falsch gemacht habe, wollte ich fragen, ob einer von euch kurz einen Blick auf die Datei werfen kann... Das wäre sehr, sehr nett Vielen Dank schon Mal im Voraus! Grüße, Jonathan parser.txt
  11. So, wer interesse hat zu sehen, was heute so enstanden ist (ist ja noch nicht viel, aber für einen Tag gehts finde ich ) kann sich das kleine Paket aus dem anhang runterladen und mit make kompillieren. Ihr braucht QT (mindstens irgendwas mit 4 )... Vernünftig kommentiert habe ich hier nur die "parser.cpp", in der bisher die meiste Arbeit steckt. Morgen mache ich dann Variablen in Modulen möglich (die ich zwischenzeitlich rausgenommen habe) und füge einigen Code im parser.cpp zusammen (z.B. die letzten beiden Schleifen passen gut in eine)... Ansonsten werde ich wohl dann erstmal etwas am Inhalt schreiben, damit ich hinterher eine größere Basis zum Testen habe (mit einer Datei ist das immer recht schwierig)... Über Tester freue ich mich natürlich, auch wenn es noch nicht so viel ist. Auch Codeverbesserungen sind immer nützlich Liebe Grüße und eine gute Nacht, Jonathan :schlaf: P.S.: Ich hoffe das mit dem abgekufertem Namen ist nicht so schlimm, ich änder ihn auch wenn ich länger dran weiterarbeite... Nur ich hatte von meinen ganzen Übungsprojekten schon cina, cina 2, cina_ui, etc... cina2009_0-0-1.zip
  12. So, das ganze läuft jetzt erstmal soweit ganz gut Ist ja schonmal was für einen Tag! Aber ein letztes Problem besteht noch mit dem aktuellen Code: Und zwar die deutschen Umlaute... Das Programm ist zwar eigentlich auf Englisch und beinhaltet halt erstmal nur das deutsche "Sprachpaket" (zumindest wird es das mal, ist ja erst eine Datei ), aber die Umlaute brauche ich für das deutsche Paket trotzdem. Das heißt: Tippt der User ä, ü, ö oder ß ein, so werden diese falsch dargestellt. Auch die Ausgabe vom Computer wird nicht richtig dargestellt. Kann ich das irgendwo umstellen von utf-8 auf ISO oder so? Danke schonmal
  13. Aaaah das ist einer dieser Momente wo einem ein Licht aufgeht Es wurde also nur der linke und rechte Tag erkannt und zwischendrin das </out><out> nur als normaler Text... Und weil ich mir das ganze nur in einem HTML-Textbrowser angeguckt habe, wurden die Taggs entfernt... Hm vielen Dank, ich wäre glaube ich erst in ein paar Tagen drauf gekommen
  14. Hm, irgendwie bin ich gerade etwas verwirrt... Also meine RegExpressions stimmen eigentlich, weil vor dem Versuch, mehrere in einer Zeile auszulesen, hat es ja funktioniert Aber vielleicht übersehe ich was? Und den Segmentation fault habe ich gefunden, vielen Dank dafür
  15. Dankeschön, da werde ich jetzt wohl erstmal weiter tüfteln
  16. Dass Pattern Matching ja nicht wirklich in die Richtung von einer KI geht ist denke ich klar... Aber de Facto tut das kein Computerprogramm, auch nicht FreeHal (nichts für ungut)... Auch FreeHal ist letztendlich Pattern Matching, nur auf einem anderen Prinzip aufbauend, welches wesentlich komplexer ist und auch komplexere Reaktionen zulässt. Aber wie ich auf Seite 1 oder 2 schon mal gesagt hatte, ist die wirkliche KI unerreichbar. Denn könnte eine Maschine dass an Inelligenz leisten, was unser Gehirn tut, dann würde das im Umkehrschluss heißen, dass wir berechenbare Maschinen sind. Wobe die These ja was hätte Jetzt ist die Frage, ob ein sehr elegantes Semantisches Netzwerk der KI näher kommt als ein funktionelles Pattern-Matching System. Beide erreichen auf unterschiedliche Weise ihr Ziel, und nach dem, was ich inzwischen alles so getestet habe (FreeHal kann ich ja leider immer noch nicht testen ), führen die Pattern Matching Systeme meiner Meinung nach die BotWelt an. Aber vom mathematischen Prinzip und dem Potential her liegen definitiv Programme wie FreeHAL vorne Ich hoffe das kriegt hier keiner in den falschen Hals und ihr versteht wie ich das meine...:uli Naja, bei all dem philosophieren hier hätte ich fast eine Frage vergessen. Ich bin jetzt mit der Verarbeitung der User-Eingabe fast fertig. Genaugenommen war ich das schon, und ich bin gerade dabei, daran zu Arbeiten, dass mehrere Mögliche Ausgaben festgelegt werden können, aus welchen dann eine Ausgelost wird. Es hat sich außerdem Etwas an der Moduldatei geändert. Der leichteren Verarbeitung wegen müssen Trigger und Output jetzt in der selben Zeile stehen: <trigger 1>Hallo</trigger> <out>Auch Hallo!</out><out>Ebenfalls Hallo!</out> So könnte einer dieser Zeilen aussehen, und da wird auch schon klar, was ich mit den verschiedenen Möglichkeiten meine. Es soll also ausgelost werden, ob auf "Hallo" jetzt "Auch Hallo!" oder "Ebenfalls Hallo!" ausgegeben wird. Dafür muss ich per RegExp vorher beide Outputs aus der Zeile herausfischen. Dabei bekomme ich aber aus irgendeinem Grund einen Segmentation fault... Leider sonst nichts. Hier ist der Code, der für das Auslesen in eine QStringList zuständig ist: int successfuloutput = 0; int outputsuccess = 0; QStringList outputstrings; while((successfuloutput = regularexpressionoutput.indexIn(line, successfuloutput)) != -1) { outputsuccess = 1; outputstrings << regularexpressionoutput.cap(1); successfuloutput += regularexpressionoutput.matchedLength(); } Laut den QT-Docs sollte das so bzw. ähnlich funktionieren... Was da falsch läuft: Ich weiß es nicht. Ich wäre für Infos sehr dankbar Und im Anhang mal wieder die ganze Datei, soweit wie ich jetzt bin. Vielen Dank schon mal für eure Hilfe, Jonathan parser.txt
  17. Sag ich ja, war Stuss meine Frage Ich mache das ganze jetzt mit der Funktion ".cap(x)" von QRegExp, das funktioniert wunderbar. Aber trotzdem danke für die detailierte Ausgabe
  18. Von mir aus könnt ihr ruhig hier bleiben in dem Thema, mich stört das nicht... Wenn es euch nicht stört, dass ich hier immer mal Fragen in den Raum werfe Habe mein Problem übrigens gelöst, also vergesst die Frage oben mal eifnach wieder
  19. Hm Lizenz kommt vielleicht, wenn ich das ganze weiter ausgebaut habe... Bisher ist das ganze ja doch eher noch ein Übungs-Projekt eines Schülers, dass jeder Informatikstudent irgendwie hinbekommen würde Die Funktion ist vorerst einfach nur mal runtergeschrieben; mache ich immer so, ich schreibe immer erstmal alles und vereinfache und verbessere das hinterher dann. Ursprünglich hat die Datei natürlich die Endung .cpp und wird auch Ordnungsgemäß eingebunden etc... Das Problem liegt also nur innerhalb der Funktion. Die Code-Datei ist im Anhang Das Projekt besteht inzwischen aus einigen Dateien, soll ich wirklich alle hochladen? Achso, und treid bedeutet genau das, mir sind die einfallsreichen variablennamen ausgegangen parser.txt
  20. Wow, das ist ziemlich kompliziert... Ich glaube das überlasse ich auch euch, weil so weit bin ich einfach bei weitem noch nicht Aber ich habe dafür hier gerade noch einmal ein Problem mit meinem RexEx-Bot QString treid("\\<trigger.([1-9])\\>.*\\<\\/trigger\\>"); Das ist das RegEx-Muster, um die ID des Tags auszulesen. Die entsprechende QRegExp Anweisung sieht demzufolge so aus: QRegExp rxid(treid, Qt::CaseInsensitive, QRegExp::RegExp2); Ja, das CaseInsensitive kann ich mir sparen, aber da später auch Buchstaben als ID dienen sollen, lasse ich es einfach mal drin. Die tatsächliche Abfrage sieht dann so aus: positiontriggerid = rxid.indexIn(line); In "line" ist die entsprechende Zeile der Textdatei gespeichert. Wenn ich das ganze beim Tag-Inhalt mache (Also alles was zwischen dem öffnendem und schließendem Tag steht), funktioniert alles bestens und ich bekomme meine einzelnen Strings, die ich dann in ein Array speichern kann... Oder ausgeben kann... Oder damit machen kann was ich will Nur hier bei der ID funktioniert das nicht: QString triggerid = line.mid(positiontriggerid,1); QString triggercontent = line.mid(positiontriggercontent,positiontriggercontentlength); parsebase.append("Trigger id: "+triggerid+" ... Trigger content: "+triggercontent); So sieht hinterher das Zerschnibbeln des Textes aus. Nun komme ich zu dem, was nicht funktioniert. Und zwar wird letztendlich der String zum Vektor "parsebase" angeefügt. Nur aus irgendeinem Grund macht die "id" aus dem String ein ganz furchtbares Wirrwarr. Hinterher wird das ganze in einem QT Text-Browser ausgegeben, welcher HTML interpretieren kann. Das ganze sieht dann so aus: Trigger id: guten (morgen|mittag|abend|tag)Trigger id: gute nachtTrigger id: hallo Anstelle von so: Trigger id: 1 ... Trigger content: guten (morgen|mittag|abend|tag) Trigger id: 2 ... usw. Ich vermute, das Teile des "trigger-Tags mit abgeschnitten werden und dann in dem HTML-Bereich irgendwas verwurschteln... Ersetze ich beim Abschneiden der ID die "1" durch eine 0 (also es werden 0 Zeichen abgeschniten, demzufolge bleibt der String auch 0 Zeichen lang) sieht der Ausgabe-String normal aus, nur dass halt dort, wo die ID stehen sollte, einfach nichts steht. Also: Trigger id: ... Trigger content: guten (morgen|mittag|abend|tag) Trigger id: ... usw. Ich bin gerade etwas ratlos, weiß nämlich nicht, woran das liegt :/ Würde mich da über Hilfe sehr freuen Danke im Voraus, Jonathan
  21. Das ist ja schon mal was, danke Mein Plan war eine einzige Funktion (zumindestens vorerst), die die Überprüfung vornimmt. Daran schreibe ich gerade und bin mit dem Grundgerüst dieser fast fertig. Ich fange jetzt an, in der Funktion die Dateien zu verarbeiten und in ein Array einlesen zu lassen... Also so wie oben beschrieben. Ich verstehe natürlich den Vorteil von Datenbanken, vor allem im Bezug auf diese Datenmenge... Ich habe auch schon etwas in die Richtung gedacht, beides zu kombinieren. Sprich ich habe ein Grundmuster ähnlich "Was ist ein <var />?"... Dieses Grundmuster würde sich dann die Datenbank mit sämtlichen Objekten zu Nutze machen, in welcher die Beschreibungen von diesen gespeichert ist. So würde dann folgendes Möglich: User: Was ist ein Baum? Computer: Ein Baum ist eine Pflanze. Das selbe ginge mit bekannten Personen, oder sonstigen Erklärungen. Dadurch würde ich lediglich ein einziges Modul für die jeweilige Frageart (z.B. Frage nach einem Objekt: Was ist ein, Frage nach einer Person: Wer ist) benötigen und könnte trotzdem große Datenmengen problemlos speichern. Aber ob die Kombination von den Dateien und einer Datenbank so gut ist ... Naja mal sehen, jetzt schreibe ich erstmal weiter
  22. Hallo nochmal! Also ich habe jetzt schon angefangen, das User Interface zu machen und bin damit jetzt fertig (zumindest vorerst. Ich habe auch schon das Grundgerüst des Programms erstellt. Also die ganzen Funktionen für die Buttons als Dummies eingefügt bzw. die kleineren Funktionen auch schon fertig. Jetzt gehts ans eingemachte, und zwar die Verarbeitung der Usereingabe. Auch dafür habe ich schon die Grundfunktion, an welche die Usereingabe "QString input" und die Sprache "QString language" übergeben wird. Dabei ist input der Eingegebene Text und language entspricht dem Verzeichnis, in dem die Sprachdateien liegen. Soweit so gut. Nun muss die Funktion alle Module (z.B. welcome.mod) auslesen und den Inhalt verarbeiten. Dabei habe ich mir was überlegt, worüber ich ganz gerne eure Meinung hätte, ob das funktionell oder eher ein "workaround" ist. Also ich habe verschiedene Dateien für verschiedene Bereiche. Die Datei welcome.mod enthält z.B. nur Begrüßungs oder Abschiedsfloskeln. Hier mal ein kleines Beispiel, wie die Dateien aussehen: <trigger 1>guten <var 1>(morgen|mittag|abend|tag)</var></trigger> <trigger 2>gute <var 2>nacht</var></trigger> <trigger 3>hallo</trigger> <out 1>Ebenfalls einen guten <var 1 /></out> <out 2>Schlaf gut!</out> <out 3>Ebenfalls hallo!</out> Dabei sind die Trigger das, worauf die Usereingabe geprüft wird. Die Zahl hinter dem <trigger ???> ist die ID des Suchstrings. Wenn z.B. der Trigger 3 ausgelöst wird, weil der User "Hallo" eingibt, dann wird automatisch der entsprechende Text <out 3>...</out> ausgegeben. Im ersten Auslöser habe ich außerdem eine Variable drin. Das heißt der Teil der Usereingabe wird in eine Variable gepackt, sofern er vorhanden ist. Schreibt der User also "guten mittag", wird automatisch "mittag" in die Variable 1 gespeichert, welche dann im Output wieder verwendet werden kann (s. entsprechendem "<out 1>")... Die in Klammern stehende Auswahl an Möglichkeiten ist abgekupfert von RegEx, worauf hinterher im Übrigen auch die ganze Abfrage basieren soll. Im 3. Auslöser ist eine einfache Variable ohne Möglichkeiten angegeben. Das heißt hier würde alles als Variable akzeptiert werden: "hallo Computer" würde "Computer" speichern, "hallo Programm" würde "Programm" speichern. In meiner Funktion will ich die Dateien auslesen, die Trigger per Array den entsprechenden Ausgaben zuordnen, anschließend per foreach (oder ähnlichem, ich werde vermutlich einen Vektor nehmen müssen) alle Tags entfernen und dann die übrig bleibenden Strings in ein RegEx-Muster umwandeln indem ich Leerzeichen durch Punkte ersetze und Sonderzeichen Ordnungsgemäß escape. Dieses einlesen würde mit allen Dateien passieren. Und jetzt kommt die letzte Stufe bevor die Usereingabe tatsächlich damit geprüft wird: Nämlich ein kleiner Workaround für folgende unglückliche Begebenheit: User: Hallo bist du eigentlich blöd oder so? Computer: Ebenfalls hallo Das ist zwar cool, aber natürlich so nicht vorgesehen. Um solche Missgeschicke zu vermeiden, wird der Vektor mit den Triggern und entsprechenden Outputs nach der Länge der Trigger (nach Zeichenanzahl) geordnet. Es werden also Trigger, die einen ganzen Satz verarbeiten, zuerst überprüft und die ganz kurzen wie "hallo" erst am Schluss. So wäre folgendes Möglich: User: Hallo! Computer: Ebenfalls Hallo! User: hallo was kannst du eigentlich? Computer Ich kann eine ganze Menge! Das war so erstmal die Grundidee. Auf Datenbankbasis würde ich das ganze eher ungern machen, da ich nicht so viel von Datenbanken halte. Daher die Idee mit den Modulen. Wäre über Kritik, Tipps und Ansätze sehr froh, will ja schließlich nicht einen Schritt in die ganz falsche Richtung machen. Bedenkt immer: Ich bin erst 15 und habe kein Informatik studiert Das ganze soll übrigens mit QT und C++ realisiert werden. Liebe Grüße, Jonathan Tobias Schulze: Ich habe das mit FreeHAL jetzt aufgegeben. Das mit dem Linken hat nicht funktioniert (keine Fehlermeldungen?) und auch Parrot ließ sich mit irgendwelchem Zeichenwirrwarr als Fehlermeldung nicht kompilieren. Gibt es eigentlich die Online-Demo noch? (ich hatte da früher immer nur ein weißes Browserfenster mit nichts drin, vielleicht hat sich das ja auch geändert?)
  23. Ich lade mir gerade FreeHAL über Subversion runter und dabei fällt mir auf, dass das ganze ja recht ähnlich meiner Ideen funktioniert... Bzw. in diesem Fall ja deiner/euerer Ideen ihr habts ja erfunden ... Also auch mit einzelnen "Modulen" für Sprichwörter, Mathematik, Vorname, etc... Sehr interessant
  24. Wow, der Admin von FreeHal... Ich fühle mich ja echt geehrt Danke also auf jeden Fall schon Mal für die Mühe Auch die 108-Version (precompiled für ubuntu) funktioniert bei mir leider noch nicht. Es gibt da beim "make" eine Menge fehler. Außerdem scheint mir wohl eine "libparrot.so" zu fehlen, die ja aber eigentlich installiert ist... sonderbar... Für den Fall, dass du mit der Ausgabe was anfangen kannst, poste ich sie hier einfach mal: jonathan@jonathan-desktop:~/Applications/freehal-r108-ubuntu$ cmake . -- The C compiler identification is GNU ... -- Build files have been written to: /home/jonathan/Applications/freehal-r108-ubuntu jonathan@jonathan-desktop:~/Applications/freehal-r108-ubuntu$ make Scanning dependencies of target hal2009 [ 4%] Building C object CMakeFiles/hal2009.dir/hal2009-main.c.o In file included from /home/jonathan/Applications/freehal-r108-ubuntu/hal2009-sql.c:22, from /home/jonathan/Applications/freehal-r108-ubuntu/hal2009.h:131, from /home/jonathan/Applications/freehal-r108-ubuntu/hal2009-main.c:22: /home/jonathan/Applications/freehal-r108-ubuntu/hal2009-sql-sqlite.c:22:21: error: sqlite3.h: No such file or directory In file included from /home/jonathan/Applications/freehal-r108-ubuntu/hal2009-sql.c:22, from /home/jonathan/Applications/freehal-r108-ubuntu/hal2009.h:131, from /home/jonathan/Applications/freehal-r108-ubuntu/hal2009-main.c:22: /home/jonathan/Applications/freehal-r108-ubuntu/hal2009-sql-sqlite.c:24: Fehler: expected »=«, »,«, »;«, »asm« or »__attribute__« before »*« token /home/jonathan/Applications/freehal-r108-ubuntu/hal2009-sql-sqlite.c: In Funktion »callback«: /home/jonathan/Applications/freehal-r108-ubuntu/hal2009-sql-sqlite.c:114: Fehler: »sqlite_connection« nicht deklariert (erste Benutzung in dieser Funktion) /home/jonathan/Applications/freehal-r108-ubuntu/hal2009-sql-sqlite.c:114: Fehler: (Jeder nicht deklarierte Bezeichner wird nur einmal aufgeführt /home/jonathan/Applications/freehal-r108-ubuntu/hal2009-sql-sqlite.c:114: Fehler: für jede Funktion in der er auftritt.) /home/jonathan/Applications/freehal-r108-ubuntu/hal2009-sql-sqlite.c: In Funktion »sql_sqlite_begin«: /home/jonathan/Applications/freehal-r108-ubuntu/hal2009-sql-sqlite.c:180: Fehler: »sqlite_connection« nicht deklariert (erste Benutzung in dieser Funktion) /home/jonathan/Applications/freehal-r108-ubuntu/hal2009-sql-sqlite.c: In Funktion »sql_sqlite_end«: /home/jonathan/Applications/freehal-r108-ubuntu/hal2009-sql-sqlite.c:195: Fehler: »sqlite_connection« nicht deklariert (erste Benutzung in dieser Funktion) /home/jonathan/Applications/freehal-r108-ubuntu/hal2009-sql-sqlite.c: In Funktion »sql_sqlite_add_record«: /home/jonathan/Applications/freehal-r108-ubuntu/hal2009-sql-sqlite.c:212: Fehler: »sqlite_connection« nicht deklariert (erste Benutzung in dieser Funktion) /home/jonathan/Applications/freehal-r108-ubuntu/hal2009-sql-sqlite.c: In Funktion »sql_sqlite_get_records«: /home/jonathan/Applications/freehal-r108-ubuntu/hal2009-sql-sqlite.c:325: Fehler: »sqlite_connection« nicht deklariert (erste Benutzung in dieser Funktion) In file included from /home/jonathan/Applications/freehal-r108-ubuntu/hal2009.h:136, from /home/jonathan/Applications/freehal-r108-ubuntu/hal2009-main.c:22: /home/jonathan/Applications/freehal-r108-ubuntu/hal2009.c: In Funktion »hal2009_add_pro_file«: /home/jonathan/Applications/freehal-r108-ubuntu/hal2009.c:231: Warnung: format »%i« erwartet Typ »int«, aber Argument 2 hat Typ »long int« /home/jonathan/Applications/freehal-r108-ubuntu/hal2009.c:231: Warnung: format »%li« erwartet Typ »long int«, aber Argument 3 hat Typ »int« /home/jonathan/Applications/freehal-r108-ubuntu/hal2009.c:231: Warnung: format »%i« erwartet Typ »int«, aber Argument 4 hat Typ »time_t« /home/jonathan/Applications/freehal-r108-ubuntu/hal2009.c:249: Warnung: format »%i« erwartet Typ »int«, aber Argument 2 hat Typ »long int« /home/jonathan/Applications/freehal-r108-ubuntu/hal2009.c:249: Warnung: format »%li« erwartet Typ »long int«, aber Argument 3 hat Typ »int« /home/jonathan/Applications/freehal-r108-ubuntu/hal2009.c:249: Warnung: format »%i« erwartet Typ »int«, aber Argument 4 hat Typ »time_t« /home/jonathan/Applications/freehal-r108-ubuntu/hal2009.c: In Funktion »ascii«: /home/jonathan/Applications/freehal-r108-ubuntu/hal2009.c:350: Warnung: Zuweisung streicht Qualifizierer von Zeiger-Zieltyp /home/jonathan/Applications/freehal-r108-ubuntu/hal2009.c: In Funktion »hal2009_start_signal_handler«: /home/jonathan/Applications/freehal-r108-ubuntu/hal2009.c:799: Warnung: Initialisierung erzeugt Zeiger von Ganzzahl ohne Typkonvertierung /home/jonathan/Applications/freehal-r108-ubuntu/hal2009.c: In Funktion »hal2009_answer«: /home/jonathan/Applications/freehal-r108-ubuntu/hal2009.c:825: Warnung: Zuweisung von inkompatiblem Zeigertyp /home/jonathan/Applications/freehal-r108-ubuntu/hal2009-main.c: In Funktion »main«: /home/jonathan/Applications/freehal-r108-ubuntu/hal2009-main.c:119: Warnung: Unverträgliche implizite Deklaration der eingebauten Funktion »abort« /home/jonathan/Applications/freehal-r108-ubuntu/hal2009-main.c:125: Warnung: Unverträgliche implizite Deklaration der eingebauten Funktion »exit« /home/jonathan/Applications/freehal-r108-ubuntu/hal2009-main.c: Auf höchster Ebene: /home/jonathan/Applications/freehal-r108-ubuntu/hal2009-main.c:170: Warnung: In Konflikt stehende Typen für »shell« /home/jonathan/Applications/freehal-r108-ubuntu/hal2009-main.c:153: Warnung: Vorherige implizite Deklaration von »shell« war hier /home/jonathan/Applications/freehal-r108-ubuntu/hal2009-main.c: In Funktion »hal2009_handle_signal«: /home/jonathan/Applications/freehal-r108-ubuntu/hal2009-main.c:219: Warnung: Übergabe des Arguments 1 von »free« entfernt Kennzeichner von Zeiger-Ziel-Typ /home/jonathan/Applications/freehal-r108-ubuntu/hal2009-main.c:226: Warnung: Vergleich zwischen Zeiger und Ganzzahl /home/jonathan/Applications/freehal-r108-ubuntu/hal2009-main.c:227: Warnung: Unverträgliche implizite Deklaration der eingebauten Funktion »exit« make[2]: *** [CMakeFiles/hal2009.dir/hal2009-main.c.o] Fehler 1 make[1]: *** [CMakeFiles/hal2009.dir/all] Fehler 2 make: *** [all] Fehler 2 Und als ich versucht habe, das schon vorkompillierte Programm auszuführen, kam dann die Fehlermeldung: jonathan@jonathan-desktop:~/Applications/freehal-r108-ubuntu$ ./hal2009 ./hal2009: error while loading shared libraries: libparrot.so.0.9.0: cannot open shared object file: No such file or directory Ich habe extra nachgeguckt, laut "apt-get install libparrot" bzw. "apt-get install parrot" ist alles auf dem neusten stand... Hm... Vielleicht hast Du ja noch eine Idee, was ich probieren könnte
  25. Jup, richtig, dass ist mir sehr schnell bei meinem ersten Projekt aufgefallen. Daher habe ich es dann zum "Rumprobier-Projekt" erklärt ... Gerade deswegen bin ich hier schon die ganze Zeit eifrig am Ideen posten, natürlich ist das längst nicht alles, aber mit denen bisher hier verewigten lässt sich ja schon Mal ein Anfang machen. Ich fänd's daher auch nett, wenn ihr noch kurz was zu diesen Sagen könntet, was ihr daran ändern würdet, natürlich sind auch eigene Idee willkommen! Ich will das ganze hinterher ja auch nicht vermarkten Es soll halt ein Projekt werden, an dem ich (und bzw. die Leute, die daran mitmachen wollen) etwas lernen (Logik hiner einer Programmiersprache, komplexe Programme über 4 oder 5 Dateien hinaus, etc.)... Natürlich ist das bisher hier geschriebene auch sehr hilfreich und motivierend, aber wenn ich das richtig sehe kam bisher auch noch nichts zu den gemachten Ideen von mir. Wie gesagt, eure Meinung darüber wäre super Liebe Grüße und wie immer danke schon Mal, Jonathan

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...