comparison scripts/score_parser.py @ 1252:a44af5ba444c

Quick update for scripts/score_parser.py to parse new save files.
author Nicholas Jillings <n.g.r.jillings@se14.qmul.ac.uk>
date Tue, 15 Mar 2016 15:33:29 +0000
parents 47bfd9594617
children
comparison
equal deleted inserted replaced
1251:ee5f18d2fc47 1252:a44af5ba444c
41 41
42 # get subject ID from XML file 42 # get subject ID from XML file
43 subject_id = file_name[:-4] # file name (without extension) as subject ID 43 subject_id = file_name[:-4] # file name (without extension) as subject ID
44 44
45 # get list of all pages this subject evaluated 45 # get list of all pages this subject evaluated
46 for audioholder in root.findall("./page"): # iterate over pages 46 for page in root.findall("./page"): # iterate over pages
47 page_name = audioholder.get('id') # get page name 47 page_name = page.get('ref') # get page reference ID
48 48
49 if page_name is None: # ignore 'empty' audio_holders 49 if page_name is None: # ignore 'empty' audio_holders
50 print "WARNING: " + file_name + " contains empty audio holder. (score_parser.py)" 50 print "WARNING: " + file_name + " contains empty audio holder. (score_parser.py)"
51 break 51 break
52
53 if page.get('state') != "complete":
54 print "WARNING:" + file_name + " contains incomplete page " +page_name+ ". (score_parser.py)"
55 break;
52 56
53 file_name = folder_name+'/ratings/'+page_name+'-ratings.csv' # score file name 57 file_name = folder_name+'/ratings/'+page_name+'-ratings.csv' # score file name
54 58
55 # create folder 'ratings' if not yet created 59 # create folder 'ratings' if not yet created
56 if not os.path.exists(folder_name + '/ratings'): 60 if not os.path.exists(folder_name + '/ratings'):
58 62
59 # header: fragment IDs in 'alphabetical' order 63 # header: fragment IDs in 'alphabetical' order
60 # go to fragment column, or create new column if it doesn't exist yet 64 # go to fragment column, or create new column if it doesn't exist yet
61 65
62 # get array of audio elements and number of audio elements 66 # get array of audio elements and number of audio elements
63 audiolist = audioholder.findall("./audioelement") 67 audiolist = page.findall("./audioelement")
64 n_fragments = len(audiolist) 68 n_fragments = len(audiolist)
65 69
66 # get alphabetical array of fragment IDs from this subject's XML 70 # get alphabetical array of fragment IDs from this subject's XML
67 fragmentnamelist = [] # make empty list 71 fragmentnamelist = [] # make empty list
68 for audioelement in audiolist: # iterate over all audioelements 72 for audioelement in audiolist: # iterate over all audioelements
69 fragmentnamelist.append(audioelement.get('id')) # add to list 73 fragmentnamelist.append(audioelement.get('ref')) # add to list
70 74
71 75
72 # if file exists, get header and add any 'new' fragments not yet in the header 76 # if file exists, get header and add any 'new' fragments not yet in the header
73 if os.path.isfile(file_name): 77 if os.path.isfile(file_name):
74 with open(file_name, 'r') as readfile: 78 with open(file_name, 'r') as readfile:
117 # prepare row to be written for this subject for this page 121 # prepare row to be written for this subject for this page
118 ratingrow = [subject_id] 122 ratingrow = [subject_id]
119 123
120 # get scores related to fragment [id] 124 # get scores related to fragment [id]
121 for fragmentname in headerrow[1:]: # iterate over fragments in header (skip first empty column) 125 for fragmentname in headerrow[1:]: # iterate over fragments in header (skip first empty column)
122 elementvalue = audioholder.find("./audioelement/[@id='" 126 elementvalue = page.find("./audioelement/[@ref='"
123 + fragmentname 127 + fragmentname
124 + "']/value") 128 + "']/value")
125 if hasattr(elementvalue, 'text'): # if rating for this fragment exists 129 if hasattr(elementvalue, 'text'): # if rating for this fragment exists
126 ratingrow.append(elementvalue.text) # add to rating row 130 ratingrow.append(elementvalue.text) # add to rating row
127 else: # if this subject has not rated this fragment 131 else: # if this subject has not rated this fragment