2015-02-04 24 views
6

Ho un trasduttore salvato sotto forma di file DOT. Posso vedere una rappresentazione grafica dei grafici usando gvedit, ma cosa succede se voglio convertire il file DOT in un trasduttore eseguibile, in modo da poter testare il trasduttore e vedere quali stringhe accetta e quali no.Come analizzare un file DOT in Python

Nella maggior parte degli strumenti che ho visto in Openfst, Graphviz e le loro estensioni Python, i file DOT sono usati solo per creare una rappresentazione grafica, ma cosa succede se voglio analizzare il file per ottenere un programma interattivo dove posso testare le corde contro il trasduttore?

Ci sono delle librerie là fuori che farebbero il compito o dovrei semplicemente scriverlo da zero?

Come ho già detto, il file DOT è correlato a un trasduttore che ho progettato che simula la morfologia dell'inglese. È un file enorme, ma solo per darti un'idea di come sia, fornisco un campione. Diciamo che voglio creare un trasduttore che modellerebbe il comportamento dell'inglese rispetto ai sostantivi e in termini di pluralità. Il mio lessico consiste di sole tre parole (libro, ragazzo, ragazza). Il mio trasduttore in questo caso sarebbe simile a questa:

enter image description here

che è direttamente costruito da questo file DOT:

digraph A { 
rankdir = LR; 
node [shape=circle,style=filled] 0 
node [shape=circle,style=filled] 1 
node [shape=circle,style=filled] 2 
node [shape=circle,style=filled] 3 
node [shape=circle,style=filled] 4 
node [shape=circle,style=filled] 5 
node [shape=circle,style=filled] 6 
node [shape=circle,style=filled] 7 
node [shape=circle,style=filled] 8 
node [shape=circle,style=filled] 9 
node [shape=doublecircle,style=filled] 10 
0 -> 4 [label="g "]; 
0 -> 1 [label="b "]; 
1 -> 2 [label="o "]; 
2 -> 7 [label="y "]; 
2 -> 3 [label="o "]; 
3 -> 7 [label="k "]; 
4 -> 5 [label="i "]; 
5 -> 6 [label="r "]; 
6 -> 7 [label="l "]; 
7 -> 9 [label="<+N:s> "]; 
7 -> 8 [label="<+N:0> "]; 
8 -> 10 [label="<+Sg:0> "]; 
9 -> 10 [label="<+Pl:0> "]; 
} 

ora testando questo trasduttore contro le parole significa che se si alimentano con book+Pl dovrebbe restituire books e viceversa. Mi piacerebbe vedere come è possibile trasformare il file di punti in un formato che consentirebbe tali analisi e test.

+0

Qualche possibilità di vedere il file .dot? –

+0

Un file DOT rappresenta un grafico costituito da nodi e spigoli. Immagino che i nodi siano input o output point, e il confine tra due nodi rappresenta il trasporto. Se mostri il file .dot, potresti essere in grado di ottenere commenti e/o risposte più utili. –

+0

Ho appena aggiornato e aggiunto un campione. –

risposta

1

Si potrebbe iniziare caricando il file utilizzando https://code.google.com/p/pydot/. Da lì dovrebbe essere relativamente semplice scrivere il codice per attraversare il grafico in memoria secondo una stringa di input.

+0

Potresti approfondire un po 'di più? So di pydot e so che è possibile caricare un file di punti lì. Il 'dot_parser' in pydot converte il file punto in una rappresentazione di classe interna. Ma non sono sicuro di come posso usarlo. Pydot è fondamentalmente un'interfaccia per Graphviz afaik. –

+0

@schmutter: vedi qui: http://stackoverflow.com/a/22935664/4323 - puoi caricare i bordi. Se desideri una libreria di grafi più completa, consulta https://code.google.com/p/python-graph/ che può anche caricare file Dot e include algoritmi. –

+0

Non riesco a usare (la versione corrente) di pydot; dice che richiede il pyparsing. Ho scaricato l'ultima versione di Pyparsing, ma pydot ha cercato di importare qualcosa da Pyparsing che non esiste. Grr> :( – allyourcode

2

Prima di tutto, ho installato la libreria graphviz. Quindi ho scritto il seguente codice:

import os 
from graphviz import Source 
file = open('graph4.dot', 'r')#READING DOT FILE 
text=file.read() 
Source(text) 
+2

Questo non sta veramente analizzando il file DOT. – purpletentacle