X-Git-Url: https://git.mdrn.pl/wolnelektury.git/blobdiff_plain/9362aac47564f9b03a3fcad625b312e85dfdf6db..756585089fb09cd0e25856b55510e69a52112e5f:/apps/search/views.py diff --git a/apps/search/views.py b/apps/search/views.py index fc14b067d..d9b2f26d5 100644 --- a/apps/search/views.py +++ b/apps/search/views.py @@ -1,5 +1,4 @@ - from django.shortcuts import render_to_response, get_object_or_404 from django.template import RequestContext from django.contrib.auth.decorators import login_required @@ -9,6 +8,31 @@ from catalogue.utils import get_random_hash from catalogue.models import Book, Tag from catalogue import forms from search import MultiSearch, JVM, SearchResult +from lucene import StringReader + +import enchant + +dictionary = enchant.Dict('pl_PL') + + +def did_you_mean(query, tokens): + change = {} + + for t in tokens: + print("%s ok? %s, sug: %s" %(t, dictionary.check(t), dictionary.suggest(t))) + if not dictionary.check(t): + try: + change[t] = dictionary.suggest(t)[0] + except IndexError: + pass + + if change == {}: + return None + + for frm, to in change.items(): + query = query.replace(frm, to) + + return query def main(request): @@ -17,15 +41,26 @@ def main(request): srch = MultiSearch() results = None + query = None + fuzzy = False if 'q' in request.GET: - toks = srch.get_tokens(request.GET['q']) - results = SearchResult.aggregate(srch.search_perfect_book(toks), - srch.search_perfect_parts(toks), - srch.search_everywhere(toks)) + query = request.GET['q'] + toks = StringReader(query) + fuzzy = 'fuzzy' in request.GET + if fuzzy: + fuzzy = 0.7 + + + results = SearchResult.aggregate(srch.search_perfect_book(toks, fuzzy=fuzzy), + srch.search_perfect_parts(toks, fuzzy=fuzzy), + srch.search_everywhere(toks, fuzzy=fuzzy)) results.sort(reverse=True) for r in results: print r.parts - return render_to_response('newsearch/search.html', {"results": results}, + return render_to_response('newsearch/search.html', {'results': results, + 'did_you_mean': (query is not None) and + did_you_mean(query, srch.get_tokens(query, field='SIMPLE')), + 'fuzzy': fuzzy}, context_instance=RequestContext(request))