Gå til innhold

Finne grepene i et gitartabulatur


Anbefalte innlegg

Jeg trenger en funskjon for å finne grepene i et gitartabulatur. Jeg har laget denne:

 

import cPickle
import time

f = file("chordlist.pcl", 'rb')
chords = cPickle.load(f)
f.close()
   
def find_chords(value):
   found = []

   value = value.split('\n')
   i1 = 0
   for line in value:
       line = line.split(' ')
       i2 = 0
       for word in line:
           word = word.strip()
           if word in chords:
               line[i2] = '<a href="" onclick="return false" onmouseover="showToolTip(\''+word+'\')" onmouseout="hideToolTip()">' + word + '</a>'
               found.append(word)
           i2 += 1
       value[i1] = ' '.join(line) 
       i1 += 1
   value = '\n'.join(value)
           
   value += '</pre>'
   
   for c in set(found):
       value += '\n<pre id="' + c + '" class="chordpopup">' + c + '\n<script type="text/javascript">displayChord(\'' + chords[c] + '\')</script></pre>'

   return value

content = open("marit_larsen__come_closer.txt").read()

time.clock()
i = 0
while i != 10000:
   find_chords(content)
   i += 1
print time.clock() 
#tar ca 20 sek på min maskin.


 

Den skal brukes til å merke av grepene slik at de blir linker på en webside. Det er ganske viktig at den er rask så jeg trenger tips til forbedringer eller andre måter å gjøre det på, slik at den blir raskere, uten at den hopper over for mange grep.

 

 

Grep listen kan lastes ned her: http://files.myopera.com/Pitmairen/files/chordlist.pcl Det er en python pickle file(protocol 2) som inneholder en dictionary som er slik:

{"grepnavn" : "fingersetting"}

text liste http://files.myopera.com/Pitmairen/files/chordlist.txt

 

En tab for testing: http://files.myopera.com/Pitmairen/files/m...come_closer.txt

Endret av FraXinuS
Lenke til kommentar
Videoannonse
Annonse

Jeg har kikket litt på dette, men uten å se lyset. Det er noe råttent med hele filformatet. Greit nok å identifisere grep som Cadd9, men hva med f.eks Em/D# ?

 

Jeg tror rett og slett at jeg ville pre-prosessert (delvis manuelt?) fila og tagget alle grepene, f.eks <chord>Cadd9</chord>, <chord>Em</chord>/<chord>D#</chord> og gjort global search/replace.

Lenke til kommentar

Å tagge grepene går jo, men da må jeg nesten lagre filene to ganger i tilfelle jeg skal bruke filene til noe annet enn html.

 

men vet du om det er mulig å få til noe slikt som dette med re.sub:

import re
text = "fe ew few <chord>D</chord> efewf"
chords = {"D" : "xx0323"}
re.sub(r"<chord>(.*?)</chord>",  r'<a href="' + chords[r'\1'] + r'">\1</a>' , text)

Bruker man en streng så blir jo \1 byttet ut med gruppe 1, men er det mulig å få tak i den verdien på en måte og bruke den slik som eksempelet over?

 

 

Men vurderer om jeg kanskje bare skal lage det i javascript istedet, så slipper jeg å gjøre det på serveren.

 

 

edit:

fant ut det med re.sub, kan bruke en funkson istedet for en streng.

Endret av FraXinuS
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...