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 />
word_segmentation(Atomlist:,Startstate:,<br />
Index:,Segments:)<br />
*********************************************************************************************************************************/<br />
word_segmentation([],_State,_Index,Seg,Seg).<br />
word_segmentation([Letter|Rest],State,I,SegsSoFar0,Segments) :-<br />
non_failure_state(State,Letter,NonFailState),<br />
transition(NonFailState,Letter,NewState),<br />
output(NewState,WordList),<br />
(WordList = [] -> % is the output function defined ?<br />
SegsSoFar1 = SegsSoFar0<br />
;<br />
% yes, so convert the items in output into segments<br />
( word_to_segment_conversion(WordList,I,NewSegments),<br />
append(NewSegments,SegsSoFar0,SegsSoFar1)<br />
)<br />
),<br />
J is I + 1,<br />
word_segmentation(Rest,NewState,J,SegsSoFar1,Segments).<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 />
/*********************************************************************************************************************************<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) -><br />
true<br />
;<br />
Wordlist = []). % function undefined<br />
196