views.py 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  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_model_inference,
  11. filter_with_last_ten_reviews
  12. )
  13. @login_required
  14. def predict_report(request, review_id):
  15. review = Review.objects.get(review_id=review_id)
  16. location_id = review.location_id
  17. replies = {}
  18. if review.star_rating == 5:
  19. text = review.comment.lower()
  20. res = model_inference(text=text)
  21. intents = analyze_model_inference(res)
  22. for intent in intents.keys():
  23. r = CustomReply.objects.filter(reply_category=intent)
  24. filtered_replies = filter_with_last_ten_reviews(location_id, r)
  25. replies[intent] = filtered_replies
  26. elif review.star_rating == 4:
  27. intents = {'four_star': 100}
  28. cr = CustomReply.objects.filter(reply_star=4)
  29. filtered_replies = filter_with_last_ten_reviews(location_id, cr)
  30. replies = {'four_star': filtered_replies}
  31. elif review.star_rating == 3:
  32. intents = {'three_star': 100}
  33. cr = CustomReply.objects.filter(reply_star=3)
  34. filtered_replies = filter_with_last_ten_reviews(location_id, cr)
  35. replies = {'three_star': filtered_replies}
  36. else:
  37. intents = {'negative': 100}
  38. cr = CustomReply.objects.filter(reply_star__lte=2)
  39. filtered_replies = filter_with_last_ten_reviews(location_id, cr)
  40. replies = {'negative': filtered_replies}
  41. now = timezone.now()
  42. form = ReplyForm()
  43. date = now - timezone.timedelta(days=30)
  44. hours = now - timezone.timedelta(hours=6)
  45. reviews = Review.objects.filter(reply=None, update_time__gte=date)\
  46. .exclude(comment=None, star_rating=5)\
  47. .exclude(star_rating__lte=3, update_time__gte=hours)\
  48. .order_by('update_time')
  49. page = request.GET.get('page', 1)
  50. paginator = Paginator(reviews, 10)
  51. try:
  52. reviews = paginator.page(page)
  53. except PageNotAnInteger:
  54. reviews = paginator.page(1)
  55. except EmptyPage:
  56. reviews = paginator.page(paginator.num_pages)
  57. context = {
  58. 'reviews': reviews,
  59. 'form': form,
  60. 'intents': intents,
  61. 'replies': replies,
  62. }
  63. return render(request, 'dashboard.html', context)