From c699ee6bbdc17b837504228ac52f4dc7399d11e0 Mon Sep 17 00:00:00 2001 From: "Jeroen F.J. Laros" Date: Sun, 30 Apr 2017 22:11:16 +0200 Subject: [PATCH] Fixed bug in Levenshtein function. --- dict_trie/dict_trie.py | 16 +++++++++------- tests/test_trie.py | 3 +++ 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/dict_trie/dict_trie.py b/dict_trie/dict_trie.py index 56c6315..1503d0b 100644 --- a/dict_trie/dict_trie.py +++ b/dict_trie/dict_trie.py @@ -136,19 +136,21 @@ def _levenshtein(path, node, word, distance): if not word: if '' in node: yield path - return - - car, cdr = word[0], word[1:] + car, cdr = '', '' + else: + car, cdr = word[0], word[1:] # Deletion. for result in _levenshtein(path, node, cdr, distance - 1): yield result for char in node: - # Substitution and insertion. - for result in _levenshtein( - path + char, node[char], cdr, distance - int(char != car)): - yield result + # Substitution. + if car: + for result in _levenshtein( + path + char, node[char], cdr, distance - int(char != car)): + yield result + # Insertion. for result in _levenshtein( path + char, node[char], word, distance - 1): yield result diff --git a/tests/test_trie.py b/tests/test_trie.py index c25b36f..fef8ff7 100644 --- a/tests/test_trie.py +++ b/tests/test_trie.py @@ -116,5 +116,8 @@ class TestTrie(object): def test_levenshtein_1_del(self): assert self._trie.levenshtein('ac', 1) == 'abc' + def test_levenshtein_1_prefex(self): + assert self._trie.levenshtein('ab', 1) == 'abc' + def test_levenshtein_1_ins(self): assert self._trie.levenshtein('abbc', 1) == 'abc' -- GitLab