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

Erfolgreiche ePaper selbst erstellen

Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.

Anhang C: Programmcode<br />

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

non_failure_state(State,Letter,NonFailState)<br />

NonFailState = State if there is transition from State with Letter<br />

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

non_failure_state(State,Letter,State) :-<br />

transition(State,Letter,NewState),<br />

NewState \== fail,<br />

!.<br />

non_failure_state(State0,Letter,State) :-<br />

transition(State0,Letter,fail), % no transition<br />

f(State0,State1), % failure function<br />

non_failure_state(State1,Letter,State).<br />

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

transition(State1,Char,State2):<br />

State2 is the state which is reachable from State1 with Char.<br />

if there isn't a transition then State2 = fail<br />

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

transition(State1,AlphabetSymbol,fail) :-<br />

\+ tr(State1,AlphabetSymbol,_),<br />

!.<br />

transition(State1,AlphabetSymbol,State2) :-<br />

tr(State1,AlphabetSymbol,State2).<br />

add_transition(State1,AlphabetSymbol,State2) :-<br />

assert(tr(State1,AlphabetSymbol,State2)).<br />

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

add_output(State:,Word:,Lemma:):<br />

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

add_output(State,Word,Lemma) :-<br />

(o(State,_) -> % is the output function for State already defined ?<br />

(retract(o(State,Entries)), % yes: add word to the value of the output function<br />

union([Word/Lemma],Entries,NewEntries),<br />

assert(o(State,NewEntries)))<br />

;<br />

assert(o(State,[Word/Lemma]))). % no: create a new entry for of the output function<br />

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

output(State:,WordList:):<br />

Returns a list of morphs if the analysers output function is defined,<br />

otherwise the empty list.<br />

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

output(State,Wordlist) :-<br />

(o(State,Wordlist) -> true ; Wordlist = []).<br />

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

segmentizer_information(States:,Transitions:,Finalstates:):<br />

Determinines some information about the newly created NDA<br />

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

segmentizer_information(States,Transitions,Finalstates) :-<br />

findall(*,tr(_,_,_),L1), length(L1,Transitions),<br />

findall(*,f(_,_),L2), length(L2,States0),<br />

States is States0 + 1, findall(*,o(_,_),L3), length(L3,Finalstates).<br />

202

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!