Autor |
Nachricht |
< I7/GerX: Deutsch-Englisches Mischmasch minimieren |
|
Verfasst am:
Fr, 18 Sep 2009 - 13:17
|
|
|
Experte
Anmeldungsdatum: 05.05.2004
Beiträge: 633
Wohnort: Hamburg
|
|
Einer der häufig genannten Kritikpunkte an der deutschen Erweiterung für Inform 7 ist das offensichtliche Kauderwelsch, in dem der Quelltext vermeintlich verfasst werden muss.
Dabei lässt sich das ganz einfach unterbinden (es musste einem nur endlich mal einfallen, wie):
Code: | A thing is usually privately-named.
A room is usually privately-named.
|
Jetzt kann man alle Dinge und Räume nennen wie man will, ohne dass der Bezeichner ins Vokabular übernommen wird. Den Rest, also den angezeigten Objektnamen (printed name) und die Synonyme etc., muss man – wie in Inform 6 auch – auf Deutsch angeben.
Ein Beispiel mit englischen Bezeichnern:
Code: | "Raus aus den Federn"
Include German by Banbury & Christian Bluemke.
A thing is usually privately-named.
A room is usually privately-named.
Definition: A container is empty if nothing is in it.
When play begins:
say "So ein Mist! Schon wieder verschlafen.";
move the player to the bed, without printing a room description.
The bedroom is a room. "Dies ist der am meisten bewohnte Teil des exklusiven Penthouses." The printed name is "Schlafzimmer".
The apple is a male thing carried by the player. The printed name is "Apfel". Understand "Apfel" as the apple.
The red herring is a male thing in bedroom. The printed name is "rot[^] Hering". Understand "rot Hering" and "Hering" as the herring.
A bed is here, fixed in place. The bed is an enterable container. Instead of putting something on the bed, try inserting the noun into the bed. After printing the name of the empty bed: omit contents in listing. The printed name of the bed is "Bett". Understand "Bett" as the bed.
Instead of going nowhere from the bedroom:
if the noun is inside:
say "(ins Bett)[command clarification break]";
try entering the bed.
|
Sieht etwas besser aus, oder? |
|
|
|
|
|
Verfasst am:
Fr, 18 Sep 2009 - 15:50
|
|
|
Experte
Anmeldungsdatum: 05.05.2004
Beiträge: 633
Wohnort: Hamburg
|
|
Ich habe mal eine Vorab-Testversion der German Version 2 hochgeladen, in der oben beschriebenes Verfahren zur Erstellung von Objekten im Spiel als Standard eingebaut ist. Für diejenigen, die es besser finden, dass der Bezeichner automatisch auch im angezeigten Namen (printed name) und im Vokabular verwendet wird, und dafür einen Sprachmix tolerieren, gibt es Klassen mit deutschen Bezeichnungen – wenn schon Denglisch, dann aber auch volle Power!
Wenn thing und room sich wie gehabt verhalten sollen, z.B. bei einem laufenden Projekt, kann man in seinem Quelltext schreiben:
Code: | A thing is usually publically-named.
A room is usually publically-named. |
Interessierte können ja schon mal einen Blick auf die Änderungen der nächsten GerX-Version werfen, bevor ein neuer I7-Build erscheint.
http://www.pageturner.de/adventure/inform7/Test/German.i7x
Die Patch-Extension der Version 1 ist nicht mehr mit der aktuellen Version kompatibel (und auch nicht mehr notwendig). Die integrierte Dokumentation ist noch nicht vollständig umgeschrieben!
Liste der Änderungen gegenüber Version 1/090621:
-- Die Klassen (kinds) "thing" und "room" sind nun "privately-named". Das bedeutet, dass der interne Bezeichner nicht ins Vokabular übernommen wird; man kann den Dingen und Räumen also einfach englische Namen geben, was den Quelltext besser aussehen lässt. Der angezeigte Objektname und die Synonyme müssen dann, wie auch schon mit Inform 6, gesondert angegeben werden.
The apple is a male thing. The printed name is "Apfel". Understand "Apfel" as the apple.
-- Die Eigenschaft "article" ist in "special indefinite article"
umbenannt worden, um deutlich zu machen, dass es sich hierbei um eine Sonderform des indefinite article handelt, die ebenfalls nur bei der Ausgabe mit unbestimmtem Artikel herangezogen wird.
-- Neue Check-Rule für putting it on und inserting it into.
>SETZ/LEG DICH AUF SOFA funktionierte nicht richtig. Möglicherweise wird diese Änderung ab dem nächsten Inform-Build überflüssig.
-- Die Plural-Imperativ-Form ("nehmt platz") wird nun richtig erkannt.
-- Korrekturen bei den Verben:
Die gruppierten Präpositionen ("in/auf") vor dem Dativ-Token aufgelöst, um falsche Parser-Nachfragen zu vermeiden.
-- Alle deutschen Me-, Again- und Oops-Wörter werden jetzt verstanden.
-- Bei der Verwendung des special indefinite article "yours" werden Objektnamen mit Adjektiven im Plural nun korrekt ausgegeben ("grüne Tomaten" vs. "deine grünen Tomaten").
-- Fehler im Zusammenhang mit den Textersetzungen "[Ihn]" und "[ihn]" behoben.
Viele Grüße,
Christian |
|
|
|
|
|
Verfasst am:
Fr, 16 Okt 2009 - 15:59
|
|
|
Experte
Anmeldungsdatum: 05.05.2004
Beiträge: 633
Wohnort: Hamburg
|
|
*hmpf*
Der Standard zum Definieren von Objekten wird nun doch nicht geändert. Das schafft zu viel Durcheinander und außerdem funktioniert der Changing Gender dann nicht mehr.
Falls jemand zufällig eine Möglichkeit entdeckt, die Erzeugung der Two-Pass parse name für ein Objekt zu hacken, bitte melden :-)
http://www.pageturner.de/adventure/inform7/Test/German.i7x |
|
|
|
|
|
Verfasst am:
Mo, 14 Dez 2009 - 20:26
|
|
|
Experte
Anmeldungsdatum: 05.05.2004
Beiträge: 633
Wohnort: Hamburg
|
|
Hier noch mal zusammenfassend ein Nachschlag zum Thema "einsprachige Objektdefinitionen" im Zusammenhang mit dem Changing Gender.
Wenn man Objekte mit englischen Bezeichnern definieren möchte, reicht es, wenn man die Arten "room" und "thing" als "privately-named" definiert. Die deutschen Ein- und Ausgabetexte müssen komplett von Hand nachgeliefert werden.
A thing is usually privately-named. A room is usually privately-named.
Jetzt ist Folgendes möglich:
The basement is a room. The printed name is "Keller".
The box is a male container in the basement, fixed in place. The printed name is "Kasten". Understand "Kasten" as the box.
Ein Objekt, das "privately-named" ist, bekommt auf dem I6-Level keine name-Property, was aber für den Changing Gender zwingend notwendig ist, zumindest bei der derzeit verwendeten Mechanik. Diese Objekte parsen sich über eine parse_name property völlig autark.
Ein in I7 definiertes CG-Attribut (hier: weiblich), so wie es bei "publically-named"-Objekten funktioniert, ...
Understand "Kiste", "#F#" as the box.
... wird galant ignoriert, "Kiste" jedoch als Synonym verstanden.
Ich meine ja, dass es zu einem sauberen Design gehört, wenn die vom Geschlecht des Objekts abweichenden Synonyme die Pronomen korrekt setzen. Also habe ich darüber nachgedacht, wie man den Changing Gender vielleicht von der name-Property trennen könnte und das Ganze in I7 schön zu benutzen ist -- bin aber zu keinem praktikablen Ergebnis gekommen.
Schön, aber nicht zu realisieren, wäre so etwas:
Understand "Kiste" as the box (acting female).
Immerhin kann man die Synonyme und die dazugehörigen Gender-Attribute gefahrlos per I6-Code einbinden, da es die name-Property ja noch nicht gibt:
Include (- with name 'kiste' '#f#', -) when defining the box.
Eine zusätzliche Definition der Vokabel per Understand-Zeile ist nicht notwendig, weil sie aus der name-Property heraus verstanden wird. Die parse_name guckt trotz eines privaten Namens nach, ob in name etwas steht (Glück gehabt!).
Das ist auch nicht so schön, weil es die Sprachenmix-Problematik von Englisch/Deutsch auf I7/I6 verlagert, aber immerhin ist es möglich, bei der "einspachigen Methode" den Changing Gender korrekt zu verwenden. Nur dran denken: nicht ein "untypable word" 'f.' (wie in deform) wird hier zur Markierung benutzt, sondern ein '#f#'. Das liegt daran, dass aus I7 heraus, keine "untypable words" definiert werden können, deshalb musste eine Alternative her.
Ich habe in der Testversion die Inline-Dokumentation entsprechend geändert. Ich wäre jedoch für jeden Vorschlag dankbar, der es ermöglicht, den CG für beide Methoden (Denglisch/Einsprachig, s. Doku Kap. 4.2 und 4.3) gleichermaßen -- und vielleicht etwas eleganter -- zu verwenden.
Schöne Grüße,
Christian |
|
|
|
|
|
Verfasst am:
Di, 15 Dez 2009 - 11:34
|
|
|
Experte
Anmeldungsdatum: 25.08.2002
Beiträge: 677
Wohnort: München
|
|
ChristianB hat folgendes geschrieben: | Diese Objekte parsen sich über eine parse_name property völlig autark. |
So wie ich das sehe, bekommt jedes Objekt eine eigene fette parse_name spendiert, ob es nun privately named ist oder nicht. Und in den meisten Fällen (wenn nämlich eh nur auf die name-Einträge geschaut wird) sind diese parse_names gleich.
Diese parse name soll wohl Fälle wie Understand "dickes fettes Ding" as the big fat thing abfangen, bei denen verlangt wird, dass die drei angegebenen Wörter genau in dieser Reihenfolge auftauchen.
Deswegen dachte ich, man könnte es mit etwas wie Understand "Kiste #F#" as the box versuchen. Ich habe mein I7-Jade-Beispiel mal in einer Version erzeugt, in der alle Dinge und Räume privately named sind wie von Dir vorgeschlagen. Dann werden alle Wörter, die normal name-Einträge wären explizit in der parse_name abgefragt, die ich hier mal in all ihrer Pracht abdrucke:
Code: |
[ Parse_Name_GV258
original_wn ! first word of text parsed
group_wn ! first word matched against A/B/C/... disjunction
try_from_wn ! position to try matching from
n ! number of words matched
f ! flag: sufficiently good match found to justify success
w ! for use by individual grammar lines
rv ! for use by individual grammar lines
g ! temporary: success flag for parsing visibles
ss ! temporary: saves 'self' in distinguishing visibles
spn ! temporary: saves 'parsed_number' in parsing visibles
pass ! pass counter (1 or 2)
pass1_n ! value of n recorded during pass 1
;
if (parser_trace >= 3) print "Two-pass parse_name called^";
original_wn = wn;
for (pass = 1: pass <= 2: pass++) {
wn = original_wn;
try_from_wn = wn; f = false; n = 0;
! On pass 1 only, advance wn past name property words
! (but do not do this for ##TheSame, when wn is undefined)
if ((parser_action ~= ##TheSame) && (pass == 1)) {
while (WordInProperty(NextWordStopped(), self, name)) f = true;
wn--; try_from_wn = wn;
}
if (NextWordStopped() ~= 'podest') jump Fail_1;
if (NextWordStopped() ~= '#n#') jump Fail_1;
try_from_wn = wn; f = true;
.Fail_1; wn = try_from_wn;
if (NextWordStopped() ~= 'steinpodest') jump Fail_2;
if (NextWordStopped() ~= '#n#') jump Fail_2;
try_from_wn = wn; f = true;
.Fail_2; wn = try_from_wn;
if (NextWordStopped() ~= 'steinsaeule') jump Fail_3;
try_from_wn = wn; f = true;
.Fail_3; wn = try_from_wn;
if (NextWordStopped() ~= 'saeule') jump Fail_4;
try_from_wn = wn; f = true;
.Fail_4; wn = try_from_wn;
! On pass 2 only, match name property words at end
if (pass == 2)
while (WordInProperty(NextWordStopped(), self, name)) n++;
if ((f) || (n>0)) n = n + try_from_wn - original_wn;
if (pass == 1) pass1_n = n;
} ! End of pass loop
if (parser_trace >= 3)
print "Pass 1: ", pass1_n, " Pass 2: ", n, "^";
if (pass1_n > n) n = pass1_n;
wn = original_wn + n;
if (n == 0) return -1;
DetectPluralWord(original_wn, n);
return n;
];
|
Die Abfragen in der Mitte werden zweimal durchlaufen. Beim ersten Durchgang werden vorangehende, beim zweiten nachgestellte name-Einträge überprüft. Was uns egal sein dürfte, denn Name ist ja leer. (Wenn die Things nicht privately named sind, steht alles in name, aber die Abfragen in der Mitte mit NextWordStopped() fallen weg. Auch hier produzieren beide Durchläufe also dasselbe Resultat. Die zwei Durchläufe sind vielleicht bei komplexeren Objektnamen wichtig.)
Den Changing Gender in name abzufangen, ging leicht, weil man seine eigene WordInProperty schreiben kann, die praktischerweise alle wichtigen Daten übergeben bekommt: Wenn dem gefundenen Wort dann in der genannten Property (meistens name) eine Angabe zum Genus folgt, wird der Changing Gender gesetzt.
Bei NextWordStopped() geht das leider nicht, weil der Routine der Kontext fehlt. Wenn es anstatt
Code: |
if (NextWordStopped() ~= 'podest') jump Fail_1;
if (NextWordStopped() ~= '#n#') jump Fail_1;
|
hieße
Code: |
if (~~NextWordStoppedIs('podest')) jump Fail_1;
if (~~NextWordStoppedIs('#n#')) jump Fail_1;
|
dann könnte man die Routine über den Template-Mechanismus verbiegen, weil die Routine erkennen könnte, ob das nächste Wort mit einer richtigen Vokabel oder mit einer Genusangabe verglichen werden soll. So geht das aber leider nicht.
Eine andere Chance wäre eventuell noch, irgendwas mit eigenen Tokens zu machen, also zu versuchen, I7 etwas wie Understand "Kiste [fem]" as the box unterzujubeln. Ich bin aber skeptisch. (Und den ganzen Parser quasi durch die Hintertür zu fixen, ist gewiss nicht der richtige Weg.)
Nachtrag: Mit einem I6/I7-Grenzgang kann man tatsächlich etwas wie Understand "saeule" and "podest [neutrum]" realisieren:
Include (-
[ CG_NTR;
GenderNotice(self, neuter);
return GPR_PREPOSITION;
];
-).
The Understand token neutrum translates into I6 as "CG_NTR".
Das funktioniert - allerdings nur, wenn das Objekt nicht das letzte Wort ist. Wenn bereits über das Satzende hinaus gelesen wurde, wird alles nachfolgende nicht mehr geparst, obwohl es sich um ein leeres Token handelt, das keine Wörter einliest und immer GPR_PREPOSITION zurückgibt:
Test me hat folgendes geschrieben: |
Du siehst hier eine Steinsäule (darauf eine Jadestatue).
>u podest
So etwas kannst du hier nicht sehen.
>sieh podest an
Die Säule ist aus glattem Stein gehauen, etwas mehr als einen Meter hoch und oben flach, wie ein Podest.
>sieh es an
Die Säule ist aus glattem Stein gehauen, etwas mehr als einen Meter hoch und oben flach, wie ein Podest.
|
Nachtrag II: Okay, man muss für jeden Genus eine solche Routine definieren und dann den gesamten Bereich "Parse Token" ersetzen:
Code: |
Include (-
[ ParseTokenStopped x y;
if (y == CG_NTR or CG_FEM or CG_MAS or CG_PLR) {
return ParseToken(x,y);
}
if (wn>WordCount()) return GPR_FAIL;
return ParseToken(x,y);
];
... ! Rest gesnippt
|
Sich schönere Namen für die Tokens auszudenken und das Ganze unter Glulx und mit einem Beispiel in industrieller Größe zu testen, überlasse ich dann aber Dir, Christian. _________________ Every silver lining has a cloud.
Zuletzt bearbeitet von Martin am Di, 15 Dez 2009 - 17:15, insgesamt einmal bearbeitet |
|
|
|
|
|
Verfasst am:
Di, 15 Dez 2009 - 16:59
|
|
|
Experte
Anmeldungsdatum: 05.05.2004
Beiträge: 633
Wohnort: Hamburg
|
|
Martin, danke! Ich hab es ja nicht gewagt, die parse_name hier zu posten; wie oft saß ich schon davor und hab "Ich will da rein ..." vor mich hingemurmelt. Okay, die einzigen Routinen, die man als Einstiegsluke für die 2pass-parse_name benutzen könnte, machen als solche keinen Sinn. Vor meinem geistigen Visionärsauge spukt aber noch das Gespenst einer weiteren Lösung, die setzt aber voraus, dass man in der name-Property noch zur Laufzeit herumschreiben kann und dass man aus Zeichenketten ein Dictionary-Word machen kann.
Ich stelle mir vor, dass man eine I7-Tabelle erstellt, in der die Objekte, für die es Synonyme mit CG gibt, aufgelistet sind.
Zunächst einmal zwingt man Inform für jedes privat benannte Ding eine name-Property auf.
Include (- name 'word.' 'attr.' 'word.' 'attr.' 'word.' 'attr.' 'word.' 'attr.' 'word.' 'attr.' 'word.' 'attr.' 'word.' 'attr.' 'word.' 'attr.', -) when defining a privately-named thing.
Und dann wird eine Tabelle erstellt, die der Autor dann fortsetzen könnte.
Table of Changing Gender Words
Object Word Attribut
(a thing) (a text) (a gender)
[...]
Table of Changing Gender Words (continued)
Object Word Attribut
box "Kiste" weiblich
Die Gender-Werte männlich, weiblich, sächlich und Mehrzahl sind schon in der Erweiterung definiert.
Jetzt müsste z.B. in LanguageInitialise() die Tabelle durchgeackert werden und die name-Property des Objekts, die mit Dummy-Wörtern gefüllt ist entsprechend geändert werden (wenn das geht), sodass die name hinter so aussieht
Code: | name 'kiste' '#f#' 'word.' 'attr.' 'word.' 'attr.' 'word.' 'attr.' 'word.' 'attr.' 'word.' 'attr.' 'word.' 'attr.' 'word.' 'attr.', |
Ich werde so etwas demnächst mal versuchen.
[ EDIT: Oder auch nicht! Gerade habe ich Deine Nachträge gelesen ... das sieht nach einer sehr sehr coolen Lösung aus, die ich unbedingt ausprobieren muss! Danke! ]
Viele Grüße,
Christian |
|
|
|
|
|
Verfasst am:
Di, 15 Dez 2009 - 17:41
|
|
|
Experte
Anmeldungsdatum: 25.08.2002
Beiträge: 677
Wohnort: München
|
|
Zitat: | Ich werde so etwas demnächst mal versuchen. |
An so eine Lösung hatte ich auch zunächst gedacht, aber das ist ja nur praktikabel, wenn man die Liste der Gender-Zuordungen automatisch erstellt. Dass man dann zu jedem abweichenden Objekt eine Fortsetzung der Tabelle anlegen muss, ist ja wieder wenig intuitiv.
Da scheint mir die Lösung, die ich oben im Cross-Post angegeben habe, etwas schöner und auch natürlicher. (Vorausgesetzt, dass sie immer funktioniert, aber im Moment sehe ich nicht, wieso nicht) Wenn die Tokens [m], [f], [n] und [p] noch frei wären, wäre das soch sehr elegant: Understand "kiste", "kasten [m]", "kaestchen [n]", "kisten [p]" und "kaesten [p]" as crates.
Das funktioniert nach ersten Tests für Objekte, die publically-named[i] oder [i]privaltely-namedsind und sogar für erweiterte Kombinationen:
A colour is a kind of value. The colours are blau, grau, braun, schwarz and rot.
A box is a kind of thing. Understand "kiste", "kasten [m]", "kaestchen [n]", "kisten [p]" and "kaesten [p]" as the box. A box has a colour. Understand the colour property as referring to a box. The plural of box is Kisten. The printed name is "[colour][^] Kiste". A box is female.
A blackbox is a box in Inner Shrine. The blackbox is schwarz. A brownbox is a box in Inner Shrine. The brownbox is braun. A greybox is a box in Inner Shrine. The greybox is grau. _________________ Every silver lining has a cloud. |
|
|
|
|
|
Verfasst am:
Di, 15 Dez 2009 - 18:33
|
|
|
Experte
Anmeldungsdatum: 05.05.2004
Beiträge: 633
Wohnort: Hamburg
|
|
Martin, das ist einfach genial!
Und genial einfach in der Verwendung (wenn man sich das jetzt so anschaut). Mir war gar nicht nicht klar, dass man die Understand-Token auch für die Synonyme gezielt nach I6 übersetzen kann -- für die Verben wird das ja schon lange so gemacht.
Meine ersten Tests zeigen keine Probleme auf, mal sehen, was die folgenden Power-Tests so ergeben.
Die Token [m], [f], [n] und [p] sind alle noch frei, somit sieht die Vokabel-Definition mit CG auch wieder richtig nach I7 aus.
Die vorige Methode mit den "#N#"-Attributen war nicht schön, zumal die Attribute ja Vokabeln waren, die irgendwie für den Parser getarnt werden mussten.
Also, wenn das überall klappt, dann lohnt sich der Versionssprung tatsächlich.
Ein riesengroßes DANKESCHÖN für diese elegante Lösung!
Christian
[Edit: Eine ganze Menge Varianten später sind die CG-Token immer noch nicht in die Knie gegangen ... :-)
An der ParseTokenStopped(), die aufgebohrt werden musste, wäre ich ganz sicher verzweifelt, das hätte ich nie gefunden ...
Die Token heißen in I6 jetzt übrigens CG_NEUTER_TOKEN usw. Noch ein paar Tests, dann lade ich eine aktualisierte Testversion hoch.] |
|
|
|
|
|
Verfasst am:
Mi, 16 Dez 2009 - 23:38
|
|
|
Experte
Anmeldungsdatum: 05.05.2004
Beiträge: 633
Wohnort: Hamburg
|
|
So, ich habe jetzt noch mal ein wenig was ausprobiert -- es folgt ein Beispiel-Code, der die Standard-Denglisch-Methode zum Definieren von Objekten benutzt (es scheint keinen Unterschied zu machen, ob Objekte privately-named oder publically-named sind):
"Wandelhalle" by Tante Benno
Include German by Banbury & Christian Bluemke.
Use non-nested lists.
Section - Länge der Wörterbuch-Einträge von 9 auf 12 Zeichen hochsetzen (for Glulx only)
Use DICT_WORD_SIZE of 12. [Zum Testen jetzt auch mal mit längeren Vokabeln]
Section - Testraum
Wandelhalle is a room. "In dieser Halle kann man lustwandeln oder auch Dinge testen, die mehr als ein Geschlecht haben."
The Bistrotisch is a male supporter, fixed in place in the Wandelhalle. Understand "Tisch", "Bistrotischchen [n]", "Tischchen [n]" as the Bistrotisch. [ "Bistrotischchen" kann der Parser in Z-Code wegen der 9-Zeichen-Auflöung des Wörterbuchs eigentlich nicht so einfach von "Bistrotisch" unterscheiden (aber trotzdem wird der CG richtig gesetzt). ]
A Tasse is a kind of container. A Tasse is female. The plural of Tasse is Tassen.
Definition: A container is empty if nothing is in it.
Before printing the plural name of an empty container, say "leere". After printing the plural name of an empty container, omit contents in listing. [ "leere Tassen" anstatt "Tassen (die leer sind)" ]
Understand "Tasse", "Taesschen [n]" and "Becher [m]" as "[Tasse]".
Understand "[Tasse]" as a Tasse.
[ "Becher" auch noch als Plural-Vokabel zu definieren bringt nichts, da immer nur das erste Becher verstanden wird. ]
On the Bistrotisch are three Tassen.
The Espressotasse is a Tasse on the Bistrotisch.
Understand "[Tasse] mit/voller [something related by containment]" as Espressotasse.
Understand "[Tasse] voll mit [something related by containment]" as Espressotasse.
The Kaffee is a male thing in the Espressotasse. Understand "eklig", "Espresso" and "Bruehe [f]" as the Kaffee. The description of the Kaffee is "Eine eklige Brühe." The indefinite article of the Kaffee is "etwas".
Instead of drinking the Kaffee, say "Der Kaffee ist kalt."
The Fußboden is male scenery in the Wandelhalle. Understand "Boden" and "Fussboden" as the Fußboden.
Section - Tests
Test Tisch with "u bistrotischchen / pronomen / nimm es / u boden / u bistrotisch / pronomen / nimm ihn ".
Test Tassen with "nimm zwei becher / u becher / leg ihn hin "
Test Espresso with "u becher mit ekliger bruehe / nimm ihn / pronomen / u bruehe / trink sie / pronomen".
Test alles with "test tisch / test tassen / test espresso".
Alle Beispiele, bis auf eines, funktionieren. Beim Test "Tassen" gibt es ein Problem, warum, weiß ich noch nicht.
Test Tassen hat folgendes geschrieben: | >[1] nimm zwei becher
Tasse: In Ordnung.
Tasse: In Ordnung.
>[2] u becher
(die Tasse)
Die Tasse ist leer.
>[3] leg ihn hin
Der Fußboden ist bereits hier. |
Interessant finde ich, dass in Z-Code (wo die Vokabeln intern maximal nur 9 Zeichen lang sind) "Bistrotisch" und "Bistrotischchen" offenbar doch unterschieden werden.
Test Tisch hat folgendes geschrieben: | >[1] u bistrotischchen
Du siehst nichts Besonderes an dem Bistrotisch.
>[2] pronomen
Die Pronomen beziehen sich im Moment auf Folgendes:
"er": der Bistrotisch
"sie": die Tasse
"es": der Bistrotisch
"ihn": der Bistrotisch
"ihm": der Bistrotisch
"ihr": die Tasse
"ihnen": nicht gesetzt
"damit", "darauf", usw.: der Bistrotisch
"ihm/r": der Bistrotisch
>[3] nimm es
Der Bistrotisch ist fest.
>[4] u boden
Du siehst nichts Besonderes an dem Fußboden.
>[5] u bistrotisch
Du siehst nichts Besonderes an dem Bistrotisch.
>[6] pronomen
Die Pronomen beziehen sich im Moment auf Folgendes:
"er": der Bistrotisch
"sie": die Tasse
"es": der Bistrotisch
"ihn": der Bistrotisch
"ihm": der Bistrotisch
"ihr": die Tasse
"ihnen": nicht gesetzt
"damit", "darauf", usw.: der Bistrotisch
"ihm/r": der Bistrotisch
>[7] nimm ihn
Der Bistrotisch ist fest. |
Eine aktualisierte Vorab-Testversion 2 ist jetzt online. In der Inline-Doku wird der CG in Kapitel 4.5 beschrieben.
Jetzt kann das I7-Update von mir aus kommen. Nochmals herzlichsten Dank an Martin!
Grüße,
Christian |
|
|
|
|
|
Verfasst am:
Do, 17 Dez 2009 - 13:03
|
|
|
Experte
Anmeldungsdatum: 25.08.2002
Beiträge: 677
Wohnort: München
|
|
Christian hat folgendes geschrieben: | Alle Beispiele, bis auf eines, funktionieren. Beim Test "Tassen" gibt es ein Problem, warum, weiß ich noch nicht. |
Hmmm. Das hat scheint's etwas mit dem Dismbiguieren der verschiedenen Tassen zu tun. In I6 passiert das auch. Was aber genau passiert, weiß ich nicht so recht. Wird der changing gender bei der Meldung "(die Tasse)" zurückgesetzt?
Christian hat folgendes geschrieben: | Interessant finde ich, dass in Z-Code (wo die Vokabeln intern maximal nur 9 Zeichen lang sind) "Bistrotisch" und "Bistrotischchen" offenbar doch unterschieden werden. |
Beider Wörter werden gleich behandelt, aber 'bistrotisch' hat den Genus des Objekts und steht daher in name, 'bistrotischchen' steht, da es aus zwei Tokens, die aufenader folgen müssen, besteht, fest verdrahtet in der 2-pass parse_name.
Der erste Durchgang überprüft erst die name, dann die Tokenketten und der zweite Durchgang macht's genau andersherum. Beim ersten Durchgang wird 'bistrotisch' erkannt und der CG in Ruhe gelassen, aber beim zweiten Durchgang wird 'bistrotischchen' erkannt und der CG gesetzt.
Probier's mal: Auch wenn man 'bistrotisch' sagt, ist der changing gender gesetzt und 'es' bezieht sich auf den Tisch.
(Wenn ich aber spaßeshalber eine Bistrotischdecke auf das Bistrotischen lege, funktioniert's wieder nicht, vermutlich aus denselben Gründen wie bei den Tassen.) _________________ Every silver lining has a cloud. |
|
|
|
|
|
Verfasst am:
Do, 17 Dez 2009 - 15:25
|
|
|
Experte
Anmeldungsdatum: 05.05.2004
Beiträge: 633
Wohnort: Hamburg
|
|
Martin hat folgendes geschrieben: | Wird der changing gender bei der Meldung "(die Tasse)" zurückgesetzt? |
Sieht ganz danach aus. In der Routine Gender() gibt's einen heißen Kandidaten; wenn ich den auskommentiere, wird die Tasse korrekt erkannt -- allerdings eine Tasse im Inventar, aber das soll ja so sein.
Code: | [ Gender [...]
! Genus zurücksetzen
!GenderNotice(obj, 0);
[....] |
Du hast Dir dabei ja sicher was gedacht. Vielleicht muss das Zurücksetzen nur bedingt geschehen?
[Edit: Oder stammt das noch aus der Zeit, zu der auch die Ausgabe-Routine für Pronomen für einen Zug angepasst wurde, da gab's doch mal irgend so etwas, oder?
Code: | [ PersonalPron obj k;
print (string) PersonalPronouns-->(4*k + Gender(obj, true));
]; |
Dies ist die einzige Stelle, wo Gender() mit flag==true aufgerufen wird, d.h. der CG berücksichtigt werden soll (wird er aber hier nicht so recht).
Ich konnte noch keine Nachteile mit der auskommentierten Fassung finden. ] |
|
|
|
|
|
Verfasst am:
Sa, 19 Dez 2009 - 1:38
|
|
|
Experte
Anmeldungsdatum: 05.05.2004
Beiträge: 633
Wohnort: Hamburg
|
|
Es gibt jetzt eine neue Vorab-Testversion, in der der das Tassen-Beispiel korrekt funktioniert.
Der Genus eines Objekts und auch der geänderte Genus können jetzt als Werte befragt und in Say-Phrasen verwendet werden (siehe Kap. 4.5 und Kap. 4.6 der Inline-Doku). Bei der Verwendug einer Textersetzung für ein Personalpronomen wird der Changing Gender nicht mehr berücksichtigt.
Grüße,
Christian |
|
|
|
|
|
|
Alle Zeiten sind GMT + 1 Stunde (MEZ) |
|
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.
|
|