Aspekte der morphologischen Analyse des Deutschen - Universität ...
Aspekte der morphologischen Analyse des Deutschen - Universität ...
Aspekte der morphologischen Analyse des Deutschen - Universität ...
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