FraXinuS Skrevet 17. februar 2007 Del Skrevet 17. februar 2007 (endret) 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 17. februar 2007 av FraXinuS Lenke til kommentar
zeitgeist Skrevet 19. februar 2007 Del Skrevet 19. februar 2007 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
FraXinuS Skrevet 19. februar 2007 Forfatter Del Skrevet 19. februar 2007 (endret) Å 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 19. februar 2007 av FraXinuS Lenke til kommentar
Anbefalte innlegg
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 kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå