Esperantilo Blogo en Esperanto pri projekto Esperantilo kaj komputila lingvistiko

30.10.2006

Algoritmo de radikigo por Esperantaj vortoj

Filed under: programado — artur @ 18:00

Unu el la bazaj algoritmoj de komputila lingvistiko estas radikigo (angle: stamming algorithm). La programo pro radikigo (angle: stammer) oni povas nomi esperante: radikilo. La ĉefa tasko de radikilo estas fortranĉi gramatikajn finaĵojn de vorto.

ekzemple:

faras -> fari
homoj -> homo
librojn -> libro

Multaj radikiloj rezultigas ankaŭ gramatikan kategorion kaj signifon de vorto:

faras -> kategorio=verbo, radiko=fari, tempo=as
librojn -> kategorio=substantivo, radiko=libro, nombro=pluralo, kazo=akuzativo

Tiun taskon oni nomas angle „tagging“.

En multaj lingvoj rezultoj ne estas unusignifas. Por unu vorto povas rezultigi multajn radikoj (trunkoj) kaj multaj eblaj gramatikaj kategorioj. Por tre fleksiaj kaj neregulaj lingvoj kiel pola lingvo programi radikilon estas tre kompleksa tasko, kiu ofte estas granda separata projekto (vidu: radikilo por pola lingvo Stempel). Tiuj radikiloj baziĝas sur grandaj vortaroj kaj statistikaj tabeloj.

Feliĉe en Esperanto la tasko de radikigo estas tre simpla, sed ekzistas ankaŭ kelkaj malfacilaĵoj. Kalkajn primitivajn vortojn en Esperanto oni povas kosideri kiel kompleksaj radikoj kun speciala finaĵo.

Ekzemple:

tamen - adjektiva formo de adverbo 'tame'
kiu - ordona formo de verbo 'kii'
ĵus - formo de verbo 'ĵi'

Mi prezentas la algoritmon ĉi tie en programlingvo Tcl, kiun mi uzas en la projekto:

proc radikigi vorto {
    if {[lsearch {en ĝis kies ties ies ĉies kaj iu neniu kiu tiu ĉiu tamen jen ĵus nun sen kun ajn kvin unu du} $vorto]>=0} {
        return $vorto
    }
    if {[regexp {^(.+?)(jn|n|j)$} $vorto m radiko]} {
       return $radiko
   }
   if {[regexp {^(.+)(is|as|os|us|u)$} $vorto m radiko]} {
       return ${radiko}i
   }
   return $vorto
}

Por fortranĉi finaĵojn mi uzis „regular expresions“. Tiu algoritmo tamen ne radikigas participojn al baza verba formo.

konata -> koni

Se atentu la ekzemplon:

monato -> moni

Malfeliĉe en Esperanto ekzistas radikoj, kiuj havas participajn finaĵojn. Tial oni bezonas vortaron kun priskribo de vortoj por majstri tiun taskon. La nombro de tiuj vortoj ne estas malgranda, ekzemploj: (soldato, advokato, diletanto, aŭtokrata, adekvata, eleganta) (ĉu ekzistas verbo – dileti).

1 Kommentar »

No comments yet.

RSS feed for comments on this post. TrackBack URL

Leave a comment

Du musst angemeldet sein, um einen Kommentar abzugeben.

Powered by WordPress