Spaces:
Runtime error
Runtime error
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; | |