Forum moved to if-forum.org
Autor Nachricht
<  freie rede
Nik
BeitragVerfasst am: Do, 13 Apr 2006 - 13:46  Antworten mit Zitat
Neuling
Neuling


Anmeldungsdatum: 13.03.2006
Beiträge: 8

hi,

folgendes will ich realisieren:

>wirt, wie gehts denn so?

"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."

----

>stadtführer, wo finde ich die schenke?

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.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Crowley
BeitragVerfasst am: Di, 18 Apr 2006 - 11:02  Antworten mit Zitat
Wasserträger
Wasserträger


Anmeldungsdatum: 15.12.2005
Beiträge: 32
Wohnort: Düsseldorf

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.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Martin
BeitragVerfasst am: Di, 18 Apr 2006 - 11:38  Antworten mit Zitat
Experte
Experte


Anmeldungsdatum: 25.08.2002
Beiträge: 677
Wohnort: München

Crowley hat folgendes geschrieben:
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.

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.)
_________________
Every silver lining has a cloud.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Nik
BeitragVerfasst am: Di, 18 Apr 2006 - 14:48  Antworten mit Zitat
Neuling
Neuling


Anmeldungsdatum: 13.03.2006
Beiträge: 8

@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?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Martin
BeitragVerfasst am: Di, 18 Apr 2006 - 15:45  Antworten mit Zitat
Experte
Experte


Anmeldungsdatum: 25.08.2002
Beiträge: 677
Wohnort: München

Nik hat folgendes geschrieben:
okay. aber "lies zerknittertes Papierpapier" geht ja auch, gell? ;)

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 hat folgendes geschrieben:
also soweit ich das sehe, GEHT DAS in tag, weil man strings wenigstens zeichenweise bearbeiten kann, also sei string1.x string2.x.

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:

Code:

Flagge Thema 0
Flagge Frage 0

Bef ansprechen
Name 'ansprechen'
Verb 'wie.wo.was'
Ausf
    Text 'Keine Ahnung.'
EndeAusf


Aktion VerbParser
Ausf
    lokal i

  wenn /(Akteur = 0) dann
    Lösche Thema
    Lösche Frage

    solange (Wortlänge)
        ! Themen
        wenn (Wort = 'schenke') sei Thema 1
        wenn (Wort = 'kneipe') sei Thema 1
        wenn (Wort = 'oger') sei Thema 2
        wenn (Wort = 'monster') sei Thema 2

        ! Fragewörter
        wenn (Wort = 'wo') sei Frage 1
        wenn (Wort = 'wann') sei Frage 2
        wenn (Wort = 'warum') sei Frage 3
        naechsteswort
    ende

    wenn (Frage) dann
        sei aVerb 'wie.wo.was'
    sonst
        sei aVerb 0
        ErstesWort
    Ende
  Ende
EndeAusf

Obj Wirt
Name 'Wirt' m
Subst 'wirt' m, 'mann' m
Ort Leere
Attr Person
BefAusf
    (ansprechen)
    jenach Thema
    (1) jenach Frage
        (1) stop '"Die Schenke ist unten im Dorf."'
        (2) stop '"Ab sechs Uhr abends."'
        (3) stop '"Einen guten Grund findest du schon."'
   Ende

    (2) jenach Frage
        (1) stop '"Der Oger hockt in meinem Keller."'
        (2) stop '"Die ganze Zeit, seit drei Tagen schon."'
        (3) stop '"Warum bloß? Ich weiß es nicht."'
   Ende

    (sonst) Text '"Keine Ahnung."'
    Ende
EndeAusf

Nicht unbedingt sehr übersichtlich, aber es funktioniert. Man könnte natürlich für jedes Fragewort einen eigenen Befehl definieren.
_________________
Every silver lining has a cloud.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Nik
BeitragVerfasst am: Di, 2 Mai 2006 - 14:50  Antworten mit Zitat
Neuling
Neuling


Anmeldungsdatum: 13.03.2006
Beiträge: 8

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 :)
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Alle Zeiten sind GMT + 1 Stunde (MEZ)

Nächstes Thema anzeigen
Vorheriges Thema anzeigen
Seite 1 von 1
if-de :: Forum Foren-Übersicht  >  T.A.G.

Neues Thema eröffnen   Neue Antwort erstellen


 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.



Kontakt: Administrator

Powered by phpBB and NoseBleed v1.05