123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869 |
- from django.shortcuts import render
- from django.utils import timezone
- from django.shortcuts import redirect
- from review.forms import ReplyForm
- from review.models import Review, CustomReply
- from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger
- from .nlu_utils import model_inference, analyze_inference, filter_with_last_ten_reviews
- def predict_report(request, review_id):
- review = Review.objects.filter(review_id=review_id).first()
- if review is None:
- return redirect('un-replied-review')
- location_id = review.location.location_id
- text = review.comment.lower()
- res = model_inference(text=text)
- intents = analyze_inference(res)
- now = timezone.now()
- form = ReplyForm()
- date = now - timezone.timedelta(days=30)
- reviews = Review.objects.filter(reply=None, update_time__gte=date)\
- .exclude(comment=None, star_rating=5).order_by('update_time')
- page = request.GET.get('page', 1)
- paginator = Paginator(reviews, 15)
- try:
- reviews = paginator.page(page)
- except PageNotAnInteger:
- reviews = paginator.page(1)
- except EmptyPage:
- reviews = paginator.page(paginator.num_pages)
- if review.star_rating == 5:
- replies = {}
- for intent in intents.keys():
- r = CustomReply.objects.filter(reply_category=intent)
- filtered_replies = filter_with_last_ten_reviews(location_id, r)
- replies[intent] = filtered_replies
- # ================================================================================================================================
- # This is for temporary use, It will be remove in future release.
- # This part of code block is used for show all reviews as intent classifier make mistake sometime.
- replies2 = {}
- rep_cls = {'staff', 'facility', 'kids', 'quick', 'general_review', 'open_24', 'continuous_visit'}.difference(set(intents.keys()))
- for c in rep_cls:
- r = CustomReply.objects.filter(reply_category=c)
- filtered_replies = filter_with_last_ten_reviews(location_id, r)
- replies2[c] = filtered_replies
- # End of the temporary code block
- # ================================================================================================================================
- else:
- cr = CustomReply.objects.values('reply_category').distinct()
- cr_li = {c_r['reply_category'] for c_r in cr}
- rep_cls = cr_li.difference({'staff', 'facility', 'kids', 'quick', 'general_review', 'open_24', 'continuous_visit', 'no_comment'})
- replies = {}
- replies2 = None
- for c in rep_cls:
- r = CustomReply.objects.filter(reply_category=c)
- filtered_replies = filter_with_last_ten_reviews(location_id, r)
- replies[c] = filtered_replies
- context = {
- 'reviews': reviews,
- 'form': form,
- 'intents': intents,
- 'replies': replies,
- 'replies2': replies2 # This context is associate with the temporary code that mentioned above.
- }
- return render(request, 'dashboard.html', context)
|