#! /usr/bin/python # -*- coding: utf-8 -*- import sys, os, re, urllib, csv re_successes = 0 re_fails = 0 re_none = 0 no = 0 verbose = False def uniqify(list): uniques = [] for item in list: if item not in uniques: uniques.append(item) return uniques def article_parse(conf_name, articlenr, article, writer): global re_successes, re_fails, re_none, no global verbose print article, articlenr sys.exit() no += 1 if no % 10 == 0: if not verbose: print '\x08'*80, "Processing #%d." % no, # print conf_name, article fullfile = ''.join(open(article).readlines()) # Extract the title, with some sanity checks m = re.search(r"(.*?)", fullfile) if not m: return title = m.group(1) if verbose: print '\t', title if verbose: print '\t', article subconf_name = '' title_parts = title.split(',', 1) if not ':' in title or not ',' in title: title = title_parts[0] conf_name, subconf_name = conf_name.split('_') else: conf, title = title_parts subconf_name = conf.split(':', 1)[1] conf_name = conf_name.split('_')[0] title = title.strip() if title[-3:] == '...': title = title[:-3] subconf_name = subconf_name.strip() conf_name = conf_name.strip() # Don't want too long strings if len(title) < 20: title = title[0:] else: title = title[:20] if verbose: print conf_name, subconf_name, title # les hele filen inn til en string try: fullfile = fullfile[fullfile.index('

Note: OCR errors may be found in this Reference List extracted from the full text article. ACM has opted to expose the complete List rather than only correct and linked references.

'):] fullfile = fullfile[:fullfile.index('')] except: return references = fullfile.split('
')[1:] refnr = [] refyears= [] # Every second
is a reference isRef = False for ref in references: isRef = not isRef if isRef: nr = ref[:ref.index('
')].strip() refnr.append(nr) else: ref_text = ref[:ref.index('
')].strip() ref_text_old = ref_text # if we have a link in the text, try extracting the contents of the tag if 'a href' in ref_text: ref_start = ref_text.find('>') ref_stop = ref_text.find('', ref_start) ref_text = ref_text[ref_start+1:ref_stop].strip() # writer.write(ref_text + '\n') # for x in ["Published", "accessed"]: # if x in ref_text: # ref_text = ref_text[:ref_text.find(x)] # break else: # if we have a failpedia or failttp reference, skip the ref if "http" in ref_text: continue if "ikipedia" in ref_text: continue # regex: (start of line or not (digit or letter) followed by 19 or 20 followed by 2 digits followed by end of line or not a digit. pattern = r"([^0-9a-zA-Z]|^)((19|20)\d\d)([^0-9]|$)" all_matches = re.findall(pattern, ref_text ) m = map(lambda x: x[1], all_matches) # scramble array into a usable form if m: # Treat manually if len(uniqify(m)) > 1: # Get the refnr that failed, and put it back refn = refnr.pop() refnr.append(refn) refyears.append('-') writer.writerow([title, int(articlenr), int(refn), "CHECK ME", "FILL ME", ref_text]) re_fails += 1 # writer.write(ref_text + '\n') # writer.write(ref_text+ '\n') # writer.write(ref_text_old+ '\n') # writer.write(":".join(m)+'\n') # writer.write("*"*78 + '\n') print "Check manually as", m # Same year in the ref, probably okay elif len(uniqify(m)) == 1: refn = refnr.pop() refnr.append(refn) age = str(2008-int(m[0][0])) writer.writerow([title, int(articlenr), int(refn), int(m[0][0]), int(age)]) refyears.append(m[0][0]) print "found one", m[0][0] re_successes += 1 else: print "SHOULD NOT HAPPEN!" sys.exit(0) else: print "No reference" re_none += 1 refn = refnr.pop() refnr.append(refn) refyears.append('-') writer.writerow([title, articlenr, refn," "," "]) return if __name__ == '__main__': #filter = '' #if len(sys.argv) == 2: # filter = sys.argv[1] for conference in os.listdir("."): # if filter and conference != filter: continue if os.path.isdir(conference): for sub_conference in os.listdir(conference): file_path = "/home/alexao/SE-forskning/results/"+conference+"/"+sub_conference+"/"+'_'.join((conference, sub_conference))+"_result.csv" if not os.path.isdir("/home/alexao/SE-forskning/results/"+conference+"/"+sub_conference): os.makedirs("/home/alexao/SE-forskning/results/"+conference+"/"+sub_conference) output = csv.writer(open(file_path, "w")) for article in os.listdir(os.path.join(conference,sub_conference)): article_parse('_'.join((conference, sub_conference)), article, os.path.join(conference, sub_conference, article), output) print '\nsuccesses:\t', re_successes print 'fails:\t\t', re_fails print 'none:\t\t', re_none print '%\t\t', re_fails * 100 / (re_fails + re_successes+re_none) output.close()