Karl Ove Hufthammer

Finn det rette ordet med finn-relaterte-ord

(oppdatert )

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 installasjons­instruksjonar 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 datavirus
1 antivirus         1 virus              2 drivar      2 makk         2 ormstukken     2 smitte                 
1 antivirusprogram  2 HPV-virus          2 hiv         2 nettlesar    2 program        2 stålorm                
1 dataangrep        2 anti-              2 hivvirus    2 nukleinsyre  2 programfil     2 tekstbehandlingsverktøy
1 dataorm           2 antiviral          2 hoggorm     2 orme         2 programvare    2 teksthandsamingsverktøy
1 dataprogram       2 antivirusmedisin   2 infeksjon   2 ormebol      2 protein        2 ureine                 
1 dataåtak          2 app                2 innvolsorm  2 ormeham      2 rundorm        2 viral                  
1 infisere          2 brukargrensesnitt  2 kålorm      2 ormehovud    2 skriveprogram  2 virologi               
1 infisert          2 buorm              2 leddorm     2 ormeskinn    2 slange         2 virulent               
1 orm               2 datasnoking

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øter
1 bastard       4 -id       4 kryss                4 leggje i kors   5 B         5 H-dur          5 avskjere     
2 bastardisere  4 baute     4 kryss-stille         4 leggje i kross  5 Ciss-dur  5 andreaskross   5 avskoren     
2 hybrid        4 blanding  4 krysse ein sjekk     4 patruljere      5 D-dur     5 antoniuskross  5 baut         
2 krysning      4 fekte     4 krysse fingrane for  4 skjere          5 E-dur     5 audmykje seg   5 beite        
3 hybrid        4 korse     4 krysse klinger       4 slage           5 Fiss-dur  5 avkryssing     5 blande       
3 hybridisere   4 kross     4 krysse nokon         5 -oid            5 G-dur     5 avpatruljere   5 blandingshøve
3 krysse        4 krosse    4 kryssing             5 A-dur           5 Giss-dur  5 avskjer        5 blandkorn    
3 mellomting

(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øter
1 bandhund                  1 galne hundar får rive skinn  2 [134996]           2 dunder                    
1 bandtvang                 1 gå i hundane                 2 [134997]           2 elgjakt                   
1 bastard                   1 hunda                        2 MMR-vaksine        2 faen                      
1 bikkje                    1 hundfare                     2 band               2 fan                       
1 bisk                      1 ikkje skode hunden på håra   2 banning            2 fanden                    
1 buhund                    1 pokker                       2 bastardisere       2 fanden er laus            
1 der ligg hunden gravlagd  1 politihund                   2 bikkjeskinn        2 fanden og hans oldemor    
1 ein hund etter            1 raude hundar                 2 bisk               2 fanden veit               
1 ein vittig hund           1 skipshund                    2 bissevov           2 fandens                   
1 elghund                   1 som ein hund                 2 blåse i            2 fanken                    
1 fanden                    1 som hund og katt             2 bu                 2 fyle                      
1 flygande hund             1 trekkhund                    2 dra fanden i vald  2 før fanden har fått sko på
1 fuglehund                 2 [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 advent
1 adventist      1 førjulstid    3 lysestake     4 stake      5 brakett      5 einstaka         5 hoftehaldar
1 adventssøndag  2 adventsstake  4 haldar        5 -ar        5 bretthaldar  5 føredragshaldar  5 kopphaldar 
1 adventstid     2 førjul        4 messingstake  5 bokhaldar  5 brysthaldar  5 haldsbukk

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 advent
1 adventist      1 adventstid  2 adventsstake  2 førjul  3 lysestake  4 haldar  4 messingstake  4 stake
1 adventssøndag  1 fø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 advent
1 adventist
1 adventssøndag
1 adventstid
1 førjulstid
2 adventsstake

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 drama
1 dramatikar (NOUN)          2 spel (NOUN)              3 dramatisk (ADJ)            
1 dramatisere (VERB)         2 spele skodespel (EXPR)   3 drive spel med nokon (EXPR)
1 drastisk (ADJ)             2 spelstykke (NOUN)        3 dryge (VERB)               
1 familiedrama (NOUN)        2 sterk (ADJ)              3 drygsel (NOUN)             
1 lesedrama (NOUN)           2 stor (ADJ)               3 duellspel (NOUN)           
1 samtidsdrama (NOUN)        2 teaterstykke (NOUN)      3 edru (ADJ)                 
1 skodespel (NOUN)           3 angrep (NOUN)            3 einstroken oktav (EXPR)    
1 ungdomsdrama (NOUN)        3 angrepsspel (NOUN)       3 eitrande (ADJ)             
2 commedia dell'arte (NOUN)  3 avlig (ADJ)              3 evlig (ADJ)                
2 dramatisering (NOUN)       3 avtalt spel (EXPR)       3 fast (ADJ)                 
2 dryg (ADJ)                 3 ballspel (NOUN)          3 felespel (NOUN)            
2 filmatisere (VERB)         3 brettspel (NOUN)         3 filmatisering (NOUN)       
2 forstille seg (EXPR)       3 dataspel (NOUN)          3 filme (VERB)               
2 krass (ADJ)                3 det sterke kjønn (EXPR)  3 forstille (VERB)           
2 samtidsdramatikk (NOUN)    3 distrahere (VERB)        3 frek (ADJ)                 
2 scenestykke (NOUN)         3 djup (ADJ)               3 fritt spel (EXPR)          
2 skodespelforfattar (NOUN)  3 dramatikk (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 kortspel
2 blande korta            2 spele korta sine godt                               3 setje farge på            
2 gode kort på handa      2 sterkt kort                                         3 setje noko på kartet      
2 kaste korta             2 syne korta                                          3 slutte medan leiken er god
2 kike nokon i korta      3 dei norske fargane                                  3 som ein leik              
2 leggje korta på bordet  3 den som er med på leiken, får [smake|tole] steiken  3 stiv som ein pinne        
2 liggje i korta          3 gå over stokk og stein                              3 stiv som ein stokk        
2 setje alt på eitt kort  3 ha klippekort på                                    3 ta farge av               
2 sikkert kort            3 kartet stemmer ikkje med terrenget                  3 vere med på leiken        
2 sitje med svarteper     3 på leik                                             3 vise 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 hei
1 hallo     1 hu       3 god kveld   4 bravo  4 jøss        5 bitterdø    5 haldt  5 hoi   5 mi sel   5 oi  
1 halloi    2 heia     3 god morgon  4 heil   5 basta       5 bravissimo  5 hau    5 jyss  5 mi sjel  5 tupp
1 hei sann  3 god dag  3 god natt    4 hui    5 beiskedaud

Vil me heller vil uttrykka avsky, kan me sjå etter interjeksjonar som er relaterte til ordet «æsj»:

$ ./finn-relaterte-ord.py -f intj æsj
1 fysj  2 fy   3 pytt  4 faen       4 søren  4 tvibrent  4 uff  5 fanden  5 farken  5 føkk  5 huff  5 sytten
1 isj   3 føy  3 tvi   4 pytt 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 ordliste 
1 ordbok (55195)                 3 bok (7331)                     3 kladdebok (38598)            
1 rettskrivingsordliste (61574)  3 bokform (7356)                 3 konvensjon (41089)           
1 vokabular (90716)              3 bøk (9995)                     3 konversasjonsleksikon (41098)
2 bibelordbok (5745)             3 bøkenes bok (120967)           3 leksikalsk (45192)           
2 bok (7330)                     3 bønebok (10046)                3 leksikograf (45193)          
2 framandordbok (21526)          3 dagbok (10715)                 3 leksikologi (45196)          
2 leksikon (45197)               3 e-bok (120439)                 3 leksikonartikkel (45198)     
2 norm (53082)                   3 ei lukka bok (121224)          3 lese som ei open bok (120963)
2 ordsamling (55293)             3 eit levande leksikon (112774)  3 lommebok (46437)             
2 ordtilfang (55308)             3 evangeliebok (16075)           3 lov (46551)                  
2 rettskrivingsordbok (116556)   3 eventyrbok (16092)             3 målestav (51383)             
2 synonymordbok (76487)          3 forskrift (20855)              3 normal (53084)               
3 aktivt ordtilfang (131962)     3 framandord (21525)             3 normativ (53113)             
3 allkunnebok (913)              3 ha hug til boka (120968)       3 oppslagsverk (54999)         
3 ark (2387)                     3 ha pengar på bok (120969)      3 ordfang (55218)              
3 barnebok (4677)                3 handle på bok (114580)         3 ordforråd (55223)            
3 bibelkonkordans (5735)         3 institusjon (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 hoppe
1 avlshoppe                                         1 hoppe på     1 skvette   2 drifse        2 håmerr       
1 bykse                                             1 hoppeføl     1 sprette   2 føl           2 jump         
1 det er like godt å hoppe i det som å krype i det  1 hoppestrikk  1 tobbe     2 hann          2 kime         
1 ho                                                1 hopping      2 alshoppe  2 hofisk        2 kipe seg     
1 hopp                                              1 horse        2 alsmerr   2 hokjønn       2 kipen        
1 hoppe av                                          1 hufse        2 and       2 hors          2 kombinertrenn
1 hoppe av i svingen                                1 jumpe        2 avl       2 horseføl      2 krype        
1 hoppe etter Wirkola                               1 kipe         2 avlsmerr  2 hufs          2 kveppe       
1 hoppe inn i                                       1 merr         2 brume     2 hufse på seg  2 mulesel      
1 hoppe over                                        1 muldyr       2 byks      2 hyfse         2 renne

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 hoppe
0 hoppe (NOUN) (31275)
0 hoppe (VERB) (31276)
1 avlshoppe (NOUN) (3721)
1 bykse (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 31276
1 bykse                                             1 hoppestrikk  2 drifse        2 kipen          2 skutte  
1 det er like godt å hoppe i det som å krype i det  1 hopping      2 ho            2 kombinertrenn  2 skvasle 
1 hopp                                              1 hufse        2 hoppeføl      2 krype          2 skvelpe 
1 hoppe                                             1 jumpe        2 horse         2 kveppe         2 skvett  
1 hoppe av                                          1 kipe         2 hufs          2 merr           2 skvette 
1 hoppe av i svingen                                1 skvette      2 hufse på seg  2 muldyr         2 skvetten
1 hoppe etter Wirkola                               1 sprette      2 hyfse         2 renne          2 skvinkle
1 hoppe inn i                                       2 avlshoppe    2 jump          2 riste          2 skvisle 
1 hoppe over                                        2 brume        2 kime          2 rykkje         2 skvitre 
1 hoppe på                                          2 byks         2 kipe seg      2 skihopping     2 sluske

Me kan eventuelt avgrensa oss til berre verb:

$ ./finn-relaterte-ord.py -f verb 31276
1 bykse    1 sprette  2 krype   2 skutte    2 skvisle  2 spritle  3 aule    3 drive       3 fjakle  3 fosse 
1 hufse    2 brume    2 kveppe  2 skvasle   2 skvitre  2 sprute   3 bivre   3 dysse       3 fjasle  3 fyke  
1 jumpe    2 drifse   2 renne   2 skvelpe   2 sluske   2 støkke   3 breste  3 fare        3 fjeske  3 gidre 
1 kipe     2 hyfse    2 riste   2 skvette   2 spenne   2 vimse    3 darre   3 filleriste  3 flyte   3 gruvle
1 skvette  2 kime     2 rykkje  2 skvinkle  2 sprinte  3 asne     3 dildre  3 firre       3 flæse   3 grø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 og
0 og  1 både  3 for  3 men  3 so vel som  4 eller  6 anten  6 verken  7 korkje

Viss me heller set søkjedjupna til uendeleg, får me òg med dei 2 siste:

$ ./finn-relaterte-ord.py -of cconj --djupn inf og
0 og  1 både  3 for  3 men  3 so vel som  4 eller  6 anten  6 verken  7 korkje  inf et  inf

Legg til kommentar

E-postadressa vert ikkje synleg for andre. Obligatoriske felt er merkte med *.