if-de :: Forum Foren-Übersicht
Autor Nachricht
<  "Frage die Frau nach ..." mit Punkt beenden
Mario Donick
BeitragVerfasst am: So, 15 Apr 2012 - 16:10  Antworten mit Zitat
Wasserträger
Wasserträger


Anmeldungsdatum: 14.02.2009
Beiträge: 49
Wohnort: Rostock

Ich gebe gern ganze Sätze mit korrekter Groß- und Kleinschreibung sowie Interpunktion ein.

Zum Beispiel:

Frage die alte Frau nach meiner Schwester.


Zur Zeit -- mit folgendem Code -- kann ich diesen Satz nur ohne schließendes Satzzeichen eintippen:

Code:

Understand "Ann/Schwester[f]" or "meine/meiner Schwester" or "junge/junger Frau" as "[TalkTopicAnn]".

Instead of asking CharWhitemoore about "[TalkTopicAnn]":
   say "Ann ist Ihre Schwester. [one of]Ich erinnere mich gut daran, wie sie als Kind Blätter von dem Baum im Schulhof abgerissen hat.[or]Sie hat als Kind viel Unsinn angestellt.[at random]";


Wie kann man dafür sorgen, dass man bei der Eingabe Fragen nach einem Thema mit einem Punkt beenden kann?

Eigentlich müsste der Punkt am Ende ja nur ignoriert werden, um das eigentliche Thema zu erhalten. In "normalen" Sprachen könnte man das mit irgendwelchen String-Befehlen machen; das geht in Inform sicher auch, aber gibt es da nicht einen einfacheren Weg?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden MSN Messenger
Martin
BeitragVerfasst am: So, 15 Apr 2012 - 18:11  Antworten mit Zitat
Experte
Experte


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

Okay, Schutzkleidung an: Wenn man in der Datei German.i7x nach "PrepositionChain" sucht, findet man als erstes in Zeile 6170 folgenden Code, der ein Topic-Token analysiert:

Code:

            do o = NextWordStopped();
            until (o == -1 || PrepositionChain(o, token_n+1) ~= -1);

Wenn man den Code ändert - Sicherheitskopie! - in:
Code:

            do o = NextWordStopped();
            until (o == -1 || o == THEN1__WD ||
                PrepositionChain(o, token_n+1) ~= -1);

und die geänderte Extension installiert, wird ein Token nicht nur mit dem Satzdende (-1) oder mit einer Präposition abgeschlossen, sondern auch mit einem Punkt. Der Punkt trennt in Inform Anweisungen, so dass "jump. sing" interpretiert wird als "jump then sing", daher der Name THEN1_WD.

Die Änderung sollte wahrscheinlich in PrepositionChain gemacht werden, aber das habe ich auf die Schnelle nicht gefunden. Vielleicht kann sich ja einer der GerX-Kuratoren das Problems annehmen und die Sache, wenn sie sich in Tests bewährt, ordentlich einpflegen.

(Das Chain in PrepositionChain ezieht sich nicht auf eine Kette von Präpositionen in der Eingabe, sondern im Satzmuster, das in I6 mehrere alternative Präpositionen, etwa "in"/"auf"/"ueber", zusammenziehen kann.)

Edit: Wie das so ist mit Schellschüssen - es funktioniert leider nicht zuverlässig. Man kann zwar jetzt den Satz mit einem Punkt aufhören lassen, und nachfolgende Sätze werden auch richtig analysiert, aber wenn nach dem Punkt ein weiterer Satz folgt, etwa "frage Mrs Whitemoore nach Anne. warte", dann wird der Topic wieder nicht richtig erkannt.

Edit II: Ich habe es gerade einmal in der Englischen Version probiert, da geht es auch nicht. Das Topic nimmt den Punkt und eventuell nachfolgende Sätze einfach mit. Das Problem mit Topics, die nur bis zu einem Punkt untersucht werden, ist, dass Inform nicht mit mehreren Topics umgehen kann. Wenn ein neuer Satz in derselben Zeile anfängt, wird die Information über das Topic, die in den globalen Variablen consult_from und consult_words liegen und die I7 als Snippet betrachtet, verloren. Ein Snippet ist ein Teil der Eingabe, abgelegt als Kombination aus Index des Anfangsworts und Anzahl der Wörter. Wahrscheinlich kann immer nur ein Snippet aktiv sein. Wenn ich mir beim Fragen das [topic understood] ausgeben lasse, kommt es bei Sätzen wie "Frage Anna nach Charles. Frage Anna nach David" jedenfalls zu einem schön illustrierten Runtime-Error.

Verkettete Sätze werden etwas eigenartig behandelt, es gibt da held_back_modes und viele undurchsichtige globale Variablen. Das fasse ich nicht an.

Wahrscheinlich ist es am besten, wenn man einen Punkt am Ende der Eingabe einfach abschneidet und den Code ansonsten lässt, wie er ist. Mein vermeintlicher Fix oben macht die Sache sehr instabil.
_________________
Every silver lining has a cloud.


Zuletzt bearbeitet von Martin am So, 15 Apr 2012 - 19:07, insgesamt einmal bearbeitet
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
proc
BeitragVerfasst am: So, 15 Apr 2012 - 18:50  Antworten mit Zitat
Experte
Experte


Anmeldungsdatum: 08.12.2009
Beiträge: 881
Wohnort: Berlin

Mario Donick hat folgendes geschrieben:
Frage die alte Frau nach meiner Schwester.

Interessantes Phänomen: "rules on" offeriert den Schlusspunkt als eigenes Wort, auch nach "translating a command into Informese". Hier ein mögliches Workaround, das alle "punctuated words" im player's command ignoriert:

Code:
Section - Ignore Punctuation Rule

After translating a command into Informese (this is the ignore punctuation rule):
   let cmd be indexed text;
   now cmd is the player's command;
   say "> »[cmd]« => "; [debug]
   let cmd-cleaned be indexed text;
   repeat with N running from 1 to the number of words in cmd:
      now cmd-cleaned is "[cmd-cleaned] [word number N in cmd]";
   change the text of the player's command to cmd-cleaned;
   say "»[player's command]«[line break]". [debug]


test me with "Frage die alte Frau nach meiner Schwester. / Frag die 'alte Frau', nach meiner Schwester. !?!".

Das Geheimnis liegt darin im "word number N", das Satzzeichen (punctuated word) ignoriert.

Bei GerX-Versionen vor 3/110621 müssen die commands mit "After reading a command" abgefangen werden, vgl. http://forum.ifzentrale.de/viewtopic.php?p=6399#6399

Bei den Topic-Definitionen genügt übrigens "alt frau", "mein schwester", "jung frau", die Endungen werden ohnehin rausinformized.
_________________
interactive fiction database
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
ChristianB
BeitragVerfasst am: So, 15 Apr 2012 - 21:06  Antworten mit Zitat
Experte
Experte


Anmeldungsdatum: 05.05.2004
Beiträge: 633
Wohnort: Hamburg

proc hat folgendes geschrieben:
Hier ein mögliches Workaround, das alle "punctuated words" im player's command ignoriert: ...

Das funktioniert leider auch nur eingeschränkt und kämpft mit einem ähnlichen Problem wie Martins Experiment: Wenn nach dem Punkt ein weiteres Kommando folgt, wird es nicht verstanden:

Mein Testspiel hat folgendes geschrieben:
>u auto. u dich.
> »u auto. u dich.« => »u auto u dich«
Ich habe nur Folgendes verstanden: das Auto betrachten.

Hm. Einfach alle Punkte aus der Spielereingabe zu entfernen geht also nicht. Man muss vor dem Löschen des Punktes prüfen, ob danach noch etwas kommt.
_________________
Worichtung willst du ingehen?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
proc
BeitragVerfasst am: So, 15 Apr 2012 - 23:33  Antworten mit Zitat
Experte
Experte


Anmeldungsdatum: 08.12.2009
Beiträge: 881
Wohnort: Berlin

ChristianB hat folgendes geschrieben:
Einfach alle Punkte aus der Spielereingabe zu entfernen geht also nicht. Man muss vor dem Löschen des Punktes prüfen, ob danach noch etwas kommt.

Ist mir durch einen Parallelthread auch aufgefallen, wobei ich mehrere commands durch Kommata, Punkte, wasauchimmer wie "Nimm Schwert! Geh Polen, sprich mit René?" nicht ganz nachvollziehen kann. Es sollte jedoch möglich sein, störende Satzzeichen am Ende zu eliminieren, zumal sie den Spielablauf beeinträchtigen. Warum werden die offenkundigen Störenfriede in Informese nicht einfach rausgehauen?
_________________
interactive fiction database
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
ChristianB
BeitragVerfasst am: So, 15 Apr 2012 - 23:54  Antworten mit Zitat
Experte
Experte


Anmeldungsdatum: 05.05.2004
Beiträge: 633
Wohnort: Hamburg

proc hat folgendes geschrieben:
Warum werden die offenkundigen Störenfriede in Informese nicht einfach rausgehauen?

Dafür gibt's ja die in I7 eingebaute Erweiterung "Puctuation Removal" von Emily Short, wie ich soeben mit großem Erstaunen festgestellt habe -- die ganze Zeit vor Augen, und doch nie gesehen. Sie beinhaltet eigentlich alles, was man so braucht, so z.B. auch eine Anweisung zum Umwandeln von Titeln wie "Mr." und "Dr.".

resolve punctuated titles

In der Doku von "Punctuation Removal" wird aber auch darauf hingewiesen, dass man beim Entfernen von Punkten aufpassen sollte, da mehrere Kommandos in einer Zeile nicht mehr funktionieren.

Ich benutzte diese Möglichkeit sehr gern, besonders, wenn ich Spielabschnitte schon kenne, und zum Testen. ("n.o.w.s.o.o.o.o.o.s.s.s.s.w.w.w.w.hoch", das spart Zeit.)
_________________
Worichtung willst du ingehen?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
proc
BeitragVerfasst am: Mo, 16 Apr 2012 - 0:08  Antworten mit Zitat
Experte
Experte


Anmeldungsdatum: 08.12.2009
Beiträge: 881
Wohnort: Berlin

ChristianB hat folgendes geschrieben:
Dafür gibt's ja die in I7 eingebaute Erweiterung "Puctuation Removal" von Emily Short, wie ich soeben mit großem Erstaunen festgestellt habe

Hab mir grad mal die Extension angeschaut: Die besteht aus I6-Schleifen und killt alles im command, da schenkt sich nicht viel zu meinem I7-Versuch. Wäre es nicht sinnvoll, zu einem Informese-Status zu gelangen, indem der nun völlig unnütze punctuation-Kram *hinten* einfach rausgekillt wird? Offenkundig wird ein Schlusspunkt im Parser missinterpretiert und stört. GerX ist ja schon besser als Inform selbst, diese Störung auszumerzen würde noch ein I-Tüpfelchen draufquetschen. Im Zweifelsfall aus Kompatibilitätsgründen als Zusatzfunktion mit einem "use punctuation apocalypse" oder sowas :o)
_________________
interactive fiction database
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
ChristianB
BeitragVerfasst am: Mo, 16 Apr 2012 - 0:21  Antworten mit Zitat
Experte
Experte


Anmeldungsdatum: 05.05.2004
Beiträge: 633
Wohnort: Hamburg

Die Punkte am Satzende stören nur im Zusammenhang mit Topics. Ansonsten funktionieren Punkte ohne Probleme.

Zitat:
>u auto. u dich.
Das Auto ist leer.

Gutaussehend wie immer.


Man müsste im Falle eines Topics den Punkt am Satzende entfernen. Aber dafür ist es in LTI noch zu früh. Wo man das machen kann, weiß ich noch nicht. Vielleicht in Parse Token Letter A.
_________________
Worichtung willst du ingehen?


Zuletzt bearbeitet von ChristianB am Mo, 16 Apr 2012 - 0:25, insgesamt einmal bearbeitet
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
proc
BeitragVerfasst am: Mo, 16 Apr 2012 - 0:23  Antworten mit Zitat
Experte
Experte


Anmeldungsdatum: 08.12.2009
Beiträge: 881
Wohnort: Berlin

Martin hat folgendes geschrieben:
Wahrscheinlich ist es am besten, wenn man einen Punkt am Ende der Eingabe einfach abschneidet und den Code ansonsten lässt, wie er ist. Mein vermeintlicher Fix oben macht die Sache sehr instabil.

Ich glaube, gerade bei diesem relativ banalen Problem sollte man auch so denken: der LTI (LanguageToInformese) muss einfach nur sinnfreie Endzeichen abtrennen, da hinter dem Ende kein neues Kommando mehr zu erwarten ist. Das kann doch nicht so schwer sein. Leider verhindert I7 Ersetzungen von Punkten und anderen Satzzeichen, da müsste dann tiefer angesetzt werden. Ich hielte es jedenfalls für eine gute Idee, sie vorab ins Nirwana zu schicken da sie außer Fehlfunktionen keine Wirkung zeitigen.
_________________
interactive fiction database
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
proc
BeitragVerfasst am: Mo, 16 Apr 2012 - 0:32  Antworten mit Zitat
Experte
Experte


Anmeldungsdatum: 08.12.2009
Beiträge: 881
Wohnort: Berlin

ChristianB hat folgendes geschrieben:
Man müsste im Falle eines Topics den Punkt am Satzende entfernen. Aber dafür ist es in LTI noch zu früh. Wo man das machen kann, weiß ich noch nicht. Vielleicht in Parse Token Letter A.

Ach war das damals in den 80ern noch schön mit Fortran, Pascal, Basic und Assembler! Ich dachte immer, LTI reicht die Ergebnisse nach oben durch und ist wie ein Buffer zu verstehen, den man ordentlich umbuffern kann...
_________________
interactive fiction database
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
ChristianB
BeitragVerfasst am: Mo, 16 Apr 2012 - 0:36  Antworten mit Zitat
Experte
Experte


Anmeldungsdatum: 05.05.2004
Beiträge: 633
Wohnort: Hamburg

proc hat folgendes geschrieben:
LTI reicht die Ergebnisse nach oben durch und ist wie ein Buffer zu verstehen, den man ordentlich umbuffern kann...

Kaputtbuffern kann man da aber auch so einiges. Ich probier gerade was, noch funktioniert es aber nicht.
_________________
Worichtung willst du ingehen?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
proc
BeitragVerfasst am: Mo, 16 Apr 2012 - 0:51  Antworten mit Zitat
Experte
Experte


Anmeldungsdatum: 08.12.2009
Beiträge: 881
Wohnort: Berlin

ChristianB hat folgendes geschrieben:
Kaputtbuffern kann man da aber auch so einiges. Ich probier gerade was, noch funktioniert es aber nicht.

Mach doch eine kryptische Use-Option dazwischen, dann kann von der Abwärtskompatibilität her nix schiefgehen. Mein Favorit ist "Use punctuation apocalypse now"...
_________________
interactive fiction database
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
ChristianB
BeitragVerfasst am: Mo, 16 Apr 2012 - 1:15  Antworten mit Zitat
Experte
Experte


Anmeldungsdatum: 05.05.2004
Beiträge: 633
Wohnort: Hamburg

So. Das letzte Zeichen einer Eingabe kann jetzt gekillt werden, wenn es ein Satzzeichen ist --- und zwar mit der Option

Use punctuation apocalypse now.

Der Code dafür befindet sich in Abschnitt (vi) von LTI; in deform war dort der Einhänger HandlePunctuation(), jetzt befindet sich dort die Apocalypse. Und Mario kann vollständige Sätze schreiben.

Zitat:
>Frage die Frau nach Ann.
Ann ist Ihre Schwester. Ich erinnere mich gut daran, wie sie als Kind Blätter von dem Baum im Schulhof abgerissen hat.


Die neue Vorabversion liegt hier:

http://ifiction.pageturner.de/inform7/test/German_3-120416--TEST1.zip

Dokumentation folgt.
_________________
Worichtung willst du ingehen?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
proc
BeitragVerfasst am: Mo, 16 Apr 2012 - 1:30  Antworten mit Zitat
Experte
Experte


Anmeldungsdatum: 08.12.2009
Beiträge: 881
Wohnort: Berlin

ChristianB hat folgendes geschrieben:
Use punctuation apocalypse now.

Wow, habs grad ausprobiert und bin beeindruckt! Aber du hast den Strichpunkt und "nimm das schwert..." vergessen :o) LTI hat doch nur noch ASCII, kann man da nicht in einer while-Schleife alles am Ende der Eingabe killen, was nicht Buchstabe, Zahl oder Leerzeichen ist?
_________________
interactive fiction database
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
ChristianB
BeitragVerfasst am: Mo, 16 Apr 2012 - 1:38  Antworten mit Zitat
Experte
Experte


Anmeldungsdatum: 05.05.2004
Beiträge: 633
Wohnort: Hamburg

Jetzt erstmal nur mit hinzugefügtem Strichpunkt-Overkill.

http://ifiction.pageturner.de/inform7/test/German_3-120416--TEST2.zip

Gute Nacht.

EDIT: Sonderzeichen sollen auch verstanden werden, z.B. Bindestriche, #, + * usw. Die lassen wir lieber am Leben.
_________________
Worichtung willst du ingehen?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Beiträge der letzten Zeit anzeigen:   
Alle Zeiten sind GMT + 1 Stunde (MEZ)

Nächstes Thema anzeigen
Vorheriges Thema anzeigen
Seite 1 von 2
Gehe zu Seite 1, 2  Weiter
if-de :: Forum Foren-Übersicht  >  Inform & Glulx

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