3

Kas eesti keele jaoks on olemas mõnda avatud lähtekoodiga stemmimise algoritmi? Nimelt tahaks natuke edasi arendada ühe e-poe otsingu algoritmi. Hetkel on nii ,et kui otsida näiteks sõna "klaviatuurid" siis ei leia sõna "klaviatuur". Samuti võiks töötada ka erinevad käänded ja pöörded - ehk kui kasutaja otsib "klaviatuurile", "klaviatuuriga", "klaviatuurilt" jne, siis oleks vaja kätte saada sõna algvorm "klaviatuur" ja otsida selle järgi.

Miski lihtsama stemmeriga saaksin vist ka ise hakkama, aga kardan et ei ole piisavalt pädev tundma kõiki eesti keele nüansse, et seda korralikult tööle saada.

flag
See pole päris vastus, sellepärast panen ta siia kommentaarina. Igatahes räägib Jaak Pruulmann-Vengerfeldt 22.06 umbes kell 11:15 TÜ ATI seminaris (Tartus, J.Liivi 2-317) oma magistritööna tehtavast eesti keele spellerist, kus muuhulgas sees ka eesti keele morfoloogia formaalne kirjeldus. – Ahto Truu Jun 12 at 22:41

3 Answers

1

Eesti Keele Instituut on avaldanud oma morfoloogilise analüüsi tarkvara, mis peaks leidma iga sõna võimalikud algvormid: http://www.eki.ee/tarkvara/analyys/

Ma ei ole seda ise proovinud - kui keegi on, siis palun jagage kogemusi!

Teine võimalus selle probleemi lahendamiseks oleks otsingus kasutada mitte ainult täpselt sisestatud sõna, vaid mõnda spellerites kasutatavat algoritmi sarnaste sõnade leidmiseks, näiteks http://en.wikipedia.org/wiki/Damerau%E2%80%93Levenshtein_distance

link|flag
EKI tarkvara töötab kenasti Delphi all, demo_unit.pas fail, sealt analyysi funktsioon, mis omakord kutsub välja ana.dll, selle lähtekoodid ka olemas. Variant, et kirjutad algoritmi ümber scripti keelde või kutsud selle dll välja, samas see DLL ei paista eriti threadsafe. – Ingmar Tammeväli Jun 5 at 16:22
1

Kõige lihtsam on lõigata julmalt tuntuid pöördelõppe maha. See ei aita ainult erandite puhul (tuba -> toa), aga enamus juhtudel peaks asi toimima.

 ".(d|de|s|st|sse|l|lt|le|ni|na|ta|ga)$"

Kui kogemata lõikad sõna algvormi lühemaks, siis pole hullu kuna otsing peaks ikka üles leidma.

link|flag
1

Seda tükki, mida Sa otsid, nimetatakse lemmatiseerijaks. See on siis vahend, mille abil tagastatakse igast sõnavormist selle võimalikud algvormid (n: vorm "teed" annab 2 algvormi: tee ja tegema). Sellise asja on valmis kirjutanud Filosofti tegelased ja see asi on riigi poolt avalikus sektoris kasutamiseks ära ostetud.

Erasektoril paraku sellele asjale reaalne ligipääs puudub. Küsisin kasutamise võimalust Filosoftilt täpselt samal eesmärgil, aga kasutusõigus oli suurusjärgu või paari võrra kallim kui see ühe veebipoe otsingumootori komponendina ennast õigustada võiks.

Erinevalt Egonist arvan, et ülesanne ise on kaugel triviaalsusest (näiteks tüvevokaal on esimene pähkel, mis pähe kargab, või mis saab lõppude eemaldamisel sõnadest "laud" ja "kasse") ja Filosofti tüübid on kahtlemata ära teinud suure ja olulise töö. Jääb üle küsimus, kuidas oleks lemmatiseerija võimalik reaalselt ka kasutusse tuua?

Kindlasti tasub uurida ka EKI pakutavad morfoanalüüsi programmi, võimalik, et sellest annaks arendada mingi vabalt kasutatav teek.

link|flag
Ei, sugugi ei arva, et ülesanne oleks triviaalne. Ma arvan lihtsalt, et antud olukorras piisab mingist 'hack'-st, mis sarnast asja teeb. Loomulikult võiks mingi eriti keeruka süsteemi külge ehitada, aga kui 70% olukordadest katetud ja ülejäänud 30% pärast keegi hätta ei jää - siis pole väga mõtet. (numbrid on lambist) – egon Jul 2 at 22:33
'Laud' lõpu eemaldamisel saaks 'lau', ning seda kasutades regexp-na stiilis 'lau.{0,3}'... leiaks veel sõna 'laul', 'lauk'... Loomulikult saaks 'hack' ka keerulisemaks teha, et lühikeste sõnade puhul ainult lõigata "lühikesi lõppe". Aga eks see oleneb rohkem vajadusest. – egon Jul 2 at 22:42

Your Answer

Get an OpenID
or

Not the answer you're looking for? Browse other questions tagged or ask your own question.