Kirjautuminen

Haku

Tehtävät

Keskustelu: Yleinen keskustelu: Cambridge Dictionaryn haut

PetriKeckman [14.07.2022 13:09:36]

#

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ä.

https://petke.info/list2.exe

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

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta