[Python] Algoritmo di ricerca per parole

Daniele Varrazzo piro a develer.com
Mar 23 Set 2014 14:41:48 CEST


On 2014-09-23 12:07, Giuseppe Amato wrote:
> Buongiorno, sto scrivendo un programmino che mi faccia le 
> trasposizioni di
> x semitoni sulle tablature per chitarra. In pratica se ho C (Do) ed 
> alzo di
> un tono devo ottenere D (Re).
> Le tablature, anche se non standardizzate, le considero come formate 
> da una
> riga di accordi ed una di testo della canzone.
>
> Es.: Input
>     C      A       D
> testo testo testo testo
>
> +1 tono
>
> output
>     D      B       E
> testo testo testo testo
>
> Ora nel fare la trasposizione devo mantenere anche la spaziatura. Per 
> farlo
> ho utilizzato un for sui caratteri, ma credo che si possa fare pił
> velocemente analizzando le "parole" separate da spazi.
> Qualcuno ha qualche riferimento ad algoritmo o letteratura da 
> studiare?
> Grazie e ciao

Puoi usare un'espressione regolare per trovare l'alternanza di spazi e 
accordi:

     In [2]: s = "    C      A       D"

     In [3]: re.findall(r'( +)([^ ]+)', s)
     Out[3]: [('    ', 'C'), ('      ', 'A'), ('       ', 'D')]

poi, una volta che hai trasposto gli accordi (che magari cambiano 
lunghezza perche' hai ad es. C -> Bb) puoi regolare aggiungere o 
togliere spazi da quelli che hai trovato. Poi rimetti tutto insieme.

Per curiosita', avevo anche io provato a trasporre gli accordi [1] in 
quel programmino di cui parlavo qualche giorno fa. Non ho il problema 
della spaziatura perche' gli accordi non li definisco per posizione ma 
sono inseriti nel testo [C]cosi'. Ma il risultato non e' corretto 
perche' non gestisce le note enarmoniche (scrivo C#, ma a volte dovrebbe 
essere Db, a seconda della chiave della canzone). Tu sai come si fa?

[1] https://github.com/hammeruke/chordlab/blob/master/chordlib/xpose.py

-- Daniele


Maggiori informazioni sulla lista Python