✉️ Saņem šito visu e-pastā. Tā vietā, lai palaistu garām kaut ko no tā, ko es rakstu savā blogā, tagad vari pierakstīties un saņemt e-pastā visu, ko es te rakstu. Tas nav bieži.

← Uz sākumu

Statistiskā lietvārdu deklinēšana

2015. gada 15. aprīlī, 24 komentāri

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
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:

  • gūgle, gūgles, gūglem, gūgli, ar gūgli, gūglē, gūgle!, gūgles, gūgļu, gūglēm, gūgles, ar gūglēm, gūglēs, gūgles!

  • gūgle, gūgles, gūglei, gūgli, ar gūgli, gūglē, gūgle!, gūgles, gūgļu, gūglēm, gūgles, ar gūglēm, gūglēs, gūgles!

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.

Tu atbildi augstāk redzamajam komentāram. Atcelt

Gravatar Vilx-

2015. gada 16. aprīlī, plkst. 00:10

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.

Gravatar laacz Autors

2015. gada 16. aprīlī, plkst. 00:12

Bija, bet stemminga loģiku latviešu valodai būtu pašam jātaisa. Šitā ir vienkāršāk.

Gravatar laacz Autors

2015. gada 16. aprīlī, plkst. 00:15

Cilvēki PhD raksta par šo tēmu[1]. Tu gribi, lai es izrādos gudrāks? Es arī, bet labāk tagad un strādājošs. :)

1: https://dspace.lboro.ac.uk/dspace-jspui/handle/2134/7433

Gravatar Vilx-

2015. gada 17. aprīlī, plkst. 16:16

"Noņemam galotni, pieliekam atbilstošās deklinācijas nominatīva galotni" - izvilkt sakni vai tad ir grūtāk?

Gravatar laacz Autors

2015. gada 17. aprīlī, plkst. 16:35

Protams. Lietvārdu iespējamās galotnes ir zināmas (skatīt deklinēšanas tabulu) - paņem garāko. Bet sakni izvilkt nav tik vienkārši :)

Gravatar Sandijs

2015. gada 16. aprīlī, plkst. 10:04

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.

Gravatar laacz Autors

2015. gada 16. aprīlī, plkst. 10:16

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"?) :)

Gravatar kao

2015. gada 16. aprīlī, plkst. 14:15

"saskaršos". Man arī ir fetišs. :)

Gravatar Mr. Serge

2015. gada 16. aprīlī, plkst. 12:10

Eksperiments ir gana labs. AILAB nav ko tamlīdzīgu jau paveikuši, gadījumā? Pagaidām gan man ir izdevies ikurāt vienkārši atrast vārdus, kurus locītājs neloka, piemēram, http://nekur.lv/dekline.php?q=fosforsk%C4%81be

Gravatar laacz Autors

2015. gada 16. aprīlī, plkst. 12:12

AiLab ir paveikuši daudz vairāk. Viņi prot teikumu sadalīt pa sastāvdaļām (izteicējs, priekšmets, utt) un vēl visu ko[1].

Kas attiecas uz fosforskābi, par to neviens nekurā neraksta[2] :)

1: http://valoda.ailab.lv/ 2: http://nekur.lv/dekline.php?q=fosforsk%C4%81be&debug

Gravatar Mr. Serge

2015. gada 16. aprīlī, plkst. 23:26

Paldies, &debug bija tieši tas, kas bija vajadzīgs, lai paspēlētos vairāk.

Gravatar pļura

2015. gada 16. aprīlī, plkst. 21:58

Datīvā smieklīgi: Pļura - pļuram Ļipa - ļipam Papele - papelem Helikopters - helikopteram Keda - kedam

Gravatar laacz Autors

2015. gada 17. aprīlī, plkst. 09:48

Lielu daļu no šī novērsu, lai gan "puika" aizvien nav pareizi.

Gravatar laacz Autors

2015. gada 17. aprīlī, plkst. 09:50

"puikam" tagad arī ir pareizi.

Gravatar Bart

2015. gada 16. aprīlī, plkst. 23:14

Nez kāpēc ar vārdu "suka" datīvā sanāk cita nozīme, ak nekurs

Gravatar laacz Autors

2015. gada 17. aprīlī, plkst. 09:08

Salabots. Biju piemirsis paņemt arī otru indeksu klāt. http://nekur.lv/dekline.php?q=sukai&debug

Gravatar in

2015. gada 21. aprīlī, plkst. 00:46

Laacz, vai tu visu nekur saturu glabā uz kāda servera, ja esi saglabājis miljons rakstus ? Lamu vārdus (rusicismus) neloka.

Gravatar BigUgga

2015. gada 21. aprīlī, plkst. 01:57

Man patika vecie labie laiki, kad visu nolocīja ar zvaigzn* un nebija pārgudro algortimu tirānijas.

Gravatar Usinss

2015. gada 21. aprīlī, plkst. 09:18

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.

Gravatar Aivars

2015. gada 27. aprīlī, plkst. 18:07

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.

Gravatar 360

2015. gada 28. aprīlī, plkst. 10:13

Neatpazīst siev. dz. vārdu 'soda' (kaustiskā, dzeramā u.c.). Uzskata to par ģen. no 'sods'.

Gravatar Reinis

2015. gada 9. jūnijā, plkst. 08:17

"Zābīšus" neatpazina. "Ziemīšiem" arī. Tas tā - pirmie tizlie vārdi, kas ienāca prātā.

Gravatar Reinis

2015. gada 9. jūnijā, plkst. 08:18

T.i. ziemīšus atpazina gan, vienīgi piemeklēja arī vienskaitli.

Gravatar Arnis

2015. gada 6. jūlijā, plkst. 05:29

Ar lietvārdiem analizē vārda celmu - būs vienkāršāk. Ar darbības vārdiem jālieto cits algoritms.

http://www.deksoft.com/baltic-products/latvian-nouns/ http://www.deksoft.com/baltic-products/latvian-verbs/