laacz.lv

Kaspara F. neoficiālā mājaslapa (Anno 1997)

Statistiskā lietvārdu deklinēšana

Tagad es tev pastāstīšu par savu ideju “total world domination” plāna ietvaros, kuru tikko eksperimentālā kārtā realizēju. Raugi, meklēšana internetā ir diezgan traks pasākums, ja runa ir par latviešu valodu. Viens ir gūgle, bet pavisam kas cits ir mazs meklētājiņš.

Prior scriptum. Kāds man tviterī pavaicāja – kāds mērķis? Kāpēc taisi? Zini, tāpēc, ka patīk, interesē un šķiet aizraujoši. Reāli pielietojumu redzu tikai nekur.lv meklēšanā un, iespējams, ja visu labi sadomāšu – publiskā API izveidē. Bet tā – rotaļa tikai paša priekam un lepnumam.

Brīdinu, ka te runa būs par lietvārdiem un to deklinēšanu (tā sauc locīšanu). Darbības vārdu konjugēšana ir vispār pavisam atsevišķs stāsts.

Meklējam instagramu un atrodam figviņzinko

Piemērs nav tālu jāmeklē – nekur.lv (skatīt attēlu). Ja lietotājs meklē “instagramos”, būtu jauki atrast arī visu, kas ir “instagrams” un “instagramā”. It kā jau varētu paķert vārdnīcu un visu izdeklinēt, jo to mēs mākam, bet tādas pilnīgas vārdnīcas, kuru varētu lietot parasts mirstīgais īsti nav. Augšā redzamajā attēlā uzskatāmi parādīts, ka problēma ir risināta ar tipisku brute force piegājienu – deklinējam, kamēr vairs nedeklinējas :)

Bet mums ir gramatikas normas un man ir vēl labāks risinājums.


Algoritms, patiesībā, ir triviāls. Sauksim to par reverso deklinēšanu. Tātad, atrodam vārdam galotni (kas ir elementāri izdarāms), sameklējam visus locījumus, kuros mēdz būt šāda galotne. Iegūstam deklināciju, skaitli un potenciālo dzimti. Noņemam galotni, pieliekam atbilstošās deklinācijas nominatīva galotni un, lai cik mazticamu, esam dabūjuši vienu variantu.

Rezultātā mums ir vesela kaudze ar iespējamajiem vārdu variantiem un to locījumiem. Piemēram, paņemot vārdu “gūglē”, mēs iegūstam divus variantus:

Uz aci, protams, skaidrs – pareizais ir otrais. Bet, kā to varētu noteikt dators? Viņam nekāds “uz aci” nederēs. Nu, labi. Ko tālāk? Kam lai prasa?

Izrādās, arī šī problēma risinās elementāri, Mendelson. Nolēmu izmantot dienesta stāvokli nekur.lv saturu. Bez piekrišanām, bez brīdināšanām, bez nekā, iedomājies tik? Tavi lietvārdi manā labumā!

Nekurs satur vairāk nekā miljonu ierakstu no dažnedažādākajiem Latvijas interneta nostūriem un laikmetiem. No cibiņiem līdz trūblogeriem, no seksa blogerēm līdz ceham. Tur noteikti būs teju jebkurš iedomājams vārds jebkurā formā. Un tieši tur arī parādīsies visi jaunie vārdi.

Tāpēc nākamajā solī mēs ņemam katru potenciālo locījumu kombināciju un saskaitām, cik reizes katrs no šiem vārdiem ir atrodams nekurā. Piemēram, gūgles gadījumā ar nelielu pārsvaru, pateicoties vienskaitļa datīvam, uzvar sieviešu dzimte, piektā deklinācija.

Skaitīšanā, protams, ir vērts ignorēt jau saskaitītos vārdus (piemēram, neies divreiz atsevišķi skaitīt akuzatīvu “gūgli” un instrumentāli “ar gūgli”).

Bet, lai viss šis nešķistu bezjēdzīgi, ir viena ļoti svarīga nianse mūsu mainīgajam laikmetam. Kļūst sajēdzami visi jaunvārdi. Visi tie urla, instagrams, padiesi un klope. To tu nevienā vārdnīcā neatradīsi, bet atrast noteikti gribēsi.

Rezultātā mums sanāk tāda kā rekursija, kaut kas līdzīgs Inception. Lai kaut ko sameklētu milzīgā satura blāķī (nekurā), tu sauc talkā to pašu milzīgo satura blāķi, lai tas tev palīdz uzminēt to, ko tad īsti lietotājs grib sameklēt. Izklausās mistiski, bet, izrādās, ir skaisti.

Darāmā vēl tīri daudz (izņēmumi, atgriezeniskie lietvārdi, utt), bet paspēlēties ar šo raupjo un nepilnīgo versiju var teitan.

Vilx-

Vai ta klasiskais variants meklēšanai nebija t.s “stemming”? Tas ir, no katra vārda vispirms izvelkam sakni, tad to noindeksējam, un pēc tam meklējot arī meklējam pēc šīm saknēm. Rezultātā nevajag nekādu locīšanu un galotņu piemeklēšanu, bet viss strādā tikpat labi.

Sandijs

Ja es meklēju “instagrams” un Tu man piedāvā rezultātus ar visiem locījumiem, tad, tikpat labi, tur vari iekļaut arī “nepareizos” locījumus. Neredzu iemeslu diskriminēt rakstus ar kļūdām, ja vien nemeklēju, ko iesniegt sacerējuma vietā. Tas tā, par use case.

laacz

Starp citu, šis ir interesants aspekts. Par to iedomājos idejas sākuma stadijā.

No vienas puses – man ir fetišs uz gramatiski pareiziem tekstiem un es ar lielāko prieku diskriminēju tos, kas nejēdz pareizi izlocīt vārdu (Zemgus un Zemgum, nevis Zemgusam). Pats, protams, arī nereti pieļauju kļūdas, bet par tām es sevi vismaz iekšēji šaustu :)

No otras puses – ja “instagrama” gadījumā viss ir vienkārši, tad pie īsākiem vārdiem var būt diezgan daudz “false positives” un šāds “fuzziness” man pašam noteikti nepatiktu. Piemēram, ja es “valžu” izlocītu gan kā “valdis”, gan kā “valde”.

Tiesa, ar šo niansi es saskāršos, kad nonākšu pie personvārdiem kā izņēmumiem un darbības vārdiem (tas pats “Valda” vai “valda”?) :)

Usinss

Man ne pārāk. Laikam esmu pieradis meklēt konkrētas lietas konkrētos locījumos. Un ja rakstā nav pareizi uzrakstīts, tad diez vai ir jēga lasīt.
Izmēģināju. Baigi daudz lieku rezultātu izmet. Kad izvēlas, ka tomēr vēlos meklēt konkrēti šādā formā, parādās precīzāki rezultāti. Bet gan jau kādam nenoteiktam cilvēkam noderēs.

Aivars

Domāju, ka lielākā ķēpa būs tikt galā ar visām līdzskaņu mijām.

Citādi Deklinētāja kungs no “suņa” piedāvā “sunis” (Uz laukiem, uz laukiem, kur sunis sunim draugs!)
Un no “kaķa” piedāvā nominatīvu “kaķs”.

Laikam bez iebūvētas minivārdnīcas “akmens, asmens, zibens, rudens, ūdens, suns” neiztikt.

Iesniegt savu viedokli

Atruna par moderāciju. Daži vārdi, var gadīties, ka ir iz melnās listes (viagra and stuff). Tādi komentāri tiek aizturēti, pirms parādās lapā. Ja Tavs komentārs neparādās uzreizi, būs vien jāpagaida, līdz es jamo izlasīšu. Protams, ka paturu tiesības sev netīkošos komentārus dzēst, iemeslu neminot.