views.py 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  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 gauth.models import Location
  7. from difflib import SequenceMatcher
  8. from .nlu_utils import model_inference, analyze_inference
  9. def filter_with_last_ten_reviews(location_id, replies):
  10. replies = list(replies)
  11. revs = Review.objects.filter(location_id=location_id).exclude(reply=None).order_by('-update_time')[:12]
  12. for r in revs:
  13. s1 = r.reply.replied_text
  14. for rep in replies:
  15. s2 = rep.reply
  16. similarity = SequenceMatcher(None, s1, s2).ratio()
  17. if similarity > 0.7:
  18. replies.remove(rep)
  19. print(similarity, '--------------', rep.reply_category)
  20. # if similarity < 0.7 and rep not in reps:
  21. # reps.append(rep)
  22. return replies
  23. def predict_report(request, review_id):
  24. review = Review.objects.filter(review_id=review_id).first()
  25. if review is None:
  26. return redirect('un-replied-review')
  27. location_id = review.location.location_id
  28. text = review.comment.lower()
  29. res = model_inference(text=text)
  30. intents = analyze_inference(res)
  31. now = timezone.now()
  32. form = ReplyForm()
  33. date = now - timezone.timedelta(days=30)
  34. reviews = Review.objects.filter(reply=None, update_time__gte=date).order_by('-update_time')
  35. replies = {}
  36. for intent in intents.keys():
  37. r = CustomReply.objects.filter(reply_category=intent)
  38. filtered_replies = filter_with_last_ten_reviews(location_id, r)
  39. replies[intent] = filtered_replies
  40. context = {
  41. 'reviews': reviews,
  42. 'form': form,
  43. 'intents': intents,
  44. 'replies': replies
  45. }
  46. return render(request, 'dashboard.html', context)