views.py 1.7 KB

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