Beispiel #1
0
    def to_dot_str_graph(self):
        lines = [u'digraph finite_state_machine {', '\tdpi=100;']
        node_lines = []
        for node in self.G.nodes():
            d_node = Machine.d_clean(node)
            d_node_id = d_node.replace('=', '_')
            if "_" in d_node_id:
                d_node = d_node_id.split('_')[-2]
            else:
                d_node= d_node_id
            node_lines.append(u'\t{0} [shape = circle, label = "{1}"];'.format(
                d_node_id, d_node).replace('-', '_'))
        lines += sorted(node_lines)

        edge_lines = []
        for u,v, edata in self.G.edges(data=True):
            d_u = Machine.d_clean(u)
            d_v = Machine.d_clean(v)
            d_u = d_u.replace('=', '_')
            d_v = d_v.replace('=', '_')
            edge_lines.append(
                u'\t{0} -> {1} [ label = "{2}" ];'.format(
                    d_u, d_v,edata['color']))

        lines += sorted(edge_lines)
        lines.append('}')
        return u'\n'.join(lines)
Beispiel #2
0
    def to_dot_str_graph(self):
        lines = [u'digraph finite_state_machine {', '\tdpi=100;']
        node_lines = []
        for node in self.G.nodes():
            d_node = Machine.d_clean(node)
            d_node_id = d_node.replace('=', '_')
            if "_" in d_node_id:
                d_node = d_node_id.split('_')[-2]
            else:
                d_node = d_node_id
            node_lines.append(u'\t{0} [shape = circle, label = "{1}"];'.format(
                d_node_id, d_node).replace('-', '_'))
        lines += sorted(node_lines)

        edge_lines = []
        for u, v, edata in self.G.edges(data=True):
            d_u = Machine.d_clean(u)
            d_v = Machine.d_clean(v)
            d_u = d_u.replace('=', '_')
            d_v = d_v.replace('=', '_')
            edge_lines.append(u'\t{0} -> {1} [ label = "{2}" ];'.format(
                d_u, d_v, edata['color']))

        lines += sorted(edge_lines)
        lines.append('}')
        return u'\n'.join(lines)
Beispiel #3
0
 def draw_single_graph(self, word, path):
     clean_word = Machine.d_clean(word)
     for c, machine in enumerate(self.definitions[word]):
         graph = MachineGraph.create_from_machines([machine])
         file_name = os.path.join(path, '{0}_{1}.dot'.format(clean_word, c))
         with open(file_name, 'w') as file_obj:
             file_obj.write(graph.to_dot().encode('utf-8'))
Beispiel #4
0
 def draw_single_graph(self, word, path):
     clean_word = Machine.d_clean(word)
     for c, machine in enumerate(self.definitions[word]):
         graph = MachineGraph.create_from_machines([machine])
         file_name = os.path.join(path, '{0}_{1}.dot'.format(clean_word, c))
         with open(file_name, 'w') as file_obj:
             file_obj.write(graph.to_dot().encode('utf-8'))
Beispiel #5
0
 def draw_word_graphs(self):
     ensure_dir('graphs/words')
     for c, (word, machines) in enumerate(self.definitions.iteritems()):
         if c % 1000 == 0:
             logging.info("{0}...".format(c))
         for i, machine in enumerate(machines):
             graph = MachineGraph.create_from_machines([machine])
             clean_word = Machine.d_clean(word)
             if clean_word[0] == 'X':
                 clean_word = clean_word[1:]
             f = open('graphs/words/{0}_{1}.dot'.format(clean_word, i), 'w')
             f.write(graph.to_dot().encode('utf-8'))
Beispiel #6
0
 def draw_word_graphs(self):
     ensure_dir('graphs/words')
     for c, (word, machines) in enumerate(self.definitions.iteritems()):
         if c % 1000 == 0:
             logging.info("{0}...".format(c))
         for i, machine in enumerate(machines):
             graph = MachineGraph.create_from_machines([machine])
             clean_word = Machine.d_clean(word)
             if clean_word[0] == 'X':
                 clean_word = clean_word[1:]
             f = open('graphs/words/{0}_{1}.dot'.format(clean_word, i), 'w')
             f.write(graph.to_dot().encode('utf-8'))
Beispiel #7
0
    def to_dot(self):
        lines = [u'digraph finite_state_machine {', '\tdpi=100;']
        # lines.append('\tordering=out;')
        # sorting everything to make the process deterministic
        node_lines = []
        for node, n_data in self.G.nodes(data=True):
            d_node = Machine.d_clean(node)
            printname = Machine.d_clean('_'.join(d_node.split('_')[:-1]))
            if 'expanded' in n_data and not n_data['expanded']:
                node_line = u'\t{0} [shape = circle, label = "{1}", style="filled"];'.format(  # nopep8
                    d_node, printname).replace('-', '_')
            else:
                node_line = u'\t{0} [shape = circle, label = "{1}"];'.format(
                    d_node, printname).replace('-', '_')
            node_lines.append(node_line)
        lines += sorted(node_lines)

        edge_lines = []
        for u,v,edata in self.G.edges(data=True):
            if 'color' in edata:
                d_node1 = Machine.d_clean(u)
                d_node2 = Machine.d_clean(v)
                edge_lines.append(
                    u'\t{0} -> {1} [ label = "{2}" ];'.format(
                        Machine.d_clean(d_node1), Machine.d_clean(d_node2),edata['color']))

        lines += sorted(edge_lines)
        lines.append('}')
        return u'\n'.join(lines)
Beispiel #8
0
    def to_dot(self):
        lines = [u'digraph finite_state_machine {', '\tdpi=100;']
        # lines.append('\tordering=out;')
        # sorting everything to make the process deterministic
        node_lines = []
        for node, n_data in self.G.nodes(data=True):
            d_node = Machine.d_clean(node)
            printname = Machine.d_clean('_'.join(d_node.split('_')[:-1]))
            if 'expanded' in n_data and not n_data['expanded']:
                node_line = u'\t{0} [shape = circle, label = "{1}", style="filled"];'.format(  # nopep8
                    d_node, printname).replace('-', '_')
            else:
                node_line = u'\t{0} [shape = circle, label = "{1}"];'.format(
                    d_node, printname).replace('-', '_')
            node_lines.append(node_line)
        lines += sorted(node_lines)

        edge_lines = []
        for u, v, edata in self.G.edges(data=True):
            if 'color' in edata:
                d_node1 = Machine.d_clean(u)
                d_node2 = Machine.d_clean(v)
                edge_lines.append(u'\t{0} -> {1} [ label = "{2}" ];'.format(
                    Machine.d_clean(d_node1), Machine.d_clean(d_node2),
                    edata['color']))

        lines += sorted(edge_lines)
        lines.append('}')
        return u'\n'.join(lines)
Beispiel #9
0
 def to_dot(self):
     lines = [u'digraph finite_state_machine {', '\tdpi=100;']
     # lines.append('\tordering=out;')
     # sorting everything to make the process deterministic
     node_lines = []
     for node in self.G.nodes_iter():
         d_node = Machine.d_clean(node)
         printname = Machine.d_clean(d_node.split('_')[0])
         node_lines.append(u'\t{0} [shape = circle, label = "{1}"];'.format(
             d_node, printname).replace('-', '_'))
     lines += sorted(node_lines)
     edge_lines = []
     for node1, adjacency in self.G.adjacency_iter():
         d_node1 = Machine.d_clean(node1)
         for node2, edges in adjacency.iteritems():
             d_node2 = Machine.d_clean(node2)
             for i, attributes in edges.iteritems():
                 edge_lines.append(
                     u'\t{0} -> {1} [ label = "{2}" ];'.format(
                         d_node1.replace('-', '_'),
                         d_node2.replace('-', '_'), attributes['color']))
     lines += sorted(edge_lines)
     lines.append('}')
     return u'\n'.join(lines)
Beispiel #10
0
def dep_to_dot(deps, fn):
    try:
        edges = [(d['dep']['lemma'], d['type'], d['gov']['lemma'])
                 for d in deps if d['type'] not in EXCLUDE]
    except:
        edges = [(d[1][0], d[0], d[2][0]) for d in deps if d[0] not in EXCLUDE]
    words = set([e[0] for e in edges] + [e[2] for e in edges])
    lines = []
    for word in words:
        lines.append(u'\t{0} [shape=rectangle, label="{0}"];'.format(
            Machine.d_clean(word)))
    for edge in edges:
        dep, dtype, gov = map(Machine.d_clean, edge)
        lines.append(u'\t{0} -> {1} [label="{2}"];'.format(dep, gov, dtype))
    with open(fn, 'w') as f:
        f.write(HEADER.encode("utf-8"))
        f.write(u"\n".join(lines).encode("utf-8"))
        f.write("}\n")
Beispiel #11
0
def dep_to_dot(deps, fn):
    try:
        edges = [
            (d['dep']['lemma'], d['type'], d['gov']['lemma']) for d in deps
            if d['type'] not in EXCLUDE]
    except:
        edges = [(d[1][0], d[0], d[2][0]) for d in deps if d[0] not in EXCLUDE]
    words = set([e[0] for e in edges] + [e[2] for e in edges])
    lines = []
    for word in words:
        lines.append(u'\t{0} [shape=rectangle, label="{0}"];'.format(
            Machine.d_clean(word)))
    for edge in edges:
        dep, dtype, gov = map(Machine.d_clean, edge)
        lines.append(u'\t{0} -> {1} [label="{2}"];'.format(dep, gov, dtype))
    with open(fn, 'w') as f:
        f.write(HEADER.encode("utf-8"))
        f.write(u"\n".join(lines).encode("utf-8"))
        f.write("}\n")
Beispiel #12
0
def dep_to_dot(deps):
    if isinstance(deps[0], dict):
        # new dep structure
        edges = [(d['dep']['lemma'], d['type'], d['gov']['lemma'])
                 for d in deps if d['type'] not in EXCLUDE]
    else:
        # old dep structure
        edges = [(d[1][0], d[0], d[2][0]) for d in deps if d[0] not in EXCLUDE]

    words = set([e[0] for e in edges] + [e[2] for e in edges])
    lines = []
    for word in words:
        lines.append(u'\t{0} [shape=rectangle, label="{0}"];'.format(
            Machine.d_clean(word)))
    for edge in edges:
        dep, dtype, gov = map(Machine.d_clean, edge)
        lines.append(u'\t{0} -> {1} [label="{2}"];'.format(dep, gov, dtype))

    dot_str = HEADER.encode("utf-8")
    dot_str += u"\n".join(lines).encode("utf-8")
    dot_str += "}\n"
    return dot_str
Beispiel #13
0
def dep_to_dot(deps):
    if isinstance(deps[0], dict):
        # new dep structure
        edges = [
            (d['dep']['lemma'], d['type'], d['gov']['lemma']) for d in deps
            if d['type'] not in EXCLUDE]
    else:
        # old dep structure
        edges = [(d[1][0], d[0], d[2][0]) for d in deps if d[0] not in EXCLUDE]

    words = set([e[0] for e in edges] + [e[2] for e in edges])
    lines = []
    for word in words:
        lines.append(u'\t{0} [shape=rectangle, label="{0}"];'.format(
            Machine.d_clean(word)))
    for edge in edges:
        dep, dtype, gov = map(Machine.d_clean, edge)
        lines.append(u'\t{0} -> {1} [label="{2}"];'.format(dep, gov, dtype))

    dot_str = HEADER.encode("utf-8")
    dot_str += u"\n".join(lines).encode("utf-8")
    dot_str += "}\n"
    return dot_str