views.py 2.6 KB

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