Ein Recognizer (engl. to recognize: „erkennen“), auch Erkenner, ist in der Informatik ein bestimmtes abstraktes Maschinenmodell, ein sogenannter Automat. Dieser Automat stellt auf Grundlage einer formalen Grammatik fest, ob ein konkretes Wort Element einer formalen Sprache ist oder nicht. Die Sprache wird dabei durch die zugrundegelegte formale Grammatik definiert bzw. erzeugt. Der Recognizer entscheidet nur, ob ein Eingabetext hinsichtlich der Vorgaben „richtig“ oder „falsch“ ist; das unterscheidet ihn von einem Parser, der zusätzlich die analysierte grammatikalische Struktur beschreiben und ausgeben kann. Ein typisches Beispiel für einen Recognizer in der Automatentheorie ist der Kellerautomat.

Beispiel eines RecognizersBearbeiten

In der Programmiersprache Prolog können sogenannte Definite Clause Grammars (DCG) dazu verwendet werden, um manche kontextfreien Grammatiken zu erstellen und zu verarbeiten. Angewandt auf die maschinelle Sprachverarbeitung zeigt das folgende Beispiel einer DCG eine sehr einfache Grammatik, mit der eine kleine Menge deutscher Sätze analysiert werden kann. Die Grammatikregeln legen fest, dass sich ein Satz aus einer Nominal- (NP) und einer Verbalphrase zusammensetzt, die NP wiederum besteht aus einem Artikel und einem Nomen, wobei beide in Numerus und Genus übereinstimmen müssen. Im Lexikon werden die lexikalischen Einheiten als Terminalsymbole definiert. Die Prolog-Abfrage recognize('Liste von Wörtern') setzt den Recognizer in Gang, der entscheidet, ob eine Folge von Wörtern auf Grundlage der modellierten DCG grammatisch ist oder nicht.

 % Grammatikregeln:
 satz          --> nominalphrase, verbalphrase.
 nominalphrase --> artikel(Numerus, Genus), nomen(Numerus, Genus).
 verbalphrase  --> finites_verb.

 % Lexikon:
 artikel(singular, maskulin) --> [der].
 artikel(singular, feminin)  --> [die].
 nomen(singular, maskulin)   --> [hund].
 nomen(singular, feminin)    --> [katze].
 finites_verb                --> [bellt].

 recognize(Satz) :- satz(Satz, []).

Die Anfrage an den Recognizer ist erfolgreich (der Beispielsatz ist grammatisch):

 ?- recognize([der, hund, bellt]).
 Yes

Die Anfrage an den Recognizer ist nicht erfolgreich (der Beispielsatz ist ungrammatisch):

 ?- recognize([der, katze, bellt]).
 No

WeblinksBearbeiten