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 />

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

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!