Traducció

Traducció

Un diccionari té per clau una paraula en una llengua i per valor una llista de les traduccions d’aquesta paraula en altres llengües. Per exemple:

>>> dt1 = {
... 'gat': ['gato', 'chat', 'cat'],
... 'casa': ['casa', 'maison', 'house'],
... 'serp': ['serpiente', 'serpent', 'snake'],
... }

Totes les paraules del diccionari tenen el mateix nombre de traduccions i sempre en el mateix ordre. L’identificador d’una llengua és la posició que ocupa en la llista de traduccions. En el cas de l’exemple, l’identificador 1 correspon al castellà, 2 al francès i 3 a l’anglès. L’identificador 0 és sempre el de la llengua de la clau (català en el cas de l’exemple).

Dissenyeu la funció:

traduccio.traduccio(paraula, dic, llengua)

Donat un diccionari com el descrit i donat un identificador de llengua retorna la paraula expressada en la llengua. Si la paraula no és al diccionari retorna “”.

Per exemple:

>>> traduccio.traduccio('f', dt1, 2)
''
>>> traduccio.traduccio('gat', dt1, 0) 
'gat'
>>> traduccio.traduccio('casa', dt1, 3) 
'house'

Disposeu de jocs de prova al fitxer traduccio.txt.

Creació d’una llista d’imatges

Un diccionari té per clau el nom d’una categoria d’objectes i per valor una llista de tuples compostes pel nom d’un objecte de la categoria i el nom d’un fitxer d’imatge que conté una il·lustració de l’objecte. Per exemple:

>>> dc1 = {
... 'eina':[('escaire','esca_001.jpg'), ('martell', 'figures/martell.jpg')],
... 'animal':[('gat', 'miau.jpg'), ('serp', '../../figures/snake.jpg'), ('conill', 'conill.jpg')]
... }

Dissenyeu la funció llista_imatges que, donat un diccionari com el descrit, un diccionari de traduccions com el de la pregunta 1, el nom d’una categoria i l’identificador d’una llengua, retorni una llista de tuples (n,nf), essent n el nom de l’objecte de la categoria donada expressat en la llengua donada i nf el nom del fitxer de la imatge corresponent. La llista retornada ha d’estar ordenada pel nom dels objectes. Suposeu que el nom en el diccionari de categories està escrit en la mateixa llengua que en les claus del diccionari de traducció. Si la categoria no existeix, la funció ha de retornar la llista buida. Només s’han d’incloure a la llista els noms que estiguin als dos diccionaris.

traduccio.llista_imatges(diccat, dictrad, categoria, llengua)

Donat un diccionari de categories, un diccionari de llengües, una categoria i un identificador de llengua, retorna una llista ordenada de parelles (nom, nom_de_fitxer) amb el nom expressat en la llengua indicada.

Per exemple:

>>> traduccio.llista_imatges(dc1, dt1, 'flor', 2)
[]
>>> traduccio.llista_imatges(dc1, dt1, 'animal', 2)
[('chat', 'miau.jpg'), ('serpent', '../../figures/snake.jpg')]

Creació del diccionari de traduccions a partir d’un fitxer de text

Un fitxer de text conté la traducció de paraules en diverses llengües. S’estructura en línies en les que les diverses traduccions estan separades per “:” (dos punts). Si hi ha espais en blanc, cal eliminar-los. Per exemple, el fitxer trad.txt conté:

gat : gato : chat : cat
casa:casa: maison : house
serp:serpiente : serpent:snake

Dissenyeu una funció que donat el nom d’un fitxer amb el format descrit retorni un diccionari de traducció com el de la funció traduccio(). Comproveu que les paraules del diccionari creat no contenen espais en blanc ni salts de línia.

traduccio.creadictrad(nomfitxer)

Retorna un diccionari de traduccions a partir del fitxer de text

Per exemple:

>>> d = traduccio.creadictrad('trad.txt')
>>> assert d == dt1, "Els diccionaris següents haurien de ser iguals:\n{}\n{}".format(d, dt1)

Creació del diccionari de categories a partir d’un fitxer de text

Un fitxer de text conté la llista dels noms de fitxers amb il·lustracions de diversos objectes. Està estructurat en línies, un objecte per línia, i en cada línia hi ha el nom de l’objecte, la categoria i el nom del fitxer que conté la il·lustració, separats per “:”. Si hi ha espais en blanc, cal eliminar-los. Per exemple, el fitxer cat.txt conté:

gat     : animal : miau.jpg
serp    : animal :../../figures/snake.jpg
martell :  eina  :  hammer.jpg
conill  : animal : conill.jpg
escaire :  eina  : esca_001.jpg

Dissenyeu una funció que, donat el nom d’un fitxer com el descrit, retorni un diccionari de categories com el de la funció llista_imatges(). Assegureu-vos que les paraules del diccionari creat no contenen espais en blanc ni salts de línia. Suposeu que no hi ha accents ni dièresis a les paraules del fitxer.

traduccio.creadiccat(nomfitxer)

Retorna un diccionari de traduccions a partir del fitxer de text

Per exemple:

>>> d = traduccio.creadiccat('cat.txt')
>>> assert d == dc1, "Els diccionaris següents haurien de ser iguals:\n{}\n{}".format(d, dc1)

Solució

Disposeu d’una solució al fitxer traduccio.py. Us encoratgem a resoldre el problema abans de mirar la solució. Useu-la per comparar-la amb la vostra.