graphviz - сравнить графические деревья
Я должен сделать работу с графвизом. Мне нужно визуализировать графическое представление нескольких деревьев, но в любом случае мне нужно сравнить два дерева, чтобы увидеть их различия: что-то вроде этого, у меня есть дерево A и дерево B. После создания их представления и сравнения их мне нужно видеть только узлы, которые не имеют общего. Кто-то сказал мне использовать EMF Compare, но, к сожалению, я не знаю, как заставить этот плагин принимать расширение graphviz.
Любой совет или любое другое возможное решение для этой работы?
С уважением.
1 ответ
Учитывая два .dot
файлы, a1.dot
:
digraph g1 {
A -> B -> D -> E
A -> C -> E
}
... а также a2.dot
:
digraph g2 {
A -> B -> F -> E
A -> C -> F
}
... вы можете найти узлы, которые отличаются между ними, следующим образом:
$ dot -Tplain a1.dot | sed -ne 's/^node \([^ ]\+\).*$/\1/p' | sort >a1.nodes
$ dot -Tplain a2.dot | sed -ne 's/^node \([^ ]\+\).*$/\1/p' | sort >a2.nodes
$ diff a1.nodes a2.nodes
4d3
< D
5a5
> F
я использую sed
раздеть список имен узлов для каждого .dot
файл из plain
вывод из dot
, сортировка узлов в порядке, а затем с помощью diff
чтобы найти различия. Этот подход не представляет различия графически, но это сложная вещь, которую нужно сделать в лучшие времена.