[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