[Python] ricerca di stringhe in un testo
Giovanni Porcari
giovanni.porcari a softwell.it
Mer 26 Giu 2013 16:13:54 CEST
Il giorno 26/giu/2013, alle ore 15:22, Riccardo mancuso <mancuso.riccardo63 a gmail.com> ha scritto:
> ciao a tutti,
> vi propongo questo problema (premesso che io non ci sono riuscito).
> Devo trovare in quali punti sono presenti dei termini all'interno di una frase.
> Ad esempio, prendendo il primo canto dell'inferno:
>
> "
> Nel mezzo del cammin di nostra vita
> mi ritrovai per una selva oscura
> ché la diritta via era smarrita.
> Ahi quanto a dir qual era è cosa dura
> esta selva selvaggia e aspra e forte
> che nel pensier rinova la paura!
> Tant'è amara che poco è più morte;
> ma per trattar del ben ch'i' vi trovai,
> dirò de l'altre cose ch'i' v'ho scorte.
> Io non so ben ridir com'i' v'intrai,
> tant'era pien di sonno a quel punto
> che la verace via abbandonai.
> Ma poi ch'i' fui al piè d'un colle giunto,
> là dove terminava quella valle
> che m'avea di paura il cor compunto,
> guardai in alto, e vidi le sue spalle
> vestite già de' raggi del pianeta
> che mena dritto altrui per ogne calle.
> Allor fu la paura un poco queta
> che nel lago del cor m'era durata
> la notte ch'i' passai con tanta pieta.
> E come quei che con lena affannata
> uscito fuor del pelago a la riva
> si volge a l'acqua perigliosa e guata,
> così l'animo mio, ch'ancor fuggiva,
> si volse a retro a rimirar lo passo
> che non lasciò già mai persona viva."
>
> se voglio cercare la parola "via" essa sarà presente alla 3° ed alla 12° riga.
> Come posso effettuare la ricerca con python ?
> va bene, al posto della riga, anche la posizione vettoriale assoluta (tenendo condo che il primo carattere ha posizione 0, il secondo 1 e così via).
> In sostanza alla fine vorrei avere un dizionario/vettore, con l'indicazione della posizione di cui sopra.
>
NON è il modo giusto ma solo per divertirsi:
testo='.........'
result=dict()
[[result.setdefault(parola,[]).append((riga,k)) for k,parola in enumerate( [x for x in line.split(' ') if x])] for riga,line in enumerate (testo.split('\n'))]
che ti crea un indice delle parole e per ogni parola
rende una lista di tuple (indice riga, indice parola)
Ripeto non è il modo giusto ma è sempre divertente sfruttare le potenzialità di python.
Adesso sono sicuro che salteranno fuori soluzioni ancora più compatte :D
Ciao
G
Maggiori informazioni sulla lista
Python