views.py 3.2 KB

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