node_match
- это функция, которая возвращает True, если узел n1 в G1 и n2 в G2 должны считаться равными во время сопоставления. Например:
import networkx as nx
G1 = nx.DiGraph()
G1.add_nodes_from([(0, {'label':'a'}), (1, {'label':'b'}),(2, {'label':'c'})])
G1.add_edges_from([(0,1),(0,2)])
G2 = nx.DiGraph()
G2.add_nodes_from([(3, {'label':'a'}), (4, {'label':'b'}),(5, {'label':'c'})])
G2.add_edges_from([(3,4),(3,5)])
print(G1.nodes())
print(G1.edges())
print(G2.nodes())
print(G2.edges())
for dist in nx.algorithms.similarity.optimize_graph_edit_distance(G1, G2, node_match=lambda a,b: a['label'] == b['label']):
print(dist)
Здесь, даже если идентификаторы узлов на двух графиках различны, расстояние будет нулевым. Это потому, что мы определили функцию, которая сравнивает 2 узла, как lambda a,b: a['label'] == b['label']
, что означает, что два узла считаются равными во время сопоставления, если они имеют одинаковое значение метки.
Аналогично, вы можете реализовать любую логику, какую пожелаете, без особой обработки каждой пары узлов в ваших графиках.