Adding "Did you mean?" feature in Django app
I am working on a simple django app. I have searchbar in which user enters text and then presses search (or enter) and then another page opens with picture of searched word. If user enters wrong word (which is not in dictionary), nothnig happens. I want that, after entering wrong word, new page opens where would be did you mean feature: there would be corrected word which user probably wanted to write and link on picture of that word. I use Norvig's spelling corrector (https://norvig.com/spell-correct.html)
I have Index.html:
<!DOCTYPE html>
<head>
<title>Autocomplete with Datalist</title>
</head>
<body>
<h1>DropDown List Autocomplete</h1>
<hr /> <!-- horizontal line -->
<input list="ddlcomplete" name="q" placeholder="Search fruit name" />
<datalist id="ddlcomplete">
{% for result in autocomplete%}
<option>{{result.naziv}}</option>
{% endfor %}
</datalist>
{% if voce.image %}
<img src="{{ voce.slika.url }}" class="img-responsive" />
{% else %}
<p>No image to preview</p>
{% endif %}
</body>
</html>
Spell.py (Norvig's corrector) (in big.txt are all words from dictionary - words that are possible to search for):
import re
from collections import Counter
def words(text): return re.findall(r'\w+', text.lower())
WORDS = Counter(words(open('big.txt').read()))
def P(word, N=sum(WORDS.values())):
"Probability of `word`."
return WORDS[word] / N
def correction(word):
"Most probable spelling correction for word."
return max(candidates(word), key=P)
def candidates(word):
"Generate possible spelling corrections for word."
return (known([word]) or known(edits1(word)) or known(edits2(word)) or [word])
def known(words):
"The subset of `words` that appear in the dictionary of WORDS."
return set(w for w in words if w in WORDS)
def edits1(word):
"All edits that are one edit away from `word`."
letters = 'abcdefghijklmnopqrstuvwxyz'
splits = [(word[:i], word[i:]) for i in range(len(word) + 1)]
deletes = [L + R[1:] for L, R in splits if R]
transposes = [L + R[1] + R[0] + R[2:] for L, R in splits if len(R)>1]
replaces = [L + c + R[1:] for L, R in splits if R for c in letters]
inserts = [L + c + R for L, R in splits for c in letters]
return set(deletes + transposes + replaces + inserts)
def edits2(word):
"All edits that are two edits away from `word`."
return (e2 for e1 in edits1(word) for e2 in edits1(e1))
I don' know how to connect this, or do I have to write code from spell.py somewhere else. Can you please give me some hints?