+ Grammatik-Konvertierer
Der
GrammatikKonverter konvertiert eine geeignete DCG-Grammatik (für Prolog) in eine
kontextfreie Grammatik, die man für HTK benutzen kann.
folgende Schritte sind dafür nötig:
- alle Dateien in Prolog per consult() einlesen.
- parseFiles(['datei1.pl','datei2.pl'],'htk-grammar.txt').
- wortListe(['datei1.pl','datei2.pl'],'wortliste.txt').
Die Regeln in der DCG-Grammatik dürfen zum Beispiel folgende Form haben:
- rhs(attr1,attr2)-->lhs1(attr1),lhs2(attr2).
- oder rhs-->[wort1,wort2].
- oder rhs-->a,b,{uninteressanter,kram}.
- oder rhs-->[X],{lex_praedikat(X)}.
wobei lex_praedikat als Wörterbuch-Prädikat(
lexical) deklariert sein muss, damit
beim Konvertieren ein lex_praedikat aufgerufen wird und X tatsächlich einen Wert bekommt.
In der Grammatik-Datei würde das dann so aussehen:
:- multifile(lexical/1).
lexical(raum2).
n(RaumNr)-->[Raum],{raum2(Raum,RaumNr)}.
raum2(Teeküche,999).
Die Deklaration mit :- multifile(lexical/1) ist notwendig, damit die Einträge für das
lexical-Prädikat in den Dateien stehen können, in denen auch die jeweiligen Prädikate stehen.
+ Unterstützung für Subkategorisierung
Die auf diese Weise erzeugte Grammatik hat keine Informationen, die in den Argumentstellen der Nichtterminale stehen -- also bei rhs(attr1,attr2) wird nur $rhs erzeugt.
Mit dem Prädikat
schema
kann man vorgeben, wie
parseFiles
(bzw.
rhsTranslate
) die Informationen in den Argumentstellen verwursten soll:
Mit
:- multifile(schema/2).
schema(n(_,form(Num,Gen,Kas)),[n,Num,Gen,Kas]).
n(sg,m,nom)-->[diplomandenraum].
wird dann statt
$n
das zusammengesetzte Symbol
$n_sg_m_nom
erzeugt.
--
YannickVersley - 17 Jan 2003
(pl2htk.pl ist jetzt im CVS zu finden)