def writeConfusionMatrix(self, outFile):
print("Write a confusion matrix to outFile; elements in the matrix can be frequencies (you don't need to normalize)")
output = []
file = open(outFile, 'w+')
matrix = defaultdict(lambda: defaultdict(int))
for s in range(len(self.goldenTags)):
for w in range(len(self.goldenTags[s])):
matrix[self.goldenTags[s][w].tag][self.myTags[s][w].tag] += 1
row_ids = sorted(matrix.keys())
col_ids = sorted(set(k for v in matrix.values() for k in v.keys()))
output.append(col_ids)
for r in row_ids:
output.append([r] + [matrix[r].get(c, 0) for c in col_ids])
#matKeys = matrix.keys()
#df = DataFrame(matrix).T.fillna(0)
#output = '\n'.join(output)
print(output)
file.write(str(output))
此函数创建一个混淆矩阵并将其写入新文件。
看起来像是
它没有空格的嵌套列表,但我希望它看起来像:
在元素之间添加新行。
我尝试过添加
之类的东西output = '\n'.join(output)
之前
file.write(str(output))
但给了我一个
sequence item 0: expected str instance, list found
错误。
有什么想法吗?
答案 0 :(得分:0)
尝试将此内容写入您的文件:
output = '\n'.join([','.join(map(str,item)) for item in output])
您正在使用'\n'.join()
加入列表,您还需要将这些列表转换为字符串。
答案 1 :(得分:0)
只需逐行打印字符串:
for line in output:
print line # or file.write(line)
或创建一个使用新行分隔符的新字符串,然后将其写入:
output = '\n'.join(str(line) for line in output)
print line # or file.write(line)