Exemple #1
0
def featureList(pairs):
  features = list()

  markov = Markov()

  # go from the feature representation of the data (features) to the original data (pairs)
  dataFeatToData = {}

  for bar in pairs:
    seq = pairs[bar]
    isoFeatures = {}
    isoFeaturesOrig = {}
    rootScores = {}

    # each data element should have as a features all the features of the previous and subsequent tslices
    for i in range(len(seq)):
      data,label = seq[i]
      chordKey = data[8]

      # isolated features
      isoFeatures[i] = (getIsoFeatures(data),label)
      isoFeaturesOrig[i] = isoFeatures[i]
      rootScores[i] = [int(dat) for dat in data[:7]]
  
    for i in range(len(seq)):
      
      # subsequent measure
      subBar = bar.split('_')[0] + str(int(bar.split('_')[1])+1)
      if i < len(seq) - 1:
        subFeats = dict([('S_' + key, val) for (key,val) in isoFeaturesOrig[i+1][0].items()])
        isoFeatures[i] = (dict(isoFeatures[i][0].items() + subFeats.items()) , isoFeatures[i][1])
       
      
      elif subBar in pairs:
        subFeats = dict([('S_' + key, val) for (kev,val) in getIsoFeatures(pairs[subBar][0][0]).items()])
        isoFeatures[i] = (dict(isoFeatures[i][0].items() + subFeats.items()) , isoFeatures[i][1])

      # prev measure
      prevBar = bar.split('_')[0] + str(int(bar.split('_')[1])-1)
      if i > 0:
        prevFeats = dict([('P_' + key, val) for (key,val) in isoFeaturesOrig[i-1][0].items()])
        #markovPred = markov.predict(chordKey, tuple([rootScores[i-1]]), markov.markov2)
        markovFeats = [('markov2', markov.predict(chordKey, tuple([rootScores[i-1]]), markov.markov2))]

        if i > 1:
          markovFeats += [('markov3', markov.predict(chordKey, tuple([rootScores[i-2], rootScores[i-1]]), markov.markov3))]

        if i > 2:
          markovFeats += [('markov4', markov.predict(chordKey, tuple([rootScores[i-3], rootScores[i-2], rootScores[i-1]]), markov.markov4))]

        isoFeatures[i] = (dict(isoFeatures[i][0].items() + prevFeats.items() + markovFeats) , isoFeatures[i][1])
        #isoFeatures[i] = (dict(isoFeatures[i][0].items() + prevFeats.items()) , isoFeatures[i][1])

      elif prevBar in pairs:
        prevFeats = dict([('P_' + key, val) for (kev,val) in getIsoFeatures(pairs[prevBar][-1][0]).items()])
        isoFeatures[i] = (dict(isoFeatures[i][0].items() + subFeats.items()) , isoFeatures[i][1])
    
      dataFeatToData[str(isoFeatures[i])] = seq[i]
    
    features += isoFeatures.values()

  
  return dataFeatToData, features