Geschrieben um 14:46 am 13.04.2006 | Zitat | Editieren | Löschen | |
Mitglied Baby Gumby Beiträge: 3 | hi, folgendes will ich realisieren:
"Es würde mir wohl gut gehen", antwortet der Wirt, "Wenn in meinem Weinkeller nicht dieser fiese Oger hocken und meinen Weinvorrat vernichten würde."
Der Stadtführer macht ein nachdenkliches Gesicht. "Oh ja, dazu folgst Du der Straße einfach nach Süden bis zum Marktplatz, da findest Du die Marktschenke, nicht zu übersehen", meint er schließlich. Ich hatte einen todsicheren Plan wie das funktionieren könnte und wollte einfach mit verbParser den Satz in einen String schreiben wenn /(akteur = 0). im befAusf-Block sähe das dann so aus: befAusf (angesprochen) sei checkString 'wo schenke' checkSatz !Aktion, die prüft, ob die worte im spieler-gerede vorkommt wenn (worteKommenVor = 1) text 'Oh ja, gehe einfach...' endeAusf im verbParser frage ich dann einfach die worte ab und schreibe sie in einen string. allerdings funktioniert erstesWort sei einString wort nicht, genausowenig erstesWort sei einString '[wort]' warum nicht? ist 'wort' kein string im eigentlichen sinne? wenn ich sowas wie text '[wort.1]' probiere, wird der ascii-code aber ausgegeben. eine andere möglichkeit, die in frage kommt wäre vielleicht zitat. das ist ja ein hilfsobjekt so wie zahl, glaube ich. oder? wie funktioniert das? hat jemand eine idee, wie man das realisieren kann? es gibt ja schon ein paar undokumentierte befehle wie BSneu, also wenn da jemandem was einfällt immer her damit... nik. |
Geschrieben um 12:02 am 18.04.2006 | Zitat | Editieren | Löschen | |
Mitglied Student Gumby Beiträge: 24 | Tut mir leid Dich zu enttäuschen, aber wenn Du so ein System erfindest, das den Computer wie einen Menschen den Sinn eines Satzes und frei antworten lässt, dann hast Du praktisch einen Heiligen Gral der KI gefunden. Das ist nämlich verteufelt schwierig, und daran haben sich schon Generationen von Informatikern versucht. Als Anregung: Schau Dir mal die Webseiten für den Loebner-Preis an. Da wird nämlich ein hübscher Preis ausgesetzt für den, der genau das schafft. Siehe hier: http://www.loebner.net/Prizef/loebner-prize.html Fazit: Du kannst nur eine Annäherung an Dein Vorhaben realisieren, aber komplett freie Rede wird unmachbar sein. |
Geschrieben um 12:38 am 18.04.2006 | Zitat | Editieren | Löschen | |
Mitglied Prof Gumby Beiträge: 634 | Crowley:
Naja, ich glaube Nik meinte eher ein System, wie is in diesem (englischen) Artikel über Konversationssysteme unter "Cheap AI" beschrieben ist. So würden aus dem Satz "Wo liegt die Schenke" nur die "wichtigen" Schlüsselwörter "wo" und "schenke" herausgefiltert. Die Idee scheint nicht schlecht zu sein: Indem ich mich nur auf Schlüsselwörter beschränke und nicht versuche, die genaue Grammatik des Satzes zu verstehen, kann ich dem Spieler eine natürliche Spracherkennung vorgaukeln: "Wo is die Schenke" und "Wo genau liegt denn, bitteschön, in diesem Kaff die Schenke" werden beide ohne großen Programmieraufwand als derselbe Satz erkannt. Ich schließe mich allerdings Michael Roberts' Meinung an: Diese Systeme sind leicht zu durchschauen, und wahrscheinlich tippt ein Spieler, wenn er erst einmal hinter das System gestiegen ist, nur noch "wo schenke" oder "schenke", und damit habe ich das System effektiv auf ein "frage stadtführer nach schenke" reduziert. Außerdem ist das Analysieren der Schlüsselwörter ohne Zusammenhang nicht immer Erfolg versprechend: "Wo schenke ich meiner Verlobten am besten den Ring" ist für den Parser auch nur eine Frage nach der Schenke. Durch die Fülle an Möglichkeiten, von denen aber letzlich nur wenige verstanden werden, ist für den Spieler auch nicht immer ersichtlich, was er denn nun sagen kann und was nicht. Leider hat das Problem noch eine technische Seite: Mit T.A.G. ist es nicht sehr leicht zu realisieren. Die Möglichkeiten, Verben und Objekte gesondert zu parsen, sind sehr spartanisch und nachträglich eingefügt worden. Das merkt man an solchen Kleinigkeiten, wie der Zuweisung von 'Wort'. Man kann Strings nur wörtliche Strings in Hochkommas zuweisen, nicht aber andere Stringvariablen. Das String-Feature war hauptsächlich für die automatisierte Ausgabe gedacht, und selbst da funktioniert [Wort] nicht richtig. Die Anweisungen ErstesWort und NächstesWort sind nur in den Parserroutinen sinnvoll anwendbar. Die Idee, eine Aktion zu schreiben, die das Vorkommen eines Worts überprüft, ist gut. Die Hürde, dass man in T.A.G. keine Variablen übergeben kann, hast du gut gelöst, denke ich. Den Satz kann man im Verbparser nicht kopieren. Man kann auch keine Strings als Feldeinträge verwenden. Ich kann mir allerdings eine Lösung vorstellen, bei der du im Verbparser bereits auf gewisse Schlüsselwörter scannst und dann das Ergebnis in einer Flagge festhältst, etwa 1=Schenke, 2=Oger usw. Das ist allerdings sehr mühsam und nicht gerade übersichtlich. (In Inform hingegen könnte man ein solches System, zumindest ein primitives, relativ gut implementieren, denke ich.) |
Geschrieben um 15:48 am 18.04.2006 | Zitat | Editieren | Löschen | |
Mitglied Baby Gumby Beiträge: 3 | @crowley: du hast dich glaube ich zu sehr von der überschrift (und deinem kreuzzug gegen "adoleszenter geek will computerspiel machen"-phantasien) beeinflussen lassen. ich will lediglich bestimmte worte auf ihr vorkommen prüfen und abstrakte "objekte" wie "wie gehts" prüfen, ohne für alles ne deko erstellen zu müssen. ich will keine KI, ich will einen automaten... @martin: erstmal danke für deine einschätzung, martin. klar könnte man sowas auf "Wo schenke" reduzieren, aber darum geht es mir auch nicht. ich stelle nur langsam fest, dass mein spiel sehr dialoglastig ist und viele aufgaben einfach interaktionsrätsel sind (oder darauf fußen). daher muss es dem spieler möglich sein, differenzierter zu bestimmten dingen zu fragen. wenn ich wissen will, warum der Böse Bernd die Alte Jungfer Jenniwer umgebracht hat und auf mein "frage wirt nach Bernd" ein: "Bernd ist ein wirklich verkommenes Subjekt. Man sagt, er habe die Alte Jungfer Jenniwer des Nachts gemeuchelt." erhalte, ist das nicht sehr befriedigend. wenn sich ein spieler den spaß an der illusion eines "intelligenten" npc nehmen lassen will, kann er ja "wo schenke" eingeben. er kann sich auch die komplettlösung durchlesen und dann die eingaben am besten per copy&paste machen. wir spielen _text_adventures, gehört da nicht ein bisschen phantasie zu? (nur freaks spielen ifs jede simulation hat natürlich ihre grenzen, aber mir gehts nicht darum, etwas zu simulieren, was gar nicht da ist. es hat halt praktische gründe. und wenn "was glaubst du, wo sollte ich ihr den ring schenken?" den stadtführer veranlasst, mir den weg zur schenke(n) zu erklären... okay. aber "lies zerknittertes Papierpapier" geht ja auch, gell? du hast natürlich recht, dass der spieler nicht immer weiß, was er wie fragen kann, aber ich denke wenn man wert auf eine in sich abgeschlossene terminologie legt und dem spieler dies mitteilt, gehts. ich hab mir (in meiner unendlichen naivität) überlegt, schlüsselwörter einfach farbig hervorzuheben, wie links auf html-seiten. hauptsächlich will ich objekte in kombination mit fragewörtern prüfen, also wer, was wann, weshalb etc. philosophische gespräche soll man hingegen nicht mit tam führen können, und wer beistand sucht, kann sich auch getrost an eliza wenden. multiple choice ist für mich auch keine... choice (muahaha). ist mir zu digital. wenn dir hanswurst von oma friedas merkwürdigen vorlieben erzählt, DANN kannst du sie darauf ansprechen... uswusf. ich mag "rate das gesprächsthema" rätsel irgendwie also soweit ich das sehe, GEHT DAS in tag, weil man strings wenigstens zeichenweise bearbeiten kann, also sei string1.x string2.x. dem programmierer in mir sträuben sich da zwar die nackenhaare, aber es geht grinst. vor inform habe ich komischerweise einen heidenrespekt. ich hasse libraries. deswegen habe ich mich sehr schnell wieder von c++ abgewendet, es war mir einfach zu extrem. das schöne an tag ist imho, dass es zwar nicht so extrem mächtig ist, aber man weiß, welche tools man hat. und wenn man nicht den passenden schraubenschlüssel im köfferchen hat, gehts halt nicht... oder man nimmt nen hammer lacht aber eine frage wäre da noch: ich kann strings zwar zeichenweise zuweisen, aber ist die länge von strings dynamisch? |
Geschrieben um 16:45 am 18.04.2006 | Zitat | Editieren | Löschen | |
Mitglied Prof Gumby Beiträge: 634 | Nik:
Klar. Aber "Papierpapier" ist keine vernünftige Bezeichnung für ein anderes Objekt, das mißverstanden werden könnte. (Es gibt aber gewiss auch dafür Beispiele.) Nik:
Hmmm. Das ginge, aber die nachfolgende Analyse wäre schon sehr aufwendig. Die besten Chancen hast du gewiss, wenn du im Verbparser bereits alle möglichen Wörter checkst:
Nicht unbedingt sehr übersichtlich, aber es funktioniert. Man könnte natürlich für jedes Fragewort einen eigenen Befehl definieren. |
Geschrieben um 15:50 am 02.05.2006 | Zitat | Editieren | Löschen | |
Mitglied Baby Gumby Beiträge: 3 | DAS nenn ich Kundenservice. Da dürfen sich Mickeysoft und Konsorten mal eine Scheibe von abschneiden. Vielen Dank, Martin. (Hast Du eigentlich ein riesiges Verzeichnis auf deiner hd, in der Du vorsorglich schonmal code für alle Eventualitäten bereitliegen hast, oder hast Du diesen beispielcode tatsächlich für mein kleines Problem geschrieben? Ich fühle mich geehrt. Wenn Du noch Zeit hättest, ich bräuchte noch ein flexibles Wettersystem und eine Physikengine, die alle Objekte mit dem attribut brennbar nach und nach in Brand setzt... War ein Witz :~) Ich höre grundsätzlich nicht auf das, was mir andere raten, ich muss erst einmal selbst auf die S**** fallen. Also so hab ichs noch auf eigene Faust ein wenig probiert, war aber sehr frustrierend. Bevor ich in meinem jungen Alter schon ergraue, weil ich mich unnötig gräme, nehme ich deine Lösung jetzt gerne an |