11.02.2013 Aufrufe

Aspekte der morphologischen Analyse des Deutschen - Universität ...

Aspekte der morphologischen Analyse des Deutschen - Universität ...

Aspekte der morphologischen Analyse des Deutschen - Universität ...

MEHR ANZEIGEN
WENIGER ANZEIGEN

Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.

YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.

Anhang C: Programmcode<br />

/*********************************************************************************************************************************<br />

process_lex_entries/0:<br />

Adds all lexicon entries to the automation and constructs<br />

the failure function afterwards<br />

*********************************************************************************************************************************/<br />

process_lex_entries :-<br />

(--->(Word,_Desc)), % extract lexicon entry<br />

\+ (Word = unknown(_W)), % special entry 'unknown' isn't inserted<br />

add_to_automation(Word), % insert Word into the automation<br />

fail.<br />

process_lex_entries.<br />

/*********************************************************************************************************************************<br />

startstate_completition/0:<br />

adds a transition for all symbols from startstate to startstate for<br />

which no transition is defined yet<br />

*********************************************************************************************************************************/<br />

startstate_completition :-<br />

automation_alphabet(Alphabet),<br />

startstate(Start),<br />

add_start_transitions(Alphabet,Start).<br />

add_start_transitions([],_Start).<br />

add_start_transitions([AlphabetSymbol|RestAlphabet],Start) :-<br />

transition(Start,AlphabetSymbol,State),<br />

((State = fail) -><br />

add_transition(Start,AlphabetSymbol,Start)<br />

;<br />

true % a transition is already there, so do nothing<br />

),<br />

add_start_transitions(RestAlphabet,Start).<br />

/*********************************************************************************************************************************<br />

construct_failure_function/0:<br />

constructs the failure function of the segmentizer.<br />

*********************************************************************************************************************************/<br />

construct_failure_function :-<br />

automation_alphabet(Alphabet),<br />

startstate(Start),<br />

make_queue(Queue),<br />

% initialize the queue<br />

queue_startstates(Alphabet,Start,Queue,NewQueue),<br />

process_queue(NewQueue,Alphabet).<br />

/*********************************************************************************************************************************<br />

queue_startstates(Alphabet:,Start:,Queue1,Queue2):<br />

Adds all states to Queue for which there are transitions to a state not equal<br />

to Start<br />

*********************************************************************************************************************************/<br />

queue_startstates([],_Start,Queue,Queue).<br />

queue_startstates([AlphabetSymbol|RestAlphabet],Start,Queue0,Queue) :-<br />

transition(Start,AlphabetSymbol,NewState), % should never fail<br />

((NewState = Start) -><br />

Queue1 = Queue0<br />

;<br />

( enqueue(NewState,Queue0,Queue1),<br />

assert(f(NewState,Start))<br />

)),<br />

queue_startstates(RestAlphabet,Start,Queue1,Queue).<br />

198

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!