views.py 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. from django.shortcuts import render
  2. from django.utils import timezone
  3. from django.shortcuts import redirect
  4. from review.forms import ReplyForm
  5. from review.models import Review, CustomReply
  6. from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger
  7. from .nlu_utils import model_inference, analyze_inference, filter_with_last_ten_reviews
  8. def predict_report(request, review_id):
  9. review = Review.objects.filter(review_id=review_id).first()
  10. if review is None:
  11. return redirect('un-replied-review')
  12. location_id = review.location.location_id
  13. text = review.comment.lower()
  14. res = model_inference(text=text)
  15. intents = analyze_inference(res)
  16. now = timezone.now()
  17. form = ReplyForm()
  18. date = now - timezone.timedelta(days=30)
  19. reviews = Review.objects.filter(reply=None, update_time__gte=date)\
  20. .exclude(comment=None, star_rating=5).order_by('update_time')
  21. page = request.GET.get('page', 1)
  22. paginator = Paginator(reviews, 15)
  23. try:
  24. reviews = paginator.page(page)
  25. except PageNotAnInteger:
  26. reviews = paginator.page(1)
  27. except EmptyPage:
  28. reviews = paginator.page(paginator.num_pages)
  29. if review.star_rating == 5:
  30. replies = {}
  31. for intent in intents.keys():
  32. r = CustomReply.objects.filter(reply_category=intent)
  33. filtered_replies = filter_with_last_ten_reviews(location_id, r)
  34. replies[intent] = filtered_replies
  35. # ================================================================================================================================
  36. # This is for temporary use, It will be remove in future release.
  37. # This part of code block is used for show all reviews as intent classifier make mistake sometime.
  38. replies2 = {}
  39. rep_cls = {'staff', 'facility', 'kids', 'quick', 'general_review', 'open_24', 'continuous_visit'}.difference(set(intents.keys()))
  40. for c in rep_cls:
  41. r = CustomReply.objects.filter(reply_category=c)
  42. filtered_replies = filter_with_last_ten_reviews(location_id, r)
  43. replies2[c] = filtered_replies
  44. # End of the temporary code block
  45. # ================================================================================================================================
  46. else:
  47. cr = CustomReply.objects.values('reply_category').distinct()
  48. cr_li = {c_r['reply_category'] for c_r in cr}
  49. rep_cls = cr_li.difference({'staff', 'facility', 'kids', 'quick', 'general_review', 'open_24', 'continuous_visit', 'no_comment'})
  50. replies = {}
  51. replies2 = None
  52. for c in rep_cls:
  53. r = CustomReply.objects.filter(reply_category=c)
  54. filtered_replies = filter_with_last_ten_reviews(location_id, r)
  55. replies[c] = filtered_replies
  56. context = {
  57. 'reviews': reviews,
  58. 'form': form,
  59. 'intents': intents,
  60. 'replies': replies,
  61. 'replies2': replies2 # This context is associate with the temporary code that mentioned above.
  62. }
  63. return render(request, 'dashboard.html', context)