Spis treści Artykuł originalny « Poprzedni artykul Nastepny artykul »

Algorytm pierwiastkowania dla Esperanckich słów

Algoritmo de radikigo por Esperantaj vortoj

Orignał w języku EsperantoMaszynowe tłumaczenie na język polski

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 necesas 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).

Jedno z kluczowych algorytmów komputerowego językoznawstwa jest pierwiastkowanie (z angielskiego: stamming algorithm). Program z powodu pierwiastkowania (z angielskiego: {stammer}) można nazwać w języku esperanto: pierwiastek. Główne zadanie pierwiastku jest obcinać gramatyczne końcówki słowa.

na przykład:

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

Liczne pierwiastki rezultują w także gramatycznej kategori i znaczenie słowa:

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

To zadanie zwie się z angielskiego “{tagging}”.

W licznych językach wyniki nie są {unusignifas}. Dla jednego słowa mógą rezultować w licznych pierwiastki (tłowie) i liczne możliwe gramatyczne kategorie. Dla bardzo fleksyjnych i nieregularnych języków jako język polski programować pierwiastek jest bardzo skąplikowane zadanie, którym często jest duży {separata} projekt (powina widzieć: pierwiastek dla języka polskiego Stempel). Te pierwiastki opierają się na dużych słownikach i statystycznych tablicach.

Szczęśliwie w Esperanto zadanie pierwiastkowania jest bardzo proste, lecz istnieją także kilka trudności. Wapienne prymitywne słowa w Esperanto można {kosideri} jako skąplikowane pierwiastki ze specjalną końcówką.

Na przykład:

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

Prezentuję algorytm tutaj w języku programowania Tcl, którego użytkuję w projekcie:

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
}

Aby obcinać końcówki użytkowałem “{regular} {expresions}”. Ten algorytm jednak nie pierwiastkuje imiesłowów do kluczowej czasownikowej kondycji.

konata -> koni

Jeśli zważaj przykład:

monato -> moni

Nieszczęśliwie w Esperanto istnieją pierwiastki, które mają {participajn} końcówki. Dlatego jest się potrzebny słownik z opisem słów aby być majsterskie to zadanie. Liczba tych słów nie jest mała, przykłady: (żołnierz, adwokat, dyletant, samowładny, odpowiedni, elegancki) (, czy istnieje czasownik - {dileti}).

Artukuł został przetłumaczony w pełni maszynowo przez wolny program Esperantilo
Adres kontaktowy:
mail@xdobry.de