larkkin's picture
Add application code and models, update README
8044721
raw
history blame
1.71 kB
from graph import Graph;
def read_matrix(file):
rows = [];
for line in file:
line = line.rstrip();
if len(line) == 0:
return rows;
else:
rows.append(line.split("\t"));
return rows or None
def read_matrices(file):
file.readline().rstrip();
matrix = read_matrix(file);
while matrix:
yield matrix;
matrix = read_matrix(file);
def matrix2graph(matrix, framework = None, text = None):
graph = Graph(matrix[0][0][1:], flavor = 0, framework = framework);
predicates = [];
for id, row in enumerate(matrix[1:]):
lemma, pos, frame, top = row[2], row[3], row[6], row[4] == '+';
if lemma == "_": lemma = row[1];
properties = {"pos": pos};
if frame != "_": properties["frame"] = frame;
node = graph.add_node(id, label = lemma,
properties = list(properties.keys()),
values = list(properties.values()),
top = top, anchors = [row[1]] if text else None);
if row[5] == '+':
predicates.append(id);
for tgt, row in enumerate(matrix[1:]):
for pred, label in enumerate(row[7:]):
if label != '_':
src = predicates[pred];
edge = graph.add_edge(src, tgt, label);
if text:
graph.add_input(text);
graph.anchor();
#
# finally, purge singleton (isolated) nodes
#
graph.nodes = [node for node in graph.nodes if not node.is_singleton()];
return graph;
def read(fp, framework = None, text = None):
for matrix in read_matrices(fp):
yield matrix2graph(matrix, framework, text), None;