Fornax is an open source library to perform fuzzy subgraph matching between labelled undirected graphs based on NeMa: Fast Graph Search with Label Similarity.

Subgraph Matching

A subgraph is any collection of node and edges that form some subset of a graph. For example in the image below the graph on the left is isomorphic to the green nodes in the graph on the right, hence they form a subgraph.


If we refer to the graph on the left as the query graph and the graph on the right as the target graph subgraph matching is the process of finding the query graph in the target graph such that the node labels and edges are strictly the same.

Fornax will kind the n most similar subgraphs in a target graph based on a user specified query graph using a user specified label similarity function.

Fornax will not only find exact subgraph isomorphisms but the n most similar subgraphs even if they are not exact isomorphisms of the query graph. Hence, fornax can be used for fuzzy subgraph matching.

For example, Fornax can be used to find subgraphs where labels are similar, yet different, based on a user specified definition. Additionally neighbours in the query graph may be absent, or are neighbours of neighbours in the target graph.

Example Problems

Common fuzzy subgraph matching problems include:

  • searching knowledge graphs
  • mining social networks
  • searching geospation data as a graph
  • searching text as a graph


fornax was written with three primary goals in mind

  • to demonstrate process and provide ease of use over performance
  • to be flexible and accomidate the users notions of similarity
  • to scale to large target graphs of millions of nodes and edges


In order to support large graphs and persist them between python interpreter sessions fornax stores all data in a database.

To facilite ease of use fornax can use sqlite or postgresql as a back end. For more details see the API Introduction.