Eg har laga eit enkelt program (Python-skript), finn-relaterte-ord, for å finna ord som er relaterte til eitt eller fleire oppgitte ord. Orda som vert funne, kan vera synonym, men dei kan òg vera andre nærskylde ord. Eit søk på «journalist» vil for eksempel finna både «skribent» og «bladfyk», men òg ord som «avis» og «penn» og uttrykk som «ha ein god penn».
For å finna orda brukar programmet ein database med ordboksartiklane i Nynorskordboka eller Bokmålsordboka og hyperlenkjene mellom desse artiklane. Hyperlenkjene vert følgde (både framlengs og baklengs) rekursivt for å laga ei prioritert liste over ord.
Programmet er sjølvsagt fri programvare (GPLv3+). Du kan lasta det ned frå GitLab-sida, der du òg finn installasjonsinstruksjonar og meir informasjon. Her følgjer nokre eksempel på korleis det fungerer (desse er òg tilgjengelege direkte i programmet med kommandoen ./finn-relaterte-ord.py --eksempel).
Grunnleggjande bruk
Programmet er enkelt i bruk: Berre oppgje eit oppslagsord, så får du ut ei liste over relaterte ord. Her er for eksempel ord som er (direkte eller indirekte) relaterte til ordet «datavirus»:
$ ./finn-relaterte-ord.py datavirus1antivirus1virus2drivar2makk2ormstukken2smitte1antivirusprogram2HPV-virus2hiv2nettlesar2program2stålorm1dataangrep2anti-2hivvirus2nukleinsyre2programfil2tekstbehandlingsverktøy1dataorm2antiviral2hoggorm2orme2programvare2teksthandsamingsverktøy1dataprogram2antivirusmedisin2infeksjon2ormebol2protein2ureine1dataåtak2app2innvolsorm2ormeham2rundorm2viral1infisere2brukargrensesnitt2kålorm2ormehovud2skriveprogram2virologi1infisert2buorm2leddorm2ormeskinn2slange2virulent1orm2datasnoking
Talet til venstre for eit ord viser «avstanden» mellom ordet og oppslagsordet. Orda som er merkte med 1, har direkte lenkjer til/frå ordet «datavirus», orda som er merkte med 2, har direkte lenkjer til/frå minst eitt av orda merkte med 1 osv.
Merk at ikkje alle orda som ein skulle venta var det, er kopla saman reint teknisk. Slår me for eksempel opp ordet «kjøter» i ordboka, er definisjonen «hund av blandingsrase; bastard», men gjer me eit oppslag på «kjøter», kjem ikkje «hund» opp som relatert ord:
$ ./finn-relaterte-ord.py kjøter1bastard4-id4kryss4leggje i kors5B5H-dur5avskjere2bastardisere4baute4kryss-stille4leggje i kross5Ciss-dur5andreaskross5avskoren2hybrid4blanding4krysse ein sjekk4patruljere5D-dur5antoniuskross5baut2krysning4fekte4krysse fingrane for4skjere5E-dur5audmykje seg5beite3hybrid4korse4krysse klinger4slage5Fiss-dur5avkryssing5blande3hybridisere4kross4krysse nokon5-oid5G-dur5avpatruljere5blandingshøve3krysse4krosse4kryssing5A-dur5Giss-dur5avskjer5blandkorn3mellomting
(Og gjer me eit oppslag på «hund», kjem ikkje «kjøter» opp.) Grunnen er at ordet «hund» i forklaringa i ordboksartikkelen for «kjøter» ikkje er lenkja til ordboksartikkelen for «hund»; ordet er berre vanleg (ikkje-klikkbar) tekst. Ordet «bastard» har derimot ei lenkje, og derfor får me opp «bastard» når me gjer eit oppslag på «kjøter».
Men me kan omgå problemet ved å oppgje fleire enn eitt søkjeord:
$ ./finn-relaterte-ord.py hund kjøter1bandhund1galne hundar får rive skinn2[134996]2dunder1bandtvang1gå i hundane2[134997]2elgjakt1bastard1hunda2MMR-vaksine2faen1bikkje1hundfare2band2fan1bisk1ikkje skode hunden på håra2banning2fanden1buhund1pokker2bastardisere2fanden er laus1der ligg hunden gravlagd1politihund2bikkjeskinn2fanden og hans oldemor1ein hund etter1raude hundar2bisk2fanden veit1ein vittig hund1skipshund2bissevov2fandens1elghund1som ein hund2blåse i2fanken1fanden1som hund og katt2bu2fyle1flygande hund1trekkhund2dra fanden i vald2før fanden har fått sko på1fuglehund2[134995]
No får me alle orda som er kopla til anten hund eller kjøter (eller begge). Me får for eksempel både «bikkje» (relatert til «hund») og «bastard» (relatert til «kjøter»). Avstandstala viser til den minste av avstandane til ordet «hund» og til ordet «kjøter».
Avgrensing i talet på ord og på søkjedjupn
Me kan òg velja kor mange ord me vil sjå (-m/--maks-ord, standard: 50). Slik får me for eksempel dei 20 orda som ifølgje ordboka er nærast relatert til ordet «advent»:
$ ./finn-relaterte-ord.py --maks-ord 20 advent1adventist1førjulstid3lysestake4stake5brakett5einstaka5hoftehaldar1adventssøndag2adventsstake4haldar5-ar5bretthaldar5føredragshaldar5kopphaldar1adventstid2førjul4messingstake5bokhaldar5brysthaldar5haldsbukk
Me kan òg velja kor djupt ned i ordnettverket me vil søkja. Dei siste orda i lista ovanfor, dei med avstand 5 frå oppslagsordet, var ikkje så relevante, så me kan avgrensa søkjedjupna (-d/--djupn, standard: 5) til 4 for å ekskludera dei:
$ ./finn-relaterte-ord.py --maks-ord 20 --djupn 4 advent1adventist1adventstid2adventsstake2førjul3lysestake4haldar4messingstake4stake1adventssøndag1førjulstid
Og skal me bruka ordlista vidare i eit anna programma, kan det vera greitt å visa eitt ord per linje (-T/--ikkje-vis-i-tabell) i staden for å visa orda som kolonnar i ein tabell.
$ ./finn-relaterte-ord.py --maks-ord 5 --ikkje-vis-i-tabell advent1adventist1adventssøndag1adventstid1førjulstid2adventsstake
Men det går raskare å skriva kortformene av argumenta. Følgjande gjev for eksempel same resultat (merk at kortargument som tek tal, må komma på slutten):
$ ./finn-relaterte-ord.py -Tm5 advent
Vising og filtrering av ordklasse
Det går òg an å få vist ordklassen til kvart ord (-k/--vis-ordklasse):
$ ./finn-relaterte-ord.py --vis-ordklasse drama1dramatikar(NOUN)2spel(NOUN)3dramatisk(ADJ)1dramatisere(VERB)2spele skodespel(EXPR)3drive spel med nokon(EXPR)1drastisk(ADJ)2spelstykke(NOUN)3dryge(VERB)1familiedrama(NOUN)2sterk(ADJ)3drygsel(NOUN)1lesedrama(NOUN)2stor(ADJ)3duellspel(NOUN)1samtidsdrama(NOUN)2teaterstykke(NOUN)3edru(ADJ)1skodespel(NOUN)3angrep(NOUN)3einstroken oktav(EXPR)1ungdomsdrama(NOUN)3angrepsspel(NOUN)3eitrande(ADJ)2commedia dell'arte(NOUN)3avlig(ADJ)3evlig(ADJ)2dramatisering(NOUN)3avtalt spel(EXPR)3fast(ADJ)2dryg(ADJ)3ballspel(NOUN)3felespel(NOUN)2filmatisere(VERB)3brettspel(NOUN)3filmatisering(NOUN)2forstille seg(EXPR)3dataspel(NOUN)3filme(VERB)2krass(ADJ)3det sterke kjønn(EXPR)3forstille(VERB)2samtidsdramatikk(NOUN)3distrahere(VERB)3frek(ADJ)2scenestykke(NOUN)3djup(ADJ)3fritt spel(EXPR)2skodespelforfattar(NOUN)3dramatikk(NOUN)
Dei vanlegaste ordklassane er NOUN (substantiv), VERB (verb), ADJ (adjektiv) og EXPR (uttrykk). Sjå nettsida https://ord.uib.no/bm/fil/word_class.json for ei fullstendig oversikt.
Det er òg mogleg å filtrera på ordklasse (-f/--filtrer-på-klasse). Viss me for eksempel er interesserte i alle uttrykk som har med kortspel å gjera, kan me søkja slik:
$ ./finn-relaterte-ord.py -d3 --filtrer-på-klasse expr kortspel2blande korta2spele korta sine godt3setje farge på2gode kort på handa2sterkt kort3setje noko på kartet2kaste korta2syne korta3slutte medan leiken er god2kike nokon i korta3dei norske fargane3som ein leik2leggje korta på bordet3den som er med på leiken, får [smake|tole] steiken3stiv som ein pinne2liggje i korta3gå over stokk og stein3stiv som ein stokk2setje alt på eitt kort3ha klippekort på3ta farge av2sikkert kort3kartet stemmer ikkje med terrenget3vere med på leiken2sitje med svarteper3på leik3vise farge
(Brukte her -d3 for å berre få dei mest relevante uttrykka. Merk elles at ein kan bruka både store og små bokstavar i ordklassekodane.)
Her er eit par eksempel til. Viss me vil ha forslag til korleis me kan opna ein samtale, kan me sjå etter interjeksjonar (INTJ) som er relaterte til ordet «hei»:
$ ./finn-relaterte-ord.py -f intj hei1hallo1hu3god kveld4bravo4jøss5bitterdø5haldt5hoi5mi sel5oi1halloi2heia3god morgon4heil5basta5bravissimo5hau5jyss5mi sjel5tupp1hei sann3god dag3god natt4hui5beiskedaud
Vil me heller vil uttrykka avsky, kan me sjå etter interjeksjonar som er relaterte til ordet «æsj»:
$ ./finn-relaterte-ord.py -f intj æsj1fysj2fy3pytt4faen4søren4tvibrent4uff5fanden5farken5føkk5huff5sytten1isj3føy3tvi4pytt sann
Vising av og oppslag på artikkel-ID
Av og til kan det vera praktisk å visa dei interne artikkel-ID-ane til orda (-i/--vis-id):
$ ./finn-relaterte-ord.py --vis-id ordliste1ordbok(55195)3bok(7331)3kladdebok(38598)1rettskrivingsordliste(61574)3bokform(7356)3konvensjon(41089)1vokabular(90716)3bøk(9995)3konversasjonsleksikon(41098)2bibelordbok(5745)3bøkenes bok(120967)3leksikalsk(45192)2bok(7330)3bønebok(10046)3leksikograf(45193)2framandordbok(21526)3dagbok(10715)3leksikologi(45196)2leksikon(45197)3e-bok(120439)3leksikonartikkel(45198)2norm(53082)3ei lukka bok(121224)3lese som ei open bok(120963)2ordsamling(55293)3eit levande leksikon(112774)3lommebok(46437)2ordtilfang(55308)3evangeliebok(16075)3lov(46551)2rettskrivingsordbok(116556)3eventyrbok(16092)3målestav(51383)2synonymordbok(76487)3forskrift(20855)3normal(53084)3aktivt ordtilfang(131962)3framandord(21525)3normativ(53113)3allkunnebok(913)3ha hug til boka(120968)3oppslagsverk(54999)3ark(2387)3ha pengar på bok(120969)3ordfang(55218)3barnebok(4677)3handle på bok(114580)3ordforråd(55223)3bibelkonkordans(5735)3institusjon(34524)
Desse kan brukast til å slå opp tilhøyrande ordboksartikkel i ordboka. For eksempel viser adressa https://ordbokene.no/nn/90716 til artikkelen for ordet «vokabular» i Nynorskordboka. For Bokmålsordboka byter me ut «nn» med «bm». Merk at artikkelnummeret der er annleis: https://ordbokene.no/bm/68920
Det er òg mogleg å bruka artikkelnummeret som «oppslagsord». Her er eit eksempel der dette er praktisk. Me er på utkikk etter ord relaterte til verbet «hoppe»:
$ ./finn-relaterte-ord.py hoppe1avlshoppe1hoppe på1skvette2drifse2håmerr1bykse1hoppeføl1sprette2føl2jump1det er like godt å hoppe i det som å krype i det1hoppestrikk1tobbe2hann2kime1ho1hopping2alshoppe2hofisk2kipe seg1hopp1horse2alsmerr2hokjønn2kipen1hoppe av1hufse2and2hors2kombinertrenn1hoppe av i svingen1jumpe2avl2horseføl2krype1hoppe etter Wirkola1kipe2avlsmerr2hufs2kveppe1hoppe inn i1merr2brume2hufse på seg2mulesel1hoppe over1muldyr2byks2hyfse2renne
Me får rett nok opp ord som «sprette» og «bykse» her, men òg ord som «avlshoppe» og «merr», som ikkje verkar særleg relevante. Grunnen er at «hoppe» jo òg kan vera eit substantiv (ein «hohest»). Men artikkelnummera kan brukast til å skilja dei to orda/tydingane. Men for å visa oppslagsorda (som har avstanden 0) i søkjeresultata treng me eit ekstra argument (-o/--vis-oppslagsord):
$ ./finn-relaterte-ord.py -Tkim4 --vis-oppslagsord hoppe0hoppe(NOUN)(31275)0hoppe(VERB)(31276)1avlshoppe(NOUN)(3721)1bykse(VERB)(9774)
Me ser at artikkel-ID-en for verbet «hoppe» er 31276, og brukar me denne som oppslagsord, vert (iallfall dei første) resultata mykje meir relevante:
$ ./finn-relaterte-ord.py 312761bykse1hoppestrikk2drifse2kipen2skutte1det er like godt å hoppe i det som å krype i det1hopping2ho2kombinertrenn2skvasle1hopp1hufse2hoppeføl2krype2skvelpe1hoppe1jumpe2horse2kveppe2skvett1hoppe av1kipe2hufs2merr2skvette1hoppe av i svingen1skvette2hufse på seg2muldyr2skvetten1hoppe etter Wirkola1sprette2hyfse2renne2skvinkle1hoppe inn i2avlshoppe2jump2riste2skvisle1hoppe over2brume2kime2rykkje2skvitre1hoppe på2byks2kipe seg2skihopping2sluske
Me kan eventuelt avgrensa oss til berre verb:
$ ./finn-relaterte-ord.py -f verb 312761bykse1sprette2krype2skutte2skvisle2spritle3aule3drive3fjakle3fosse1hufse2brume2kveppe2skvasle2skvitre2sprute3bivre3dysse3fjasle3fyke1jumpe2drifse2renne2skvelpe2sluske2støkke3breste3fare3fjeske3gidre1kipe2hyfse2riste2skvette2spenne2vimse3darre3filleriste3flyte3gruvle1skvette2kime2rykkje2skvinkle2sprinte3asne3dildre3firre3flæse3grøsse
Uthenting av komplette ordoversikter
Til slutt ser me på ein litt meir avansert bruk. For argumenta -m/--maks-ord og -d/--djupn er det mogleg å oppgje verdien inf, som tyder uendeleg. Det kan vera nyttig når me vil visa absolutt alle relaterte orda, uavhengig av kor mange dei er og kor langt vekk frå oppslagsordet dei er. Og for -d/--djupn har verdien inf også ei litt anna tyding enn eit vilkårleg høgt tal. Ord som ikkje er relaterte til kvarandre i det heile teke, vert rekna å ha «uendeleg» avstand. Men med søkjedjupn lik inf, får me med dei òg.
Det er for eksempel 11 konjunksjonar i ordboka. Men søkjer me med 1000 som søkjedjupn, finn me berre 9 av dei:
$ ./finn-relaterte-ord.py -of cconj --djupn 1000 og0og1både3for3men3so vel som4eller6anten6verken7korkje
Viss me heller set søkjedjupna til uendeleg, får me òg med dei 2 siste:
$ ./finn-relaterte-ord.py -of cconj --djupn inf og0og1både3for3men3so vel som4eller6anten6verken7korkjeinfetinfså