Suponha escreveu um livro e tem dois
índices: um, com os capítulos e as páginas de início e de fim do capítulo. Outro, o índice remissivo, com as palavras e as páginas onde ocorrem. Pretendemos estabelecer uma nova
associação em que as palavras têm associadas os capítulos onde aparecem. Vejamos como podemos resolver esta questão. Comecemos por pensar na organização dos índices: como dicionários.
indice = {'c1':[1,34], 'c2': [35,42], 'c3':[43,52],'c4':[53,60]}
remissivo = {‘p1':[2,54],'p2':[36,37,50],'p3':[40]}
Agora a solução. Sabemos que queremos passar das palavras aos capítulos. Então uma ideia simples é a de percorrer os dicionários das palavras e, por cada palavra e por cada página em que ocorre, procurar qual o capítulo.
def cap_pal(indice, remissivo):
# inicializa novo dicionário
sol = dict()
# percorre indice remissivo por palavra
for palavra, pgs in remissivo.items():
# percorre por pagina
# para cada pagina onde ocorre a palavra determina o capitaulo
# actualiza o dicionário e passa à palavra seguinte
return sol
Tornemos este esboço mais concreto.
def cap_pal(indice, remissivo):
sol = dict()
# percorre por palavra
for palavra, pgs in remissivo.items():
# percorre por pagina
cap = []
for pagina in pgs:
c = capitulo(indice,pagina)
if c not in cap:
cap.append(c)
sol[palavra] = cap
return sol
Esta solução tem o cuidado de
não acrescentar mais do que uma vez o capítulo, ou seja, se a palavra ocorrer mais do que uma vez no capítulo tal só é indicado uma vez. Mas falta-nos escrever o código que determina em que capítulo está uma dada página.
def capitulo(dicio,pg):
for ch, val in dicio.items():
if val[0] <= pg <= val[1]:
return ch
return None
Percorremos o dicionário extraindo as páginas de início e de fim para cada capítulo e tentamos saber em que intervalo está a nossa página, para definir o capítulo.
E pronto. Podemos passar ao exercício seguinte…
Sem comentários:
Enviar um comentário