Load definitions from online dictionary
This change adds the ability to load definitions of words from the University of Wisconsin Online Icelandic Dictionary at https://digicoll.library.wisc.edu/IcelOnline/Search.TEId.html The input file may now contain root words without pre-loaded definitions. The definitions will be loaded from the UW Online Dictionary and cached locally. Lookups are rate-limited to 1 request per second, so it will take a while to load a very long list of words.
This commit is contained in:
parent
7846174cce
commit
e996940789
File diff suppressed because it is too large
Load Diff
10
Cargo.toml
10
Cargo.toml
|
@ -5,7 +5,13 @@ authors = ["Seth Morabito <web@loomcom.com>"]
|
|||
edition = "2018"
|
||||
|
||||
[dependencies]
|
||||
genanki-rs = "0.1"
|
||||
clap = "2"
|
||||
csv = "1.1"
|
||||
genanki-rs = "0.1"
|
||||
rand = "0.8"
|
||||
clap = "2"
|
||||
regex = "1.5"
|
||||
reqwest = "0.11"
|
||||
select = "0.6.0-alpha.1"
|
||||
serde_json = "1.0"
|
||||
serde = "1.0"
|
||||
tokio = { version = "1.6", features = ["full"] }
|
|
@ -0,0 +1,2 @@
|
|||
edition = "2018"
|
||||
use_small_heuristics = "max"
|
|
@ -1,79 +1,79 @@
|
|||
alþjóðlegur international
|
||||
appelsínugulur orange
|
||||
auðveldur easy
|
||||
áhugasamur interested, keen
|
||||
ánægjulegur delightful
|
||||
bjartur bright
|
||||
blár blue
|
||||
bleikur pink
|
||||
brúnn brown
|
||||
dapur 1. sad, depressed; 2. poor, inadequate
|
||||
dimmur dark
|
||||
duglegur hard-working
|
||||
erfiður hard, difficult
|
||||
fallegur beautiful
|
||||
félagslyndur sociable
|
||||
fjólublár purple
|
||||
fjölbreyttur varied, many-sided
|
||||
flestur most
|
||||
frábær great, excellent
|
||||
frekur pushy, forward
|
||||
fróður knowledgeable, learned
|
||||
frægur famous
|
||||
fyndinn witty, funny
|
||||
gamall old
|
||||
gáfaður intelligent
|
||||
glaður 1. glad, happy, cheerful; 2. bright
|
||||
glæsilegur splendid, magnificent, elegant
|
||||
grár grey
|
||||
grænn green
|
||||
gulur yellow
|
||||
hamingjusamur happy
|
||||
heimsfrægur world-famous
|
||||
heimskur stupid
|
||||
heitur hot
|
||||
hlýr warm
|
||||
hreinn 1. clean; 2. pure
|
||||
hress 1. fit, well; 2. in high spirits, good form
|
||||
hvítur white
|
||||
hæfileikaríkur talented
|
||||
hægur 1. easy, convenient; 2. possible; 3. calm, quiet, slow
|
||||
kaldur cold
|
||||
kátur cheerful, merry, jolly
|
||||
kveðinn definite, certain
|
||||
kvíðinn fearful, anxious
|
||||
latur lazy
|
||||
leiðinlegur dull, boring
|
||||
léttur 1. light; 2. easy, light; 3. light, nimble; 4. cheerful, merry
|
||||
lítill little
|
||||
ljótur ugly
|
||||
margur many
|
||||
nógur enough, sufficient
|
||||
nýlegur recent
|
||||
nýr new
|
||||
ótrúlegur unbelievable
|
||||
óvinsæll unpopular
|
||||
óþekktur unknown
|
||||
rauður red
|
||||
rólegur 1. calm, quiet, tranquil; 2. slow
|
||||
saddur full, replete
|
||||
sérstakur unusual, special
|
||||
skemmtilegur fun, entertaining
|
||||
skýr intelligent
|
||||
sorglegur tragic, sad
|
||||
spennandi thrilling, exciting
|
||||
spenntur 1. expectant, eager, anxious; 2. tense, nervous, keyed up
|
||||
stórkostlegur great, magnificent, splendid
|
||||
svangur hungry
|
||||
svartur black
|
||||
svolítill a little bit
|
||||
tilbúinn ready, prepared
|
||||
ungur young
|
||||
vinsæll popular
|
||||
vondur bad, evil
|
||||
yndislegur wonderful, marvelous
|
||||
þreyttur tired, exhausted, fatigued
|
||||
þröngur crowded, confied, narrow
|
||||
þunglyndur depressed
|
||||
þyrstur thirsty
|
||||
örugglega 1. certainly, definitely; 2. with assurance
|
||||
alþjóðlegur "{""translations"":[{""meaning"":""international"",""usage"":null}]}"
|
||||
appelsínugulur "{""translations"":[{""meaning"":""orange, orange-colored/(UK) coloured"",""usage"":null}]}"
|
||||
auðveldur "{""translations"":[{""meaning"":""easy, simple"",""usage"":null}]}"
|
||||
bjartur "{""translations"":[{""meaning"":""bright, clear, shining"",""usage"":null}]}"
|
||||
bleikur "{""translations"":[{""meaning"":""pink, pale"",""usage"":null}]}"
|
||||
blár "{""translations"":[{""meaning"":""blue"",""usage"":null},{""meaning"":""unadulterated, pure"",""usage"":""eintómur""},{""meaning"":""be unaffected, natural"",""usage"":null}]}"
|
||||
brúnn "{""translations"":[{""meaning"":""brown"",""usage"":null}]}"
|
||||
dapur "{""translations"":[{""meaning"":""sad, depressed"",""usage"":""hryggur""},{""meaning"":""poor, inadequate"",""usage"":""lélegur""}]}"
|
||||
dimmur "{""translations"":[{""meaning"":""dark"",""usage"":""myrkur""},{""meaning"":""deep"",""usage"":""um rödd""},{""meaning"":""grave"",""usage"":""í málfr""}]}"
|
||||
duglegur "{""translations"":[{""meaning"":""energetic, hard-working, efficient"",""usage"":null}]}"
|
||||
erfiður "{""translations"":[{""meaning"":""difficult, hard"",""usage"":""torveldur""},{""meaning"":""wearying, fatiguing"",""usage"":""þreytandi""},{""meaning"":""troublesome"",""usage"":""ódæll""},{""meaning"":""stiff-necked, unwielding"",""usage"":""ósveigjanlegur""}]}"
|
||||
fallegur "{""translations"":[{""meaning"":""beautiful"",""usage"":null}]}"
|
||||
fjólublár "{""translations"":[{""meaning"":""violet"",""usage"":null}]}"
|
||||
fjölbreyttur "{""translations"":[{""meaning"":""varied, many-sided"",""usage"":null}]}"
|
||||
flestur "{""translations"":[{""meaning"":""many, a lot"",""usage"":""um mergð""},{""meaning"":""much, many things"",""usage"":""um mörg atriði""}]}"
|
||||
frekur "{""translations"":[{""meaning"":""pushy, forward"",""usage"":null}]}"
|
||||
frábær "{""translations"":[{""meaning"":""distinguished, excellent"",""usage"":null}]}"
|
||||
frægur "{""translations"":[{""meaning"":""famous"",""usage"":null}]}"
|
||||
fróður "{""translations"":[{""meaning"":""knowledgeable, learned, erudite, well-read"",""usage"":null}]}"
|
||||
fyndinn "{""translations"":[{""meaning"":""witty, funny"",""usage"":null}]}"
|
||||
félagslyndur "{""translations"":[{""meaning"":""sociable, gregarious"",""usage"":null}]}"
|
||||
gamall "{""translations"":[{""meaning"":""old, ancient"",""usage"":null}]}"
|
||||
glaður "{""translations"":[{""meaning"":""glad, happy, cheerful"",""usage"":""kátur""},{""meaning"":""bright"",""usage"":""bjartur""}]}"
|
||||
glæsilegur "{""translations"":[{""meaning"":""splendid, magnificent, elegant"",""usage"":null}]}"
|
||||
grár "{""translations"":[{""meaning"":""grey"",""usage"":null},{""meaning"":""white horse"",""usage"":null},{""meaning"":""deal harshly with sby"",""usage"":null}]}"
|
||||
grænn "{""translations"":[{""meaning"":""green"",""usage"":null}]}"
|
||||
gulur "{""translations"":[{""meaning"":""yellow"",""usage"":null}]}"
|
||||
gáfaður "{""translations"":[{""meaning"":""intelligent"",""usage"":null}]}"
|
||||
hamingjusamur "{""translations"":[{""meaning"":""happy"",""usage"":null}]}"
|
||||
heimsfrægur "{""translations"":[{""meaning"":""world-famous"",""usage"":null}]}"
|
||||
heimskur "{""translations"":[{""meaning"":""stupid"",""usage"":null}]}"
|
||||
heitur "{""translations"":[{""meaning"":""hot, warm"",""usage"":null}]}"
|
||||
hlýr "{""translations"":[{""meaning"":""warm"",""usage"":null}]}"
|
||||
hreinn "{""translations"":[{""meaning"":""clean"",""usage"":null},{""meaning"":""pure"",""usage"":""óblandaður""},{""meaning"":""it is not completely clear"",""usage"":null}]}"
|
||||
hress "{""translations"":[{""meaning"":""fit, well"",""usage"":""heilsugóður""},{""meaning"":""in high spirits, in good form"",""usage"":""kátur""}]}"
|
||||
hvítur "{""translations"":[{""meaning"":""white"",""usage"":null}]}"
|
||||
hæfileikaríkur "{""translations"":[{""meaning"":""talented"",""usage"":null}]}"
|
||||
hægur "{""translations"":[{""meaning"":""easy, convenient"",""usage"":""auðveldur""},{""meaning"":""possible"",""usage"":""mögulegur""},{""meaning"":""calm, quiet, slow"",""usage"":""stilltur""}]}"
|
||||
kaldur "{""translations"":[{""meaning"":""cold"",""usage"":null}]}"
|
||||
kveðinn "{""translations"":[{""meaning"":""say"",""usage"":""segja""},{""meaning"":""compose"",""usage"":""yrkja""},{""meaning"":""chant, intone"",""usage"":""syngja""},{""meaning"":""say of oneself"",""usage"":null},{""meaning"":""lay down, pronounce"",""usage"":""phrases""}]}"
|
||||
kvíðinn "{""translations"":[{""meaning"":""fearful, anxious, apprehensive"",""usage"":null}]}"
|
||||
kátur "{""translations"":[{""meaning"":""cheerful, merry, jolly"",""usage"":null}]}"
|
||||
latur "{""translations"":[{""meaning"":""lazy"",""usage"":null}]}"
|
||||
leiðinlegur "{""translations"":[{""meaning"":""dull, boring, tedious"",""usage"":""þreytandi""},{""meaning"":""sad"",""usage"":""sorglegur""}]}"
|
||||
ljótur "{""translations"":[{""meaning"":""ugly"",""usage"":""ófagur""},{""meaning"":""bad"",""usage"":""slæmur""}]}"
|
||||
léttur "{""translations"":[{""meaning"":""light"",""usage"":""ekki þungur""},{""meaning"":""easy, light"",""usage"":""ekki erfiður""},{""meaning"":""light, nimble"",""usage"":""léttfær""},{""meaning"":""cheerful, merry"",""usage"":""glaður""}]}"
|
||||
lítill "{""translations"":[{""meaning"":""small, short"",""usage"":""smár""},{""meaning"":""little, insignificant"",""usage"":""óverulegur""},{""meaning"":""short"",""usage"":""um tíma""},{""meaning"":""less than average"",""usage"":null},{""meaning"":""at least"",""usage"":null}]}"
|
||||
margur "{""translations"":[{""meaning"":""many, a lot"",""usage"":""um mergð""},{""meaning"":""much, many things"",""usage"":""um mörg atriði""}]}"
|
||||
nógur "{""translations"":[{""meaning"":""enough, sufficient, satisfactory"",""usage"":null}]}"
|
||||
nýlegur "{""translations"":[{""meaning"":""almost new, recent"",""usage"":null}]}"
|
||||
nýr "{""translations"":[{""meaning"":""new, fresh"",""usage"":null}]}"
|
||||
rauður "{""translations"":[{""meaning"":""red"",""usage"":null}]}"
|
||||
rólegur "{""translations"":[{""meaning"":""calm, quiet, tranquil"",""usage"":""stilltur""},{""meaning"":""slow"",""usage"":""hægur""}]}"
|
||||
saddur "{""translations"":[{""meaning"":""full, replete"",""usage"":null}]}"
|
||||
skemmtilegur "{""translations"":[{""meaning"":""amusing, funny"",""usage"":""fyndinn""},{""meaning"":""entertaining, diverting"",""usage"":""sem veitir skemmtun""},{""meaning"":""interesting"",""usage"":""forvitnilegur""}]}"
|
||||
skýr "{""translations"":[{""meaning"":""clear, distinct"",""usage"":""greinilegur""},{""meaning"":""lucid, readily-intelligible"",""usage"":""auðskilinn""},{""meaning"":""sharp, quick, intelligent"",""usage"":""greindur""}]}"
|
||||
sorglegur "{""translations"":[{""meaning"":""tragic, sad"",""usage"":""harmrænn""},{""meaning"":""sad, distressed"",""usage"":""ókátur""}]}"
|
||||
spennandi "{""translations"":[{""meaning"":""thrilling, exciting"",""usage"":null}]}"
|
||||
spenntur "{""translations"":[{""meaning"":""expectant, eager, anxious"",""usage"":""eftirvæntingarfullur""},{""meaning"":""tense, nervous, keyed up"",""usage"":""taugastrekktur""},{""meaning"":""be keen on sth, be excited about sth"",""usage"":null}]}"
|
||||
stórkostlegur "{""translations"":[{""meaning"":""great, magnificent, splendid"",""usage"":null}]}"
|
||||
svangur "{""translations"":[{""meaning"":""hungry"",""usage"":null}]}"
|
||||
svartur "{""translations"":[{""meaning"":""black"",""usage"":null}]}"
|
||||
svolítill "{""translations"":[{""meaning"":""small, little"",""usage"":""lítill""},{""meaning"":""a little"",""usage"":""dálítið""}]}"
|
||||
sérstakur "{""translations"":[{""meaning"":""separate"",""usage"":""einn sér""},{""meaning"":""particular"",""usage"":""frábrugðinn""},{""meaning"":""special, unusual"",""usage"":""óvenjulegur""}]}"
|
||||
tilbúinn "{""translations"":[{""meaning"":""ready"",""usage"":""reiðubúinn""},{""meaning"":""prepared"",""usage"":""viðbúinn""},{""meaning"":""fictional, fictitious"",""usage"":""upploginn""},{""meaning"":""ready-made"",""usage"":""fyrirframgerður""},{""meaning"":""artificial"",""usage"":""unninn af mönnum""}]}"
|
||||
ungur "{""translations"":[{""meaning"":""young"",""usage"":null}]}"
|
||||
vinsæll "{""translations"":[{""meaning"":""popular"",""usage"":null}]}"
|
||||
vondur "{""translations"":[{""meaning"":""bad, evil"",""usage"":""illur""},{""meaning"":""angry, mad"",""usage"":""reiður""},{""meaning"":""poor, bad, in bad shape"",""usage"":""lélegur""},{""meaning"":""he is a very bad man"",""usage"":null}]}"
|
||||
yndislegur "{""translations"":[{""meaning"":""wonderful, marvellous"",""usage"":null}]}"
|
||||
áhugasamur "{""translations"":[{""meaning"":""interested, keen"",""usage"":null}]}"
|
||||
ánægjulegur "{""translations"":[{""meaning"":""enjoyable, pleasant, delightful"",""usage"":null}]}"
|
||||
ótrúlegur "{""translations"":[{""meaning"":""unbelievable"",""usage"":null}]}"
|
||||
óvinsæll "{""translations"":[{""meaning"":""unpopular, disliked"",""usage"":null}]}"
|
||||
óþekktur "{""translations"":[{""meaning"":""unknown"",""usage"":null}]}"
|
||||
örugglega "{""translations"":[{""meaning"":""certainly, definitely"",""usage"":""áreiðanlega""},{""meaning"":""with assurance, securely"",""usage"":""af öryggi""}]}"
|
||||
þreyttur "{""translations"":[{""meaning"":""tired, exhausted, fatigued"",""usage"":null}]}"
|
||||
þröngur "{""translations"":[{""meaning"":""crowded, confined"",""usage"":""rúmlítill""},{""meaning"":""narrow"",""usage"":""krappur""},{""meaning"":""difficult"",""usage"":""erfiður""},{""meaning"":""close-fitting"",""usage"":""aðskorinn""}]}"
|
||||
þunglyndur "{""translations"":[{""meaning"":""sad, melancholy, depressed"",""usage"":null}]}"
|
||||
þyrstur "{""translations"":[{""meaning"":""thirsty"",""usage"":null}]}"
|
||||
|
|
|
|
@ -1,155 +1,155 @@
|
|||
aðalhlutverk main role
|
||||
afmælisveisla birthday party
|
||||
anddyri entrance, vestibule
|
||||
áhorfandi spectator, onlooker
|
||||
á river, stream
|
||||
belti 1. belt; 2. zone
|
||||
birta light, brightness
|
||||
bíll car, automobile
|
||||
bíó movie theater, cinema
|
||||
bíómynd film
|
||||
blaðagrein newspaper article
|
||||
borð 1. table, desk; 2. plank, board
|
||||
borg 1. city, town; 2. castle; 3. rocky hill; 4. shelter
|
||||
bók book
|
||||
bókmenntafræði literary studies, literature
|
||||
bróðir brother
|
||||
dagblað daily newspaper, daily
|
||||
dagur day
|
||||
dalur 1. valley, dale; 2. dollar
|
||||
diskur 1. plate; 2. (computer) disk
|
||||
dót 1. luggage, things; 2. toys; 3. rabble
|
||||
eignarfall genitive, possessive case
|
||||
fangelsi prison
|
||||
farangur luggage, baggage
|
||||
ferð 1. trip, journey; 2. speed
|
||||
fjall mountain
|
||||
forrit 1. computer program; 2. exemplar
|
||||
forritari computer programmer
|
||||
framtíð 1. future; 2. future tense
|
||||
frelsishetja freedom champion
|
||||
gaman fun, enjoyment
|
||||
gangstétt sidewalk
|
||||
gata street, way, path
|
||||
geisladiskur compact disc, CD
|
||||
greiða comb
|
||||
grein 1. branch, bough; 2. subject, field, speciality; 3. article; 4. paragraph; 5. point; 6. consideration
|
||||
gönguferð walk, hike
|
||||
handklæði towel
|
||||
handrit manuscript
|
||||
hangikjöt smoked meat
|
||||
haust autumn
|
||||
hálstafla throat lozenge, cough drop
|
||||
hár hair
|
||||
hárþurrka hair dryer
|
||||
herbergi room
|
||||
hestur horse
|
||||
hlutur 1. thing, object; 2. part, share
|
||||
hlutverk 1. task; 2. mission, role
|
||||
hreinleiki purity
|
||||
hús house, home
|
||||
hörkuvinna (very) hard work
|
||||
innsetning installation (as a work of art)
|
||||
kennari teacher
|
||||
kongur king
|
||||
kort map
|
||||
kóramót choir competition
|
||||
króna 1. Icelandic unit of currency; 2. tree-top, crown of a tree
|
||||
kvikmynd film, movie
|
||||
kvöldmatur supper, dinner
|
||||
kyrrð 1. silence, stillness; 2. peace and quiet
|
||||
leiðsögumaður travel guide, tour guide
|
||||
leikstjóri directory (of a film or play)
|
||||
listamaður artist
|
||||
listasafn art museum
|
||||
listaverk work of art
|
||||
listfræðingur art historian
|
||||
litur 1. color; 2. dye, coloring; 3. crayon; 4. suit (in cards)
|
||||
líf life
|
||||
lýsingarorð adjective
|
||||
maður 1. person, human being, individual; 2. man; 3. man! (interjection); 4. husband; 5. piece (in chess); 6. one, you
|
||||
mappa folder, file
|
||||
matur food
|
||||
málverk painting
|
||||
meistari master, maestro
|
||||
miðbær city center, downtown
|
||||
miði 1. slip of paper, note; 2. ticket
|
||||
mikill 1. large, big; 2. much; 3. great
|
||||
mót 1. meeting, gathering; 2. tournament, meet; 3. mould, form; 4. joint
|
||||
mynd 1. shape, form; 2. photograph, picture; 3. movie, film; 4. painting, picture; 5. illustration; 6. figure, diagram; 7. voice (grammar)
|
||||
nafnorð noun, substantive
|
||||
nammi candy, sweets
|
||||
nefnifall nominative case
|
||||
nemandi student, pupil
|
||||
nóta 1. note (music); 2. bill; 3. receipt; 4. comment, note
|
||||
ostur cheese
|
||||
persóna 1. person; 2. personality; 3. character
|
||||
peysa 1. sweater; 2. blouse (of icelandic national costume)
|
||||
piltur boy, young man
|
||||
popp 1. pop music; 2. popcorn
|
||||
pottur 1. pot; 2. liter; 3. chamber pot; 4. pot, pool (of money); 5. hot pool
|
||||
rós rose
|
||||
rúm 1. bed; 2. area, space
|
||||
rúta bus, coach
|
||||
safn 1. collection; 2. museum; 3. flock of sheep
|
||||
sagnorð verb
|
||||
samband 1. connection, contact; 2. relationship; 3. union, federation
|
||||
samloka 1. sandwich; 2. shellfish
|
||||
samúð sympathy, compassion
|
||||
sápa soap
|
||||
sími telephone
|
||||
sjampó shampoo
|
||||
skinka ham, smoked pork
|
||||
skógur forest, wood
|
||||
skór shoe
|
||||
sonur son
|
||||
sólarolía suntan oil
|
||||
sólbekkur 1. sunchair; 2. window sill
|
||||
spjall conversation, chat
|
||||
steinn stone
|
||||
stelpa girl
|
||||
stjórnandi 1. leader; 2. conductor
|
||||
stjórnmálamaður politician
|
||||
stóll chair
|
||||
strákur boy
|
||||
stytta statue
|
||||
stærðfræði mathematics
|
||||
sumar summer
|
||||
sundbolur swimsuit, bathing suit
|
||||
sundföt bathing suit
|
||||
sundgleraugu swimming goggles
|
||||
sundskýla swimming trunks
|
||||
súpa soup
|
||||
svefnpoki sleeping bag
|
||||
svæði area, zone
|
||||
systkini siblings
|
||||
söguþráður plot
|
||||
söngkona singer (female)
|
||||
söngvari singer
|
||||
taska 1. suitcase; 2. bag, handbag; 3. briefcase, case; 4. satchel
|
||||
torg city square
|
||||
tónlistarmaður 1. musician; 2. composer
|
||||
tónlist music
|
||||
tækifæri opportunity
|
||||
tölva computer
|
||||
tölvupóstur e-mail
|
||||
undantekning exception
|
||||
uppáhald pet, favorite
|
||||
upplýsing 1. information; 2. Enlightenment; 3. illumination, lighting
|
||||
vatn 1. water; 2. lake
|
||||
vefsíða web page
|
||||
veitingahús restaurant
|
||||
veitingastaður restaurant
|
||||
verðlaun 1. prize, award; 2. reward
|
||||
verkefni task, assignment, project
|
||||
vetur winter
|
||||
vél 1. motor, engine; 2. machine
|
||||
vina girl friend
|
||||
vinur friend
|
||||
vor spring
|
||||
þágufall dative case
|
||||
þjóðlistasafn national gallery
|
||||
þjóðminjasafn national museum
|
||||
þolfall accusative case
|
||||
æfing 1. training, practice; 2. exercise, drill; 3. rehersal
|
||||
öld 1. age (figurative); 2. century
|
||||
afmælisveisla "{""translations"":[{""meaning"":""birthday party"",""usage"":null}]}"
|
||||
anddyri "{""translations"":[{""meaning"":""entrance, vestibule"",""usage"":null}]}"
|
||||
aðalhlutverk "{""translations"":[{""meaning"":""main role"",""usage"":null}]}"
|
||||
belti "{""translations"":[{""meaning"":""belt"",""usage"":""mittisól""},{""meaning"":""zone"",""usage"":""svæði""},{""meaning"":""caterpillar tread"",""usage"":""keðja""}]}"
|
||||
birta "{""translations"":[{""meaning"":""light, brightness"",""usage"":null}]}"
|
||||
blaðagrein "{""translations"":[{""meaning"":""newspaper article"",""usage"":null}]}"
|
||||
borg "{""translations"":[{""meaning"":""city, town"",""usage"":""bær""},{""meaning"":""castle"",""usage"":""kastali""},{""meaning"":""rocky hill"",""usage"":""klettahæð""},{""meaning"":""shelter"",""usage"":""byrgi""}]}"
|
||||
borð "{""translations"":[{""meaning"":""table, desk"",""usage"":""plata á fótum""},{""meaning"":""plank, board"",""usage"":""planki""},{""meaning"":""go aboard, go on board"",""usage"":""skipshlið""},{""meaning"":""of the same caliber/(UK) calibre as sby"",""usage"":""phrases""}]}"
|
||||
bróðir "{""translations"":[{""meaning"":""brother"",""usage"":null}]}"
|
||||
bíll "{""translations"":[{""meaning"":""car, automobile"",""usage"":null}]}"
|
||||
bíó "{""translations"":[{""meaning"":""movie theater, (UK) cinema"",""usage"":null}]}"
|
||||
bíómynd "{""translations"":[{""meaning"":""film"",""usage"":null}]}"
|
||||
bók "{""translations"":[{""meaning"":""book"",""usage"":null}]}"
|
||||
bókmenntafræði "{""translations"":[{""meaning"":""literary studies, literature"",""usage"":null}]}"
|
||||
dagblað "{""translations"":[{""meaning"":""daily (news)paper, daily"",""usage"":null}]}"
|
||||
dagur "{""translations"":[{""meaning"":""day"",""usage"":null}]}"
|
||||
dalur "{""translations"":[{""meaning"":""valley, dale"",""usage"":""lægð""},{""meaning"":""dollar"",""usage"":""mynt""}]}"
|
||||
diskur "{""translations"":[{""meaning"":""plate"",""usage"":null},{""meaning"":""disk/disc"",""usage"":""í tölvu""}]}"
|
||||
dót "{""translations"":[{""meaning"":""luggage, things"",""usage"":""farangur""},{""meaning"":""toys"",""usage"":""leikföng""},{""meaning"":""rabble"",""usage"":""hyski""}]}"
|
||||
eignarfall "{""translations"":[{""meaning"":""genitive, possessive case"",""usage"":null}]}"
|
||||
fangelsi "{""translations"":[{""meaning"":""prison"",""usage"":null}]}"
|
||||
farangur "{""translations"":[{""meaning"":""luggage, baggage"",""usage"":null}]}"
|
||||
ferð "{""translations"":[{""meaning"":""trip, journey"",""usage"":""för""},{""meaning"":""speed"",""usage"":""hraði""}]}"
|
||||
fjall "{""translations"":[{""meaning"":""mountain"",""usage"":null}]}"
|
||||
forrit "{""translations"":[{""meaning"":""program, (UK) programme"",""usage"":""tölvu~""},{""meaning"":""exemplar"",""usage"":""heimild, sem skrifað er eftir""}]}"
|
||||
forritari "{""translations"":[]}"
|
||||
framtíð "{""translations"":[{""meaning"":""future"",""usage"":null},{""meaning"":""future tense"",""usage"":""í málfr""}]}"
|
||||
frelsishetja "{""translations"":[{""meaning"":""frredom champion"",""usage"":null}]}"
|
||||
gaman "{""translations"":[{""meaning"":""fun, enjoyment"",""usage"":null}]}"
|
||||
gangstétt "{""translations"":[{""meaning"":""sidewalk, (UK) pavement"",""usage"":null}]}"
|
||||
gata "{""translations"":[{""meaning"":""street, way, path"",""usage"":null}]}"
|
||||
geisladiskur "{""translations"":[{""meaning"":""compact disc, CD"",""usage"":null}]}"
|
||||
grein "{""translations"":[{""meaning"":""branch, bough"",""usage"":""á tré""},{""meaning"":""subject, field, speciality, specialty"",""usage"":""fag""},{""meaning"":""article"",""usage"":""blaða~""},{""meaning"":""paragraph"",""usage"":""laga~""},{""meaning"":""point"",""usage"":""atriði""},{""meaning"":""consideration"",""usage"":""athugun""}]}"
|
||||
greiða "{""translations"":[{""meaning"":""pay"",""usage"":""borga""},{""meaning"":""comb"",""usage"":null}]}"
|
||||
gönguferð "{""translations"":[{""meaning"":""walk, hike"",""usage"":null}]}"
|
||||
handklæði "{""translations"":[{""meaning"":""towel"",""usage"":null}]}"
|
||||
handrit "{""translations"":[{""meaning"":""manuscript"",""usage"":null}]}"
|
||||
hangikjöt "{""translations"":[{""meaning"":""smoked meat (esp lamb)"",""usage"":null}]}"
|
||||
haust "{""translations"":[{""meaning"":""fall, (UK) autumn"",""usage"":null}]}"
|
||||
herbergi "{""translations"":[{""meaning"":""room"",""usage"":null}]}"
|
||||
hestur "{""translations"":[{""meaning"":""horse"",""usage"":null}]}"
|
||||
hlutur "{""translations"":[{""meaning"":""thing, object"",""usage"":""gripur""},{""meaning"":""part, share"",""usage"":""hluti""}]}"
|
||||
hlutverk "{""translations"":[{""meaning"":""task"",""usage"":""verkefni""},{""meaning"":""mission, role"",""usage"":""ætlunarverk""}]}"
|
||||
hreinleiki "{""translations"":[{""meaning"":""purity"",""usage"":null}]}"
|
||||
hálstafla "{""translations"":[]}"
|
||||
hár "{""translations"":[{""meaning"":""hair"",""usage"":null}]}"
|
||||
hárþurrka "{""translations"":[{""meaning"":""dryer"",""usage"":null}]}"
|
||||
hörkuvinna "{""translations"":[{""meaning"":""(extremely) hard work"",""usage"":null}]}"
|
||||
hús "{""translations"":[{""meaning"":""house, home"",""usage"":null}]}"
|
||||
innsetning "{""translations"":[{""meaning"":""installation (as a work of art)"",""usage"":null}]}"
|
||||
kennari "{""translations"":[{""meaning"":""teacher"",""usage"":null}]}"
|
||||
kongur "{""translations"":[{""meaning"":""king"",""usage"":null}]}"
|
||||
kort "{""translations"":[{""meaning"":""map"",""usage"":""landa~""},{""meaning"":""postcard, card"",""usage"":""bréfspjald""}]}"
|
||||
króna "{""translations"":[{""meaning"":""króna, krone, crown (Icelandic unit of currency = 100 aurar)"",""usage"":""peningur""},{""meaning"":""tree-top, crown of a tree"",""usage"":""trjátoppur""}]}"
|
||||
kvikmynd "{""translations"":[{""meaning"":""film, movie"",""usage"":null}]}"
|
||||
kvöldmatur "{""translations"":[{""meaning"":""supper, dinner"",""usage"":null}]}"
|
||||
kyrrð "{""translations"":[{""meaning"":""silence, stillness"",""usage"":""þögn""},{""meaning"":""peace and quiet"",""usage"":""ró""}]}"
|
||||
kóramót "{""translations"":[]}"
|
||||
leikstjóri "{""translations"":[{""meaning"":""director (of a film, play)"",""usage"":null}]}"
|
||||
leiðsögumaður "{""translations"":[{""meaning"":""guide, travel guide"",""usage"":null}]}"
|
||||
listamaður "{""translations"":[{""meaning"":""artist"",""usage"":null}]}"
|
||||
listasafn "{""translations"":[{""meaning"":""art museum"",""usage"":null}]}"
|
||||
listaverk "{""translations"":[{""meaning"":""work of art"",""usage"":null}]}"
|
||||
listfræðingur "{""translations"":[{""meaning"":""art historian"",""usage"":null}]}"
|
||||
litur "{""translations"":[{""meaning"":""color, (UK) colour, hue"",""usage"":""farfi""},{""meaning"":""dye, coloring, (UK) colouring"",""usage"":""litarefni""},{""meaning"":""crayon"",""usage"":""vaxlitur o.s.frv.""},{""meaning"":""suit (in cards)"",""usage"":""í spilum""},{""meaning"":""show interest in sth"",""usage"":null}]}"
|
||||
líf "{""translations"":[{""meaning"":""life"",""usage"":null}]}"
|
||||
lýsingarorð "{""translations"":[{""meaning"":""adjective"",""usage"":null}]}"
|
||||
mappa "{""translations"":[{""meaning"":""folder, file"",""usage"":null}]}"
|
||||
matur "{""translations"":[{""meaning"":""food"",""usage"":null},{""meaning"":""he knows how to cash in on everything"",""usage"":null}]}"
|
||||
maður "{""translations"":[{""meaning"":""person, human being, individual"",""usage"":""manneskja""},{""meaning"":""man"",""usage"":""karlmaður""},{""meaning"":""man!"",""usage"":""óformlegt ávarp""},{""meaning"":""husband"",""usage"":""eiginmaður""},{""meaning"":""piece (in chess)"",""usage"":""í skák""},{""meaning"":""one, you"",""usage"":""fornafn""}]}"
|
||||
meistari "{""translations"":[{""meaning"":""master, maestro (in music)"",""usage"":null}]}"
|
||||
mikill "{""translations"":[{""meaning"":""large, big"",""usage"":""stór""},{""meaning"":""much"",""usage"":""um magn""},{""meaning"":""great"",""usage"":""stórkostlegur""}]}"
|
||||
miðbær "{""translations"":[{""meaning"":""city center, downtown area, (UK) city centre"",""usage"":null}]}"
|
||||
miði "{""translations"":[{""meaning"":""slip of paper, note"",""usage"":""seðill""},{""meaning"":""ticket"",""usage"":""aðgöngumiði""}]}"
|
||||
mynd "{""translations"":[{""meaning"":""shape, form"",""usage"":""lögun""},{""meaning"":""photo(graph), picture, snapshot"",""usage"":""ljósmynd""},{""meaning"":""movie, (UK) film"",""usage"":""bíómynd""},{""meaning"":""painting, picture"",""usage"":""málverk""},{""meaning"":""illustration"",""usage"":""myndskreyting""},{""meaning"":""figure, diagram"",""usage"":""skýringarmynd""},{""meaning"":""voice (in grammar)"",""usage"":""í málfr""},{""meaning"":""image (metaphor, etc)"",""usage"":""í skáldskap""},{""meaning"":""this is poorly done"",""usage"":""phrases""}]}"
|
||||
málverk "{""translations"":[{""meaning"":""painting"",""usage"":null}]}"
|
||||
mót "{""translations"":[{""meaning"":""meeting, gathering"",""usage"":""samkoma""},{""meaning"":""tournament, meet"",""usage"":""keppni""},{""meaning"":""mould, form"",""usage"":""form""},{""meaning"":""joint"",""usage"":""samskeyti""},{""meaning"":""in many different ways"",""usage"":""phrases""}]}"
|
||||
nafnorð "{""translations"":[{""meaning"":""noun, substantive"",""usage"":null}]}"
|
||||
nammi "{""translations"":[{""meaning"":""candy, (UK) sweets (baby talk for sth good to eat as in‘yummy, yummy')"",""usage"":null}]}"
|
||||
nefnifall "{""translations"":[{""meaning"":""nominative, nominative case"",""usage"":null}]}"
|
||||
nemandi "{""translations"":[{""meaning"":""student, pupil"",""usage"":null}]}"
|
||||
nóta "{""translations"":[{""meaning"":""note"",""usage"":""í músík""},{""meaning"":""bill"",""usage"":""reikningur""},{""meaning"":""receipt"",""usage"":""kvittun""},{""meaning"":""comment, note"",""usage"":""athugasemd""},{""meaning"":""be with it, know what is going on"",""usage"":null}]}"
|
||||
ostur "{""translations"":[{""meaning"":""cheese"",""usage"":null}]}"
|
||||
persóna "{""translations"":[{""meaning"":""person"",""usage"":""einstaklingur""},{""meaning"":""personality"",""usage"":""persónuleiki""},{""meaning"":""character"",""usage"":""~~ í skáldverki""}]}"
|
||||
peysa "{""translations"":[{""meaning"":""sweater, (UK) jersey"",""usage"":""ullarpeysa""},{""meaning"":""blouse (of the woman's Icelandic national costume)"",""usage"":""peysufatapeysa""}]}"
|
||||
piltur "{""translations"":[{""meaning"":""boy, young man"",""usage"":null}]}"
|
||||
popp "{""translations"":[{""meaning"":""pop music"",""usage"":""tónlist""},{""meaning"":""popcorn"",""usage"":""poppkorn""}]}"
|
||||
pottur "{""translations"":[{""meaning"":""pot"",""usage"":""ílát""},{""meaning"":""liter, (UK) litre"",""usage"":""mál""},{""meaning"":""chamber pot"",""usage"":""koppur""},{""meaning"":""pot, pool (of money)"",""usage"":""sjóður""},{""meaning"":""hot pool (small extra pool like a hot spring alongside a swimming pool)"",""usage"":""heitur pottur""},{""meaning"":""sth is well/badly prepared"",""usage"":""phrases""}]}"
|
||||
rós "{""translations"":[{""meaning"":""rose"",""usage"":null}]}"
|
||||
rúm "{""translations"":[{""meaning"":""bed"",""usage"":""rekkja""},{""meaning"":""area, space"",""usage"":""svæði""}]}"
|
||||
rúta "{""translations"":[{""meaning"":""coach, bus"",""usage"":""bíll""},{""meaning"":""route"",""usage"":""leið""}]}"
|
||||
safn "{""translations"":[{""meaning"":""collection"",""usage"":null},{""meaning"":""museum"",""usage"":""stofnun""},{""meaning"":""flock of sheep"",""usage"":""fjárhópur""}]}"
|
||||
sagnorð "{""translations"":[{""meaning"":""verb"",""usage"":null}]}"
|
||||
samband "{""translations"":[{""meaning"":""connection, contact"",""usage"":""tengsl""},{""meaning"":""relationship"",""usage"":""~~ fólks""},{""meaning"":""union, federation"",""usage"":""bandalag""}]}"
|
||||
samloka "{""translations"":[{""meaning"":""sandwich"",""usage"":""brauðsneiðar""},{""meaning"":""shellfish"",""usage"":""skelfiskur""},{""meaning"":""they are inseparable"",""usage"":null}]}"
|
||||
samúð "{""translations"":[{""meaning"":""sympathy, compassion"",""usage"":null}]}"
|
||||
sjampó "{""translations"":[{""meaning"":""shampoo"",""usage"":null}]}"
|
||||
skinka "{""translations"":[{""meaning"":""ham, smoked pork"",""usage"":null}]}"
|
||||
skógur "{""translations"":[{""meaning"":""forest, wood"",""usage"":null}]}"
|
||||
skór "{""translations"":[{""meaning"":""shoe"",""usage"":null}]}"
|
||||
sonur "{""translations"":[{""meaning"":""son"",""usage"":null}]}"
|
||||
spjall "{""translations"":[{""meaning"":""conversation, chat"",""usage"":null}]}"
|
||||
steinn "{""translations"":[{""meaning"":""stone"",""usage"":null}]}"
|
||||
stelpa "{""translations"":[{""meaning"":""girl"",""usage"":null}]}"
|
||||
stjórnandi "{""translations"":[{""meaning"":""leader"",""usage"":""foringi""},{""meaning"":""conductor"",""usage"":""hljómsveitarstjóri""},{""meaning"":""directors, the management"",""usage"":null}]}"
|
||||
stjórnmálamaður "{""translations"":[{""meaning"":""politician"",""usage"":null}]}"
|
||||
strákur "{""translations"":[{""meaning"":""boy"",""usage"":null}]}"
|
||||
stytta "{""translations"":[{""meaning"":""statue"",""usage"":null}]}"
|
||||
stærðfræði "{""translations"":[{""meaning"":""math, mathematics"",""usage"":null}]}"
|
||||
stóll "{""translations"":[{""meaning"":""chair"",""usage"":null}]}"
|
||||
sumar "{""translations"":[{""meaning"":""summer"",""usage"":null}]}"
|
||||
sundbolur "{""translations"":[{""meaning"":""swimsuit"",""usage"":null}]}"
|
||||
sundföt "{""translations"":[{""meaning"":""bathing suit"",""usage"":null}]}"
|
||||
sundgleraugu "{""translations"":[]}"
|
||||
sundskýla "{""translations"":[{""meaning"":""swimming trunks"",""usage"":null}]}"
|
||||
svefnpoki "{""translations"":[{""meaning"":""sleeping bag"",""usage"":null}]}"
|
||||
svæði "{""translations"":[{""meaning"":""area, zone"",""usage"":null}]}"
|
||||
systkini "{""translations"":[{""meaning"":""brothers and sisters, siblings"",""usage"":null}]}"
|
||||
sápa "{""translations"":[{""meaning"":""soap"",""usage"":null}]}"
|
||||
sími "{""translations"":[{""meaning"":""telephone"",""usage"":null}]}"
|
||||
sólarolía "{""translations"":[{""meaning"":""suntan oil/lotion"",""usage"":null}]}"
|
||||
sólbekkur "{""translations"":[{""meaning"":""window sill"",""usage"":null}]}"
|
||||
söguþráður "{""translations"":[{""meaning"":""plot"",""usage"":null}]}"
|
||||
söngkona "{""translations"":[{""meaning"":""singer (female)"",""usage"":null}]}"
|
||||
söngvari "{""translations"":[{""meaning"":""singer"",""usage"":null}]}"
|
||||
súpa "{""translations"":[{""meaning"":""soup"",""usage"":null}]}"
|
||||
taska "{""translations"":[{""meaning"":""suitcase"",""usage"":""ferða~""},{""meaning"":""bag, handbag"",""usage"":""hand~""},{""meaning"":""briefcase, case, attaché case"",""usage"":""skjala~""},{""meaning"":""satchel"",""usage"":""skóla~""}]}"
|
||||
torg "{""translations"":[{""meaning"":""(city) square"",""usage"":null}]}"
|
||||
tækifæri "{""translations"":[{""meaning"":""opportunity"",""usage"":null}]}"
|
||||
tónlist "{""translations"":[{""meaning"":""music"",""usage"":null}]}"
|
||||
tónlistarmaður "{""translations"":[{""meaning"":""musician"",""usage"":""hljóðfæraleikari""},{""meaning"":""composer"",""usage"":""tónskáld""}]}"
|
||||
tölva "{""translations"":[{""meaning"":""computer"",""usage"":null}]}"
|
||||
tölvupóstur "{""translations"":[{""meaning"":""e-mail"",""usage"":null}]}"
|
||||
undantekning "{""translations"":[{""meaning"":""exception"",""usage"":null}]}"
|
||||
upplýsing "{""translations"":[{""meaning"":""information"",""usage"":null},{""meaning"":""Enlightenment"",""usage"":""fræðslustefna""},{""meaning"":""illumination, lighting"",""usage"":""það að lýsa upp""}]}"
|
||||
uppáhald "{""translations"":[{""meaning"":""pet, favorite, (UK) favourite"",""usage"":null}]}"
|
||||
vatn "{""translations"":[{""meaning"":""water"",""usage"":""lögur""},{""meaning"":""lake"",""usage"":""stöðu~""},{""meaning"":""they could not keep back their tears, they could not contain themselves"",""usage"":""phrases""}]}"
|
||||
vefsíða "{""translations"":[{""meaning"":""web page"",""usage"":null}]}"
|
||||
veitingahús "{""translations"":[{""meaning"":""restaurant"",""usage"":null}]}"
|
||||
veitingastaður "{""translations"":[]}"
|
||||
verkefni "{""translations"":[{""meaning"":""task, assignment, project"",""usage"":null}]}"
|
||||
verðlaun "{""translations"":[{""meaning"":""prize, award"",""usage"":""sigurlaun""},{""meaning"":""reward"",""usage"":""laun""}]}"
|
||||
vetur "{""translations"":[{""meaning"":""winter"",""usage"":null}]}"
|
||||
vina "{""translations"":[{""meaning"":""girl friend"",""usage"":null}]}"
|
||||
vinur "{""translations"":[{""meaning"":""friend"",""usage"":null}]}"
|
||||
vor "{""translations"":[{""meaning"":""spring"",""usage"":null}]}"
|
||||
vél "{""translations"":[{""meaning"":""motor, engine"",""usage"":""hreyfill""},{""meaning"":""machine"",""usage"":""tæki""}]}"
|
||||
á "{""translations"":[{""meaning"":""river, stream"",""usage"":null}]}"
|
||||
áhorfandi "{""translations"":[{""meaning"":""spectator, onlooker"",""usage"":null}]}"
|
||||
æfing "{""translations"":[{""meaning"":""training, practice"",""usage"":""þjálfun""},{""meaning"":""exercise, drill"",""usage"":""þjálfunarverkefni""},{""meaning"":""rehearsal"",""usage"":""~ leikrits""},{""meaning"":""go to a training session"",""usage"":null}]}"
|
||||
öld "{""translations"":[{""meaning"":""age"",""usage"":""tímabil""},{""meaning"":""century"",""usage"":""hundrað ár""},{""meaning"":""from time immemorial"",""usage"":""phrases""}]}"
|
||||
þjóðlistasafn "{""translations"":[]}"
|
||||
þjóðminjasafn "{""translations"":[{""meaning"":""national museum"",""usage"":null}]}"
|
||||
þolfall "{""translations"":[{""meaning"":""accusative (case)"",""usage"":null}]}"
|
||||
þágufall "{""translations"":[{""meaning"":""dative"",""usage"":null}]}"
|
||||
|
|
|
|
@ -1 +0,0 @@
|
|||
skoða 1. observe, take a look at; 2. examine, study, scrutinize; 3. consider, study
|
|
|
@ -0,0 +1,117 @@
|
|||
use std::borrow::Borrow;
|
||||
use std::time::Duration;
|
||||
|
||||
use genanki_rs::Error;
|
||||
use regex::Regex;
|
||||
use select::document::Document;
|
||||
use select::predicate::{Class, Name, Predicate};
|
||||
use serde::{Deserialize, Serialize};
|
||||
|
||||
use std::fmt::{self, Display, Formatter};
|
||||
|
||||
#[derive(PartialEq, Clone, Debug, Serialize, Deserialize)]
|
||||
pub struct Translation {
|
||||
pub meaning: String,
|
||||
pub usage: Option<String>,
|
||||
}
|
||||
|
||||
#[derive(PartialEq, Clone, Debug, Serialize, Deserialize)]
|
||||
pub struct Definition {
|
||||
pub translations: Vec<Translation>,
|
||||
}
|
||||
|
||||
impl Display for Translation {
|
||||
fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result {
|
||||
match &self.usage {
|
||||
Some(usage) => {
|
||||
write!(f, "({}) {}", usage, self.meaning)
|
||||
}
|
||||
None => {
|
||||
write!(f, "{}", self.meaning)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl Display for Definition {
|
||||
fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result {
|
||||
match &self.translations.len() {
|
||||
1 => {
|
||||
write!(f, "{}", &self.translations.get(0).unwrap())
|
||||
}
|
||||
_ => {
|
||||
write!(
|
||||
f,
|
||||
"{}",
|
||||
&self
|
||||
.translations
|
||||
.iter()
|
||||
.enumerate()
|
||||
.map(|(i, t)| format!("{}. {}", i + 1, t))
|
||||
.collect::<Vec<String>>()
|
||||
.join("; ")
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl Translation {
|
||||
pub fn new(translation: String, usage: Option<String>) -> Self {
|
||||
Translation { meaning: translation, usage }
|
||||
}
|
||||
}
|
||||
|
||||
/// Look up a root word in the Online Icelandic Dictionary and return
|
||||
/// a vector of definitions for the root.
|
||||
pub async fn search(client: &reqwest::Client, word: &str) -> Result<Definition, Error> {
|
||||
println!("Searching Icelandic online dictionary for definitions: {}", word);
|
||||
|
||||
let url = format!("https://digicoll.library.wisc.edu/cgi-bin/IcelOnline/IcelOnline.TEId-idx?type=simple&size=First+100&rgn=lemma&q1={}&submit=Search", word);
|
||||
|
||||
// Dictionary entries may contain a slash or numbers for disambiguation.
|
||||
// These must be removed before comparison.
|
||||
let lemma_re = Regex::new(r"[\d/]+").unwrap();
|
||||
let res = client.get(url).send().await?.text().await?;
|
||||
let document = Document::from(res.borrow());
|
||||
|
||||
match document.select(Class("results")).next() {
|
||||
Some(result_list) => {
|
||||
let lemma = result_list
|
||||
.select(Class("lemma"))
|
||||
.find(|n| lemma_re.replace_all(&n.text(), "") == word)
|
||||
.unwrap();
|
||||
// TODO: Error handling!
|
||||
let link = lemma.select(Name("a")).next().unwrap().attr("href").unwrap();
|
||||
let res = client
|
||||
.get(format!("https://digicoll.library.wisc.edu{}", link))
|
||||
.send()
|
||||
.await?
|
||||
.text()
|
||||
.await?;
|
||||
let document = Document::from(res.borrow());
|
||||
Ok(Definition { translations: get_translations(&document) })
|
||||
}
|
||||
|
||||
None => Ok(Definition { translations: get_translations(&document) }),
|
||||
}
|
||||
}
|
||||
|
||||
/// Return definitions contained in a dictionary entry page.
|
||||
fn get_translations(document: &Document) -> Vec<Translation> {
|
||||
std::thread::sleep(Duration::from_secs(1));
|
||||
|
||||
document
|
||||
.select(Class("entry").child(Class("sense")))
|
||||
.map(|n| {
|
||||
let usg = n.select(Class("usg")).next();
|
||||
let trans = n.select(Class("trans")).next();
|
||||
match (trans, usg) {
|
||||
(Some(trans), Some(usg)) => Some(Translation::new(trans.text(), Some(usg.text()))),
|
||||
(Some(trans), None) => Some(Translation::new(trans.text(), None)),
|
||||
(_, _) => None,
|
||||
}
|
||||
})
|
||||
.flatten()
|
||||
.collect::<Vec<Translation>>()
|
||||
}
|
210
src/main.rs
210
src/main.rs
|
@ -1,11 +1,16 @@
|
|||
use clap::{arg_enum, value_t, App, Arg};
|
||||
use genanki_rs::{Deck, Error, Field, Model, Note, Template};
|
||||
use rand::prelude::*;
|
||||
use std::borrow::Borrow;
|
||||
use std::collections::HashMap;
|
||||
use std::collections::BTreeMap;
|
||||
use std::time::SystemTime;
|
||||
|
||||
const CSS: &'static str = "\
|
||||
use crate::dictionary::Definition;
|
||||
use clap::{arg_enum, value_t, App, Arg};
|
||||
use csv::{ReaderBuilder, WriterBuilder};
|
||||
use genanki_rs::{Deck, Error, Field, Model, Note, Template};
|
||||
use rand::prelude::*;
|
||||
|
||||
mod dictionary;
|
||||
|
||||
const CSS: &str = "\
|
||||
.card {\
|
||||
font-family: arial;\
|
||||
font-size: 20px; \
|
||||
|
@ -24,7 +29,7 @@ td {\
|
|||
padding: 6px;\
|
||||
}";
|
||||
|
||||
const ADJ_TMPL: &'static str = r#"{{FrontSide}}
|
||||
const ADJ_TMPL: &str = r#"{{FrontSide}}
|
||||
<hr id="forms">
|
||||
<table>
|
||||
<tr>
|
||||
|
@ -38,8 +43,7 @@ const ADJ_TMPL: &'static str = r#"{{FrontSide}}
|
|||
</tr>
|
||||
</table>
|
||||
<hr id="definition">
|
||||
<p>{{Definition}}</p>
|
||||
"#;
|
||||
<p>{{Definition}}</p>"#;
|
||||
|
||||
arg_enum! {
|
||||
#[derive(PartialEq, Debug)]
|
||||
|
@ -50,7 +54,7 @@ arg_enum! {
|
|||
}
|
||||
|
||||
struct Adjective {
|
||||
definition: String,
|
||||
definition: Definition,
|
||||
masc_singular: Option<String>,
|
||||
fem_singular: Option<String>,
|
||||
neut_singular: Option<String>,
|
||||
|
@ -60,9 +64,9 @@ struct Adjective {
|
|||
}
|
||||
|
||||
impl Adjective {
|
||||
fn new(definition: &str) -> Self {
|
||||
fn new(definition: Definition) -> Self {
|
||||
Adjective {
|
||||
definition: String::from(definition),
|
||||
definition,
|
||||
masc_singular: None,
|
||||
fem_singular: None,
|
||||
neut_singular: None,
|
||||
|
@ -77,45 +81,52 @@ impl Adjective {
|
|||
fn random_id() -> Result<usize, Error> {
|
||||
let mut rng = thread_rng();
|
||||
let delta: usize = rng.gen_range(0..100);
|
||||
Ok(SystemTime::now()
|
||||
.duration_since(SystemTime::UNIX_EPOCH)?
|
||||
.as_millis() as usize
|
||||
+ delta)
|
||||
Ok(SystemTime::now().duration_since(SystemTime::UNIX_EPOCH)?.as_millis() as usize + delta)
|
||||
}
|
||||
|
||||
/// Consume a tab-separated file, each line of which must be in the
|
||||
/// format "<word>\t<definition>", and return a map between the two.
|
||||
fn build_map(file: &str) -> HashMap<String, String> {
|
||||
let mut reader = csv::ReaderBuilder::new()
|
||||
.delimiter(b'\t')
|
||||
.from_path(file)
|
||||
.unwrap();
|
||||
async fn read_word_map(file_name: &str) -> BTreeMap<String, Definition> {
|
||||
let client = reqwest::Client::new();
|
||||
let mut result: BTreeMap<String, Definition> = BTreeMap::new();
|
||||
|
||||
reader
|
||||
.records()
|
||||
.map(|r| {
|
||||
let record = r.unwrap();
|
||||
let root = record.get(0).unwrap();
|
||||
let definition = record.get(1).unwrap();
|
||||
(root.to_owned(), definition.to_owned())
|
||||
})
|
||||
.collect()
|
||||
if let Ok(mut reader) =
|
||||
ReaderBuilder::new().has_headers(false).delimiter(b'\t').flexible(true).from_path(file_name)
|
||||
{
|
||||
for record in reader.records().flatten() {
|
||||
if let Some(root) = record.get(0) {
|
||||
// TODO: Error Handling
|
||||
let definition = match record.get(1) {
|
||||
Some(json) => serde_json::from_str::<Definition>(json).unwrap(),
|
||||
None => dictionary::search(&client, &root).await.unwrap(),
|
||||
};
|
||||
|
||||
result.insert(root.to_owned(), definition);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
result
|
||||
}
|
||||
|
||||
fn update_word_map(file_name: &str, word_map: &BTreeMap<String, Definition>) {
|
||||
if let Ok(mut writer) =
|
||||
WriterBuilder::new().has_headers(false).delimiter(b'\t').from_path(file_name)
|
||||
{
|
||||
word_map.iter().for_each(|(k, v)| {
|
||||
let definition = serde_json::to_string(v).unwrap();
|
||||
let _ = writer.write_record(&[k, &definition]);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
/// Build an Anki deck based on adjectives
|
||||
fn adjectives(
|
||||
word_list: &str,
|
||||
word_map: &BTreeMap<String, Definition>,
|
||||
csv_file: &str,
|
||||
deck_id: usize,
|
||||
model_id: usize,
|
||||
) -> Result<Deck, Error> {
|
||||
let adj_map = build_map(word_list);
|
||||
|
||||
let mut deck = Deck::new(
|
||||
deck_id,
|
||||
"Icelandic Adjectives",
|
||||
"Deck for studying Icelandic adjectives",
|
||||
);
|
||||
let mut deck =
|
||||
Deck::new(deck_id, "Icelandic Adjectives", "Deck for studying Icelandic adjectives");
|
||||
|
||||
let model = Model::new_with_options(
|
||||
model_id,
|
||||
|
@ -129,64 +140,60 @@ fn adjectives(
|
|||
Field::new("NeutPl"),
|
||||
Field::new("Definition"),
|
||||
],
|
||||
vec![Template::new("Card 1")
|
||||
.qfmt("<h1>{{MascSg}}</h1>")
|
||||
.afmt(ADJ_TMPL)],
|
||||
Some(CSS.clone()),
|
||||
vec![Template::new("Card 1").qfmt("<h1>{{MascSg}}</h1>").afmt(ADJ_TMPL)],
|
||||
Some(CSS),
|
||||
None,
|
||||
None,
|
||||
None,
|
||||
None,
|
||||
);
|
||||
|
||||
let mut db_reader = csv::ReaderBuilder::new()
|
||||
.delimiter(b';')
|
||||
.from_path(csv_file)?;
|
||||
let mut db_reader =
|
||||
ReaderBuilder::new().has_headers(false).delimiter(b';').from_path(csv_file)?;
|
||||
|
||||
let mut adjective_cards: HashMap<String, Adjective> = HashMap::new();
|
||||
let mut adjective_cards: BTreeMap<String, Adjective> = BTreeMap::new();
|
||||
|
||||
for result in db_reader.records() {
|
||||
let record = result?;
|
||||
let root = record.get(0).unwrap();
|
||||
let key = record.get(2).unwrap();
|
||||
|
||||
if adj_map.contains_key(root) && key == "lo" {
|
||||
if word_map.contains_key(root) && key == "lo" {
|
||||
if !adjective_cards.contains_key(root) {
|
||||
let definition = adj_map.get(root).unwrap();
|
||||
adjective_cards.insert(String::from(root), Adjective::new(definition));
|
||||
if let Some(definition) = word_map.get(root) {
|
||||
adjective_cards.insert(String::from(root), Adjective::new(definition.clone()));
|
||||
}
|
||||
}
|
||||
|
||||
let card = adjective_cards.get_mut(root).unwrap();
|
||||
if let Some(card) = adjective_cards.get_mut(root) {
|
||||
let form = record.get(5).unwrap();
|
||||
let decl = record.get(4).unwrap().to_owned();
|
||||
|
||||
let form = record.get(5).unwrap();
|
||||
let decl = record.get(4).unwrap().to_owned();
|
||||
|
||||
match form {
|
||||
"FSB-KK-NFET" => card.masc_singular = Some(decl),
|
||||
"FSB-KVK-NFET" => card.fem_singular = Some(decl),
|
||||
"FSB-HK-NFET" => card.neut_singular = Some(decl),
|
||||
"FSB-KK-NFFT" => card.masc_plural = Some(decl),
|
||||
"FSB-KVK-NFFT" => card.fem_plural = Some(decl),
|
||||
"FSB-HK-NFFT" => card.neut_plural = Some(decl),
|
||||
_ => {}
|
||||
match form {
|
||||
"FSB-KK-NFET" => card.masc_singular = Some(decl),
|
||||
"FSB-KVK-NFET" => card.fem_singular = Some(decl),
|
||||
"FSB-HK-NFET" => card.neut_singular = Some(decl),
|
||||
"FSB-KK-NFFT" => card.masc_plural = Some(decl),
|
||||
"FSB-KVK-NFFT" => card.fem_plural = Some(decl),
|
||||
"FSB-HK-NFFT" => card.neut_plural = Some(decl),
|
||||
_ => {}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Now map over the adjectives and build cards.
|
||||
for (key, val) in adjective_cards {
|
||||
println!("adding {}...", key);
|
||||
|
||||
for (_, val) in adjective_cards {
|
||||
let note = Note::new(
|
||||
model.clone(),
|
||||
vec![
|
||||
val.masc_singular.unwrap_or(String::from("")).borrow(),
|
||||
val.fem_singular.unwrap_or(String::from("")).borrow(),
|
||||
val.neut_singular.unwrap_or(String::from("")).borrow(),
|
||||
val.masc_plural.unwrap_or(String::from("")).borrow(),
|
||||
val.fem_plural.unwrap_or(String::from("")).borrow(),
|
||||
val.neut_plural.unwrap_or(String::from("")).borrow(),
|
||||
val.definition.borrow(),
|
||||
val.masc_singular.unwrap_or_else(String::new).borrow(),
|
||||
val.fem_singular.unwrap_or_else(String::new).borrow(),
|
||||
val.neut_singular.unwrap_or_else(String::new).borrow(),
|
||||
val.masc_plural.unwrap_or_else(String::new).borrow(),
|
||||
val.fem_plural.unwrap_or_else(String::new).borrow(),
|
||||
val.neut_plural.unwrap_or_else(String::new).borrow(),
|
||||
&val.definition.to_string(),
|
||||
],
|
||||
);
|
||||
|
||||
|
@ -197,14 +204,14 @@ fn adjectives(
|
|||
}
|
||||
|
||||
/// Build an Anki deck based on nouns
|
||||
fn nouns(word_list: &str, csv_file: &str, deck_id: usize, model_id: usize) -> Result<Deck, Error> {
|
||||
let noun_map = build_map(word_list);
|
||||
|
||||
let mut deck = Deck::new(
|
||||
deck_id,
|
||||
"Icelandic Noun Plurals",
|
||||
"Deck for studying Icelandic noun plurals",
|
||||
);
|
||||
fn nouns(
|
||||
word_map: &BTreeMap<String, Definition>,
|
||||
csv_file: &str,
|
||||
deck_id: usize,
|
||||
model_id: usize,
|
||||
) -> Result<Deck, Error> {
|
||||
let mut deck =
|
||||
Deck::new(deck_id, "Icelandic Noun Plurals", "Deck for studying Icelandic noun plurals");
|
||||
|
||||
let model = Model::new_with_options(
|
||||
model_id,
|
||||
|
@ -218,16 +225,15 @@ fn nouns(word_list: &str, csv_file: &str, deck_id: usize, model_id: usize) -> Re
|
|||
vec![Template::new("Card 1")
|
||||
.qfmt("<h1>{{Singular}}</h1>")
|
||||
.afmt(r#"{{FrontSide}}<hr id="plural"><h2>{{Plural}} ({{Gender}})</h2> <p>{{Definition}}</p>"#)],
|
||||
Some(CSS.clone()),
|
||||
Some(CSS),
|
||||
None,
|
||||
None,
|
||||
None,
|
||||
None,
|
||||
);
|
||||
|
||||
let mut db_reader = csv::ReaderBuilder::new()
|
||||
.delimiter(b';')
|
||||
.from_path(csv_file)?;
|
||||
let mut db_reader =
|
||||
ReaderBuilder::new().has_headers(false).delimiter(b';').from_path(csv_file)?;
|
||||
|
||||
for result in db_reader.records() {
|
||||
let record = result?;
|
||||
|
@ -236,8 +242,7 @@ fn nouns(word_list: &str, csv_file: &str, deck_id: usize, model_id: usize) -> Re
|
|||
|
||||
if "alm" == class && "NFFT" == form {
|
||||
if let Some(root) = record.get(0) {
|
||||
if noun_map.contains_key(root) {
|
||||
println!("adding {}...", root);
|
||||
if word_map.contains_key(root) {
|
||||
let gender = match record.get(2).unwrap() {
|
||||
"kk" => "masc.",
|
||||
"hk" => "neut.",
|
||||
|
@ -245,9 +250,13 @@ fn nouns(word_list: &str, csv_file: &str, deck_id: usize, model_id: usize) -> Re
|
|||
_ => "...",
|
||||
};
|
||||
let plural = record.get(4).unwrap();
|
||||
let definition = noun_map.get(root).unwrap();
|
||||
let note = Note::new(model.clone(), vec![root, plural, gender, definition]);
|
||||
deck.add_note(note.unwrap());
|
||||
if let Some(definition) = word_map.get(root) {
|
||||
let note = Note::new(
|
||||
model.clone(),
|
||||
vec![root, plural, gender, &definition.to_string()],
|
||||
);
|
||||
deck.add_note(note.unwrap());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -256,7 +265,8 @@ fn nouns(word_list: &str, csv_file: &str, deck_id: usize, model_id: usize) -> Re
|
|||
Ok(deck)
|
||||
}
|
||||
|
||||
fn main() -> Result<(), Error> {
|
||||
#[tokio::main]
|
||||
async fn main() -> Result<(), Box<dyn std::error::Error>> {
|
||||
let matches = App::new("BÍN Scraper")
|
||||
.version("1.0")
|
||||
.author("Seth Morabito")
|
||||
|
@ -322,17 +332,25 @@ fn main() -> Result<(), Error> {
|
|||
None => random_id().unwrap(),
|
||||
};
|
||||
|
||||
println!(
|
||||
"Generating Anki deck with id `{}`, model id `{}`.",
|
||||
deck_id, model_id
|
||||
);
|
||||
println!("Generating Anki deck with id `{}`, model id `{}`.", deck_id, model_id);
|
||||
|
||||
println!("Loading {}...", input_file);
|
||||
let word_map = read_word_map(input_file).await;
|
||||
|
||||
// TODO: A builder pattern would probably be nice here.
|
||||
println!("Starting Anki deck generation...");
|
||||
let deck = match category {
|
||||
Category::Nouns => nouns(input_file, csv_file, deck_id, model_id)?,
|
||||
Category::Adjectives => adjectives(input_file, csv_file, deck_id, model_id)?,
|
||||
Category::Nouns => nouns(&word_map, csv_file, deck_id, model_id)?,
|
||||
Category::Adjectives => adjectives(&word_map, csv_file, deck_id, model_id)?,
|
||||
};
|
||||
|
||||
println!("Saving Anki deck...");
|
||||
deck.write_to_file(deck_file)?;
|
||||
|
||||
// TODO: Back up original file
|
||||
println!("Updating {}...", input_file);
|
||||
update_word_map(input_file, &word_map);
|
||||
|
||||
println!("Done!");
|
||||
Ok(())
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue