def write(self, filename, separator=' ', computeTotal=False, computeAverage=False): """ write all stats to a file """ out = open(filename, 'w') nameList = self.irStats.keys() nameList.sort() for name in nameList: out.write(name+':\n') list = self.irStats[name] for irStat in list: out.write(separator) irStat.writerpf(out, separator) if computeTotal: totalStat = IRstats() for irStat in list: totalStat.addStats(irStat) out.write(separator) totalStat.writerpf(out, separator) if computeAverage: rSum = 0.0 pSum = 0.0 fSum = 0.0 dupPSum = 0.0 for irStat in list: rSum += irStat.recall() pSum += irStat.precision() fSum += irStat.fscore() dupPSum += irStat.precisionWithoutDuplicates() nStat = len(list) out.write('%s%s%s%s%.2f%s%.2f%s%.2f%4s%.2f\n'%(separator.ljust(5), separator.ljust(5), separator.ljust(5), \ separator, rSum/nStat, separator, pSum/nStat, separator,\ fSum/nStat, separator, dupPSum/nStat)) nameList = self.labeledStats.keys() nameList.sort() nameList.reverse() for name in nameList: out.write(name+':\n') lists = self.labeledStats[name] out.write(separator) for [label, value] in lists[0]: out.write(label+separator) out.write('\n') out.write(separator) for list in lists: for [label, value] in list: if isinstance(value, float): out.write('%.4f%s' % (value, separator)) else: out.write('%d%s' % (value, separator)) out.write('\n') out.close()