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; | |