Autor |
Nachricht |
< Obj 'Hinweistafel zu X' wird nicht verstanden |
|
Verfasst am:
Mi, 18 Jan 2012 - 13:28
|
|
|
Neuling
Anmeldungsdatum: 03.01.2012
Beiträge: 6
|
|
Hallo nochmal,
ich habe da ein Problemchen mit dem Parser, der nicht so ganz verstehen will...
Ich habe ein Museum, in denen Austellungsstücke und Hinweistafeln zu jenen Objekten stehen. Da in einem Raum mehrere Tafeln stehen, habe ich ausführlich definiert, welche Tafel sich auf welches Objekt bezieht.
So z.B.
Code: | Obj SchildRüstungMuseum
Name 'Hinweistafel zur Rüstung' f
Vor 'Hinweis' 'Rüstungs' 'Info' 'Informations'
Subst 'Tafel' f 'Schild' n 'Text' m 'Hinweistafel zur Rüstung' f
Text 'Blablabla'
Ort Museum
Attr immobil |
Wenn ich jetzt eingebe "Lese Hinweistafel zur Rüstung" bekomme ich nur die Antwort "Ich kenne 'zur' nicht".
Gibts da irgend nen Trick damit der Parser versteht was ich will? Wenn ich eingebe "Lese Rüstungstafel" ist alles kein Problem...
Hoffe mir kann jemand helfen :-) |
|
|
|
|
|
Verfasst am:
Mi, 18 Jan 2012 - 14:29
|
|
|
Experte
Anmeldungsdatum: 25.08.2002
Beiträge: 677
Wohnort: München
|
|
Die Vokabeln für Objekte dürfen keine Leerzeichen enthalten. (Im Gegensatz zu den Verben, wo man 'mach auf' definieren kann.) Die Definition 'Hinweistafel zur Rüstung' erkennt TAG daher nicht. (Und wenn, wäre es eh keine gute Lösung: Man könnte dann ja nicht "Schild zur Rüstung" sagen.)
Wenn TAG Objekte untersucht, hat es ein sehr starres Schema: es können bis zu zwei Adjektive, danach ein oder mehrere Substantive angegeben werden. (Mehrere Substantive sind sinnvoll bei Objekten wie "ein Glas Milch".)
Du könntest Dir das zunutze machen und mit Synonymen arbeiten.
Code: |
Synonym 'zur Rüstung' '.Rüstung'
Synonym 'zu Rüstung' '.Rüstung'
Synonym 'über Rüstung' '.Rüstung'
Synonym 'zum Zepter' '.Zepter'
Synonym 'zu Zepter' '.Zepter'
Obj Schild_zur_Rüstung
Name 'Hinweistafel zur Rüstung' f
Vor 'Hinweis' 'Rüstungs' 'Info' 'Informations'
Subst 'Tafel' f 'Schild' n 'Text' m '.Rüstung' f
Text '"Diese byzantinische Prunkrüstung ..."'
Ort Museum
Attr immobil
Obj Schild_zum_Zepter
Name 'Hinweistafel zum Zepter' f
Vor 'Hinweis' 'Zepter' 'Info' 'Informations'
Subst 'Tafel' f 'Schild' n 'Text' m '.Zepter' f
Text '"Das Zepter Ferdinand des Einäugigen ..."'
Ort Museum
Attr immobil
|
Die Synonyme werden nach der Eingabe ersetzt. In diesem Fall werden die nchgestellten Beschreibungen zum Pseudo-Wort '.Rüstung' oder '.Zepter' eingedampft. Pseudo-Wort deshalb, weil es einen Punkt enthält und damit vom Spieler nicht direkt eingegeben werden kann. (Der Punkt würde als eigenes Wort betrachtet.)
So ganz koscher ist das aber nicht: Du müsstest vermutlich recht viele Synonyme eingeben, um auch Synonyme für die Rüstung zuzulassen. Bei Fehlermeldungen und bei Nachfragen hakelt es gewiss. Und der parser hat schon selbst Synonyme für die Zusammenziehungen von Präpositionen und Artikeln ('zur', 'aufs', 'beim' usw.)
Eine weitere Möglichkeit ist, eine eigene Parserroutine anzugeben, was aber wegen der unflexiblen Syntax von TAG auch kein Spaß ist:
Code: |
Aktion ObjParser
Ausf
| Schild?
lokal Aux
LeseArt m Aux
wenn (Wort = 'Tafel' 'Schild' 'Text') dann
NächstesWort
wenn (Wort = 'zu' 'zum' 'zur') dann
NächstesWort
LeseArt m Aux
wenn (Wort = 'Rüstung') sei aObj Schild_zur_Rüstung
wenn (Wort = 'Zepter') sei aObj Schild_zum_Zepter
wenn /(aObj = 0) NächstesWort
Ende
Ende
EndeAusf
|
Hier wird eine Kette wie (Artikel) "Tafel" "zu" (Artikel) "Rüstung" von Hand analysiert . Diese Routine muss aObj setzen, wenn ein Objekt gefunden wurde. Das wird in Kapitel 15 im Handbuch beschrieben.
Probier das mal aus. Leider habe ich die Beispiele oben auf die Schnelle nicht ausprobieren können. _________________ Every silver lining has a cloud. |
|
|
|
|
|
Verfasst am:
Sa, 21 Jan 2012 - 13:27
|
|
|
Neuling
Anmeldungsdatum: 03.01.2012
Beiträge: 6
|
|
Hallo Martin,
herzlichen Dank für deine Hilfe.
Ich habs mit den Synonymen gelöst, nicht unbedingt die schönste Lösung, aber es deckt die meisten Möglichkeiten ab :-)
Beste Grüße,
Schnippie |
|
|
|
|
|