Newer
Older
################################################################
# lgio.py
#
# Input/Output routines for label graphs.
# Copyright (c) 2012-2014 Richard Zanibbi and Harold Mouchere
################################################################
import sys
import csv
from lgeval.src.lg import *
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
def writeDiff(ndiffs, sdiffs, ediffs, streamFile):
"""Write differences for label graphs and (implicit) trees
to the passed stream."""
for ndiff in ndiffs:
streamFile.write('*N,' + ndiff[0] + ',')
for symbol in ndiff[1]:
streamFile.write(symbol[0] + ',')
streamFile.write(str(symbol[1]) + ',')
streamFile.write(':vs:,')
for i in range(0,len(ndiff[2])):
streamFile.write(ndiff[2][i][0] + ',')
streamFile.write(str(ndiff[2][i][1]))
if i < len(ndiff[2][i]) - 2:
streamFile.write(',')
streamFile.write('\n')
# Edges
for ediff in ediffs:
streamFile.write('*E,' + ediff[0][0] + ',' + ediff[0][1] + ',')
for symbol in ediff[1]:
streamFile.write(symbol[0] + ',')
streamFile.write(str(symbol[1]) + ',')
streamFile.write(':vs:,')
for i in range(0,len(ediff[2])):
streamFile.write(str(ediff[2][i][0]) + ',')
streamFile.write(str(ediff[2][i][1]))
if i < len(ediff[2]) - 1:
streamFile.write(',')
streamFile.write('\n')
# Segmentation graph edges. Simply construct all pairs,
# as disagreeing edges are common.
for sdiff in list(sdiffs):
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
primitiveEndSet = sdiffs[sdiff]
for end in primitiveEndSet[0]:
streamFile.write('*S,' + str(sdiff) + ',' + str(end) + '\n')
for end in primitiveEndSet[1]:
streamFile.write('*S,' + str(sdiff) + ',' + str(end) + '\n')
def writeCSVTuple(tuple, secondComma, streamFile):
for i in range(0,len(tuple) - 1):
streamFile.write(str(tuple[i]))
streamFile.write(',')
streamFile.write(str(tuple[len(tuple) - 1]))
if secondComma:
streamFile.write(',')
def writeMetrics(metrics, streamFile):
"""Computes numerical metrics (for node and edge labels, and segmentation
graph edge disagreements), and writes them to standard output."""
numMetrics = len(metrics[0])
for i in range(0,numMetrics - 1):
writeCSVTuple(metrics[0][i],True, streamFile)
writeCSVTuple(metrics[0][numMetrics - 1],False, streamFile)
streamFile.write('\n')
################################################################
# Input
################################################################
def fileListToLgs(fileName):
"""Given a file containing a list of .lg files, return the
list of corresponding label graphs."""
file = open(fileName)
fileReader = csv.reader(file)
lgList = []
for row in fileReader:
# Skip comments and empty lines.
if not row == [] and not row[0].strip()[0] == "#":
lgfile1 = row[0].strip() # remove leading/trailing whitespace
lg1 = Lg(lgfile1)
lgList += [ lg1 ]
file.close()
return lgList