Examples
Install:
$ pip install suffix-tree
Import the library:
>>> from suffix_tree import Tree
Initialize a tree and then add sequences of symbols:
>>> tree = Tree()
>>> tree.add(1, "xabxac")
>>> tree.add(2, "awyawxawxz")
Or initialize from a dictionary of sequences in one step:
>>> tree = Tree({1: "xabxac", 2: "awyawxawxz"})
Query if a sequence exists in the tree:
>>> tree = Tree({"A": "xabxac", "B": "awyawxawxz"})
>>> tree.find("abx")
True
>>> tree.find("awx")
True
>>> tree.find("abc")
False
Query if a sequence exists in a sequence:
>>> tree = Tree({"A": "xabxac", "B": "awyawxawxz"})
>>> tree.find_id("A", "abx")
True
>>> tree.find_id("B", "abx")
False
>>> tree.find_id("B", "awx")
True
Enumerate all hits:
>>> tree = Tree({"A": "xabxac", "B": "awyawxawxz"})
>>> for id_, path in tree.find_all("xa"):
... print(id_, ":", str(path))
...
A : x a b x a c $
A : x a c $
B : x a w x z $
>>> tree.find_all("abc")
[]
Sequences can contain all kinds of hashable objects:
>>> tree = Tree()
>>> b = True
>>> i = 10
>>> s = "hello, world"
>>> t = (1, 2, 3)
>>> f = frozenset(t)
>>> tree.add(1, [b, i, f, s, t])
>>> tree.add(2, [t, s, f, i, b])
>>> tree.find([b, i, f, s, t])
True
>>> tree.find([s, f, i])
True
>>> tree.find([i, s])
False
Find common substrings:
>>> tree = Tree(
... {
... "A": "sandollar",
... "B": "sandlot",
... "C": "handler",
... "D": "grand",
... "E": "pantry",
... }
... )
>>> for k, length, path in tree.common_substrings():
... print(k, length, path)
...
2 4 s a n d
3 3 a n d
4 3 a n d
5 2 a n
Find maximal repeats:
>>> tree = Tree({"A": "xabxac", "B": "awyawxawxz"})
>>> for C, path in sorted(tree.maximal_repeats()):
... print(C, path)
...
1 a w
1 a w x
2 a
2 x
2 x a