Kun Cambridge Dictionaryssä https://dictionary.cambridge.org/ etsii sanalle merkitystä, saa yleensä ison listan synonyymeista. Kun hakee näille synonyymeille merkitystä käy yleensä samoin. Hakua voi jatkaa synonyymien synonyymeihin, jolloin saa jo pitkän listan, yleensä.
Cambridge Dictionaryn tulokset jakautuvat kahteen luokkaan: synonyymeille ja listaan muille sanaan liittyville hauille. Teen alla olevalla ohjelmalla molemmat haut. Ensin haen synonyymit, laitan ne sanat listaan, sitten haen lisäksi Dictionarysta hakulistan mukaiset haut. Joka tilanteessa päivitän sanat listaa ja listaa, missä ovat jo haetut sanat, ettei samalla sanalla tehdä useita hakuja.
Ensin on siis haettava listaa aliohjelmalla haesanatlistasta ja sen jälkeen haesanat aliohjelma, pareittain.
Ehkä sekavaa? Joka tapauksessa tarvitsin ohjelmaani, kun tein tätä lyhytelokuvaa https://youtu.be/c-OH4_d_VUI tälle festarille: https://filmfreeway.com/ESMoAVideoArtFilmFestival Teemana "bliss".
EDIT:
Tuli taas paranneltua videoo. Otin turhat kikkailut pois ja muutin niitä enemmän sanomaa tukeviksi. Nyt se on valmis! :) Vai vieläköhän...jotain parantelis? https://youtu.be/TyBMLZFwT0A
Viime vuonnahan pääsin jopa semifinaaliin tällä lyhytelokuvallani https://youtu.be/mC41xmiDzKA samassa festarissa, missä teemana oli "blue"
Ohjelmalla ei kannata paljoa leikkiä, eikä kovin montaa tasoa alaspäin mennä - siitä ei ole vastaavaa hyötyäkään, koska sanojen merkitykset muuttuvat äkkiä kauaksi alkuperäisestä sanasta - koska ohjelma rasittaa Dictionaryn serveriä.
Julkaisen ohjelman vain täällä ohjelmointiputkassa ja toivon, että ohjelmaa ei levitetä. Tietysti toisaalta, nettisivut ovat tehty latauksia varten, mutta on vähän rumaa ladata niitä ohjelmallisesti?
EDIT: Ohjelma toimi tarkoituksellisesti minun tarpeissani mutta näyttää tuottavan liian pitkälle meneviä tuloksia monilla muilla sanoilla. Siis sanojen merkitysten merkitykset karkaavat liian pitkälle. Lisäksi huomasin juuri, että Dictionaryn haut tuottavat sivun alas myös "Browse" listauksen, mikä kannattaisi ottaa mukaan...No, eka versio on aina eka versio. Tokaan laitan graafisen käyttöliittymän, mistä sana syötetään.
Red[] substr: func [string start length][ ;aliohjelma alimerkkijonon tuottamiseen copy/part at string start length ] puhdistasana: func [sana][ ;dictionaryn jatkolistauksessa sanaan ;tulee välitägejä, jotka täytyy puhdistaa pois sana2: "" indeksi: 0 loop length? sana [ indeksi: indeksi + 1 if (substr sana indeksi 1) = "<" [ while [not (substr sana indeksi 1) = ">"][ indeksi: indeksi + 1 ] ] sana2: rejoin [sana2 (substr sana indeksi 1)] ] sana2: replace/all sana2 "<" "" sana2: replace/all sana2 ">" "" sana: sana2 ] lmrk: to-char 34 ;lainausmerkki sanat: copy[] ;lista löydetyille sanoille eli synonyymeille johaetutlistasta: copy[] ;lista sanoista, joilla ollaan jo haettu listaa hakusanoista johaetut: copy[] ;lista sanoista, joilla ollaan jo haettu etsi1: rejoin ["<a title=" lmrk] etsi2: rejoin ["<span class=" lmrk "base" lmrk ">"] etsi3: "<" etsi4: ">" etsi5: "</span></span></span>" etsi6: lmrk haesanatlistasta: func[][ ; Hakee sanat liittyviin hakuihin sivut Cambridge Dictionarysta i: 1 loop (length? sanat) [ if not find johaetut sanat/(i) [ tiedosto: read to-url rejoin ["https://dictionary.cambridge.org/search/english/?q=" sanat/(i)] append johaetutlistasta sanat/(i) while [tiedosto: find tiedosto etsi2][ loop ((length? etsi2) + 1) [tiedosto: next tiedosto] tiedosto: find tiedosto etsi4 indeksi1: index? tiedosto tiedosto: find tiedosto etsi5 indeksi2: index? tiedosto sana: substr tiedosto 1 (indeksi1 - indeksi2 + 1) ;print [sana "******"] sana: puhdistasana sana if not find sanat sana [append sanat sana] tiedosto: next tiedosto i: i + 1 ] ] ] ] haesanathausta: func[][ ; Suorittaa varsinaiset haut ja hakee synonyymit i: 1 loop (length? sanat) [ if not find johaetut sanat/(i) [ tiedosto: read to-url rejoin ["https://dictionary.cambridge.org/dictionary/english/" sanat/(i)] append johaetut sanat/(i) while [tiedosto: find tiedosto etsi1][ loop ((length? etsi1) + 1) [tiedosto: next tiedosto] indeksi1: index? tiedosto tiedosto: find tiedosto etsi6 indeksi2: index? tiedosto sana: substr tiedosto 1 (indeksi1 - indeksi2 - 1) if not find sanat sana [append sanat sana] tiedosto: next tiedosto i: i + 1 ] ] ] ] append sanat "bliss" ;Ensimmäinen sana laitetaan listaan print "Odota hetki..." haesanatlistasta ; haetaan ensimmäisen tason tulos, millä sadaan ; lista sanoista, joiden perusteella saadaan lista sanoista, ; joiden haut liittyvät sanaan haesanathausta ; suoritetaan varsinaiset haut ja etsitään synonyymeja ; röyhkeästi rasitetaan Dictionaryä ja tehdään uusi kiekka, eli haetaan sanat ; listan perusteella lisää sanoja (näin ei kyllä kovin montaa uutta sanaa yleensä ; löydetä - aina ei edes yhtään!! Sanat kiertävät merkityksissään eräällä tavalla 'ympyrää') ; ELI: näin ei itseasiassa rasitetakaan Dictionaryä enemmillä haulla :) haesanatlistasta haesanathausta ;kolmatta kiekkaa ei enä kehdata tehdä...(Vaikka kun kokeilin, niin ei tullut uusia sanoja ;ja silmämääräisesti sanakirjaa tarkastellen ohjelmassa ei silti ole bugia tämän osalta (?)) i: 1 loop (length? sanat) [ print sanat/(i) i: i + 1 ] print length? sanat halt
Ohjelma tulosti:
Odota hetki... bliss bliss (someone) out ignorance is bliss idiom abandon afterglow beatitude bed bed of roses idiom delirium ecstasy feast felicity fulfilment fun gaiety gladness goody joyfulness joyousness jubilation like a dog with two tails idiom mirth savour 23
Aihe on jo aika vanha, joten et voi enää vastata siihen.