-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtrie_spellcheck.py
79 lines (68 loc) · 2.27 KB
/
trie_spellcheck.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
class Tnode:
def __init__(self):
self.isendword = False
self.storetrie = {}
class Trie:
def __init__(self):
self.root = Tnode()
def insertele(self, key):
element = self.root
for a in key:
if not element.storetrie.get(a):
element.storetrie[a] = Tnode()
element = element.storetrie[a]
element.isendword = True
def buildtrie(self, grp):
for key, values in grp.items():
for word in values:
self.insertele(word)
def search(self, w):
element = self.root
for i in w:
if not element.storetrie.get(i):
return False
element = element.storetrie[i]
return element.isendword
def suggestionsRec(self, element, w, suggestions):
if element.isendword:
suggestions.append(w)
for i, n in element.storetrie.items():
self.suggestionsRec(n, w + i, suggestions)
def spellchk(self, w):
element = self.root
tmp = 0
for i in w:
if not element.storetrie.get(i):
suggestions = []
self.suggestionsRec(element, w[0:tmp], suggestions)
return suggestions
tmp += 1
element = element.storetrie[i]
if not element.storetrie:
return []
suggestions = []
self.suggestionsRec(element, w, suggestions)
return suggestions
def search_keyword(self, query, grp):
if self.search(query):
for k, v in grp.items():
if query in v:
print("Key:", k)
return k
else:
suggestions = self.spellchk(query)
if suggestions:
for suggestion in suggestions:
for k, v in grp.items():
if suggestion in v:
return
grp = {
"Computer": ["Computer", "Comp", "Compute", "Com", "Computers", "Computing"],
"python": ["Py", "Pyth", "Pytho", "Pyt", "python", "Pythn","py"],
"Operating System" : ["os","OS","operating","systems","oprt"]
}
print("Enter the word that you need to check spelling:")
key = input()
root = Trie()
root.buildtrie(grp)
root.search_keyword(key, grp)