Aspekte der morphologischen Analyse des Deutschen - Universität ...
Aspekte der morphologischen Analyse des Deutschen - Universität ...
Aspekte der morphologischen Analyse des Deutschen - Universität ...
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 />
insert_segments_into_chart(Symbollist:,<br />
State:,Pos:,Word:):<br />
Segmentizes the word given in Symbollist into the known segments<br />
(determined by the lexicon) and inserts them via shift/3 into the chart.<br />
*********************************************************************************************************************************/<br />
insert_segments_into_chart([],_State,_Index,_Word).<br />
insert_segments_into_chart([Letter|Restletters],State,I,Word) :-<br />
non_failure_state(State,Letter,NonFailState),<br />
transition(NonFailState,Letter,NewState),<br />
output(NewState,WordList),<br />
(WordList = [] -> % is the output function defined ?<br />
true<br />
;<br />
% yes, so convert the items in output into segments<br />
( word_to_segment_conversion(WordList,I,Segments),<br />
shift_all(Segments,Word) % insert all segments into the chart<br />
)<br />
),<br />
J is I + 1,<br />
insert_segments_into_chart(Restletters,NewState,J,Word).<br />
/*********************************************************************************************************************************<br />
shift_all(Segment:, Word:)<br />
inserts all segments into the chart; Word is the word to be analyzed<br />
*********************************************************************************************************************************/<br />
shift_all([],_Word).<br />
shift_all([Segment|Segments],Word) :-<br />
shift(Segment,Word),<br />
(morphdebug(on) -><br />
( write('Inserted segment:'), write(Segment), nl, nl,<br />
complete_edges, nl,<br />
incomplete_edges, nl,<br />
get0(_)<br />
)<br />
;<br />
true<br />
),<br />
shift_all(Segments,Word).<br />
/*********************************************************************************************************************************<br />
word_segmentation(Atomlist:,Segments:)<br />
Standalone predicate<br />
segmentizes Word into Segments<br />
e.g. 'rechnest' becomes (with suitable lexicon entries): [seg(1,rechn,5),seg(6,st,8)]<br />
*********************************************************************************************************************************/<br />
word_segmentation(Word,Segments) :-<br />
% convert Word into a list of atoms, e.g. 'Hi' becomes ['H',i]<br />
atom_to_atomlist(Word,Symbollist),<br />
startstate(StartState),<br />
word_segmentation(Symbollist,StartState,1,[],ReverseSegments),<br />
% reverse the segment list<br />
reverse(ReverseSegments,Segments).<br />
195