Forum moved to if-forum.org
Autor Nachricht
<  Obj 'Hinweistafel zu X' wird nicht verstanden
Schnippie
BeitragVerfasst am: Mi, 18 Jan 2012 - 13:28  Antworten mit Zitat
Neuling
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 :-)
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Martin
BeitragVerfasst am: Mi, 18 Jan 2012 - 14:29  Antworten mit Zitat
Experte
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.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Schnippie
BeitragVerfasst am: Sa, 21 Jan 2012 - 13:27  Antworten mit Zitat
Neuling
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
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