2015-02-04 7 views
6

Ich habe einen Wandler in Form einer DOT-Datei gespeichert. Ich kann eine grafische Darstellung der Graphen mit gvedit sehen, aber was ist, wenn ich die DOT-Datei in einen ausführbaren Transducer konvertieren möchte, damit ich den Transducer testen kann und sehe, welche Strings er akzeptiert und was nicht.Wie analysiere ich eine DOT-Datei in Python

In den meisten Tools, die ich in Openfst, Graphviz und ihren Python-Erweiterungen gesehen habe, werden DOT-Dateien nur zum Erstellen einer grafischen Darstellung verwendet. Was aber, wenn ich die Datei analysieren möchte, um ein interaktives Programm zu erhalten Testen Sie die Saiten gegen den Wandler?

Gibt es irgendwelche Bibliotheken, die die Aufgabe erledigen würden oder sollte ich sie einfach von Grund auf neu schreiben?

Wie gesagt, die DOT-Datei ist mit einem Wandler verwandt, den ich entworfen habe, der die Morphologie des Englischen simuliert. Es ist eine riesige Datei, aber um Ihnen eine Vorstellung davon zu geben, wie es ist, biete ich ein Beispiel an. Angenommen, ich möchte einen Transducer erstellen, der das Verhalten von Englisch in Bezug auf Substantive und in Bezug auf Pluralität modellieren würde. Mein Lexikon besteht aus nur drei Wörtern (Buch, Junge, Mädchen). Mein Wandler würde in diesem Fall wie folgt aussehen:

enter image description here

, die direkt aus dieser DOT-Datei aufgebaut ist:

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> "]; 
} 

nun diese Wandler gegen die Worte Prüfung bedeutet, dass, wenn Sie füttern es mit book+Pl sollte es zurück books spucken und umgekehrt. Ich würde gerne sehen, wie es möglich ist, die Punktdatei in ein Format zu verwandeln, das solche Analysen und Tests erlaubt.

+0

Jede Chance, die wir die .dot-Datei sehen könnten? –

+0

Eine DOT-Datei stellt ein Diagramm dar, das aus Knoten und Kanten besteht. Ich nehme an, dass die Knoten ein Eingabe- oder Ausgabepunkt sind und die Kante zwischen zwei Knoten den Transport darstellt. Wenn Sie die .dot-Datei anzeigen, können Sie möglicherweise nützlichere Kommentare und/oder Antworten erhalten. –

+0

Ich habe gerade aktualisiert und ein Beispiel hinzugefügt. –

Antwort

1

Sie können beginnen, indem Sie die Datei mit https://code.google.com/p/pydot/ laden. Von dort sollte es relativ einfach sein, den Code zu schreiben, um den In-Memory-Graphen gemäß einer Eingabe-Zeichenkette zu durchlaufen.

+0

Könnten Sie das etwas genauer erläutern? Ich weiß über Pydot und ich weiß, dass Sie dort eine Punktdatei laden können. Der 'dot_parser' in pydot konvertiert die Punktdatei in eine interne Klassendarstellung. Aber ich bin mir nicht sicher, wie ich das nutzen kann. Pydot ist im Grunde eine Schnittstelle für Graphviz afaik. –

+0

@schmutter: siehe hier: http://StackOverflow.com/a/22935664/4323 - Sie können die Kanten laden. Wenn Sie eine umfangreichere Grafikbibliothek wünschen, lesen Sie https://code.google.com/p/python-graph/, die auch Dot-Dateien laden kann und Algorithmen enthält. –

+0

Ich kann nicht (die aktuelle Version) von Pydot verwenden; es sagt, es erfordert Pyapsing. Ich habe die neueste Version von pyparsing heruntergeladen, aber pydot hat versucht, etwas von pyparsing zu importieren, das nicht existiert. Grr> :( – allyourcode

2

Zuerst habe ich die graphviz Bibliothek installiert. Dann schrieb ich den folgenden Code:

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

Dies ist nicht wirklich die DOT-Datei zu analysieren. – purpletentacle

Verwandte Themen