Esempio n. 1
0
def process_feedback(request):
    if request.user.is_authenticated:
        try:

            recommendation_id = request.POST.get('recommendation_id')

            form_data = request.POST
            h.add_feedback(form_data, request.user.id)

            # getting newly filled user data
            recommendation = model.Recommendation.objects.get(
                id=recommendation_id)
            # check if it is system recommendation
            if model.SystemAlgorithmRecommendationLog.objects.filter(
                    recommendation=recommendation).exists():
                algo = 'ScipR System'
            else:
                algo = recommendation.algorithm.name
            # pagination related
            page = request.POST.get('page', 1)
            # divide results into 10 entry per page
            paginator = Paginator(
                h.process_user_recommendations(recommendation), 10)
            recom = paginator.page(page)
            response = render(
                request, 'GUIManager/displayrecommendation.html', {
                    'recommendations':
                    recom,
                    'algo':
                    algo,
                    'recommendation':
                    recommendation_id,
                    'Success':
                    "YOur feedback and "
                    "changes were updated succesfully"
                })
            return response

        except ValueError:

            response = render(
                request, 'GUIManager/displayrecommendation.html', {
                    'recommendations': recom,
                    'algo': recommendation.algorithm,
                    'recommendation': recommendation_id,
                    'Error': 'There was some problem'
                })
            return response
    else:
        return redirect('login')
Esempio n. 2
0
def show_ratedpapers(request):
    if request.user.is_authenticated:

        papers = h.get_rated_papers(request.user)
        paper_manager = PaperDataManager()

        return render(request, 'GUIManager/paper_list_rated.html', {
            'paper_list': papers,
            'title': "Papers marked relevant"
        })
    else:
        return redirect('login')
def update_system_recommendation(request):
    if request.user.is_authenticated:
        if request.method == "POST":
            h.set_system_recommendation(request.user,request.POST.get('algo_id'),
                                        request.POST.get('comment'))
            ratings = DBH.get_feedback_ratings()
            all_algorithms = AlgorithmManager().get_available_algorithms()
            response = render(request,
                              'GUIManager/evaluation_manager.html',
                              {'ratings': ratings,
                                'all_algorithms':all_algorithms,
                               'past_system_algo': model.SystemRecommendations.objects.all(),
                               'Success': "Your changes were updated succesfully"
                               }
                              )

            return response

    else:

        return redirect('login')
 def get_recommendations(self, user_id, algorithm_id):
     try:
         recommendation_results = []
         algorithm_name = Algorithm.objects.get(pk=algorithm_id).name
         im = ImportManager()
         im.load(algorithm_name)
         results = im.algorithm.get_recommendations(
             UserMapping.objects.get(user_id=user_id).external_user_id)
         doc_ids = [result[0] for result in results]
         paper_objs = Paper.objects.filter(doc_id__in=doc_ids)
         paper_dict = dict()
         for paper in paper_objs:
             paper_dict[paper.doc_id] = paper
         for index, result in enumerate(results):
             recommendation_results.append(
                 [index + 1, paper_dict[result[0]], result[1]])
         return recommendation_results
     except:
         return h.get_recommendations(user_id, algorithm_id)
Esempio n. 5
0
def add_ctr(request):
    page = request.GET.get('page', 1)
    h.update_ctr(request.GET.get('rec_id'), page)

    return redirect(request.GET.get('exurl'))
Esempio n. 6
0
def getrecommendation(request):
    """
    Gets recommendations from the specified algorithm (step 0)
    and does these things:
    1. adds a query entry into Recommendation Table
    2. And inserts recommendations corresponding to previous query into
    RecommendationResult
    3. Process the result before sending to user
    :param request:
    :return:
    """
    if request.user.is_authenticated:
        if request.method == "POST":
            algoid = request.POST.get('algorithm')
            print(algoid, request.user.id)
            algo = model.Algorithm.objects.get(pk=algoid)
            usr = request.user
            # step 0: get recommendations from the requested algorithm
            # recommendations = h.get_recommendations(userid=usr.id,
            # algoid=algo.id)
            recommendations = AlgorithmManager().get_recommendations(
                user_id=usr.id, algorithm_id=algo.id)
            # try:
            # step 1: insert an entry into Recommendation table
            reclog = model.Recommendation(
                algorithm=algo,
                user=usr,
                input_rating_count=h.get_rating_matrix_size())
            reclog.save()

            # step 2: insert the algorithm results corresponding to previous
            # reclog id
            is_system_rec = request.POST.get('systemreco', None)
            h.add_recommendation(reclog, recommendations, is_system_rec)

            # step 3: Process the result before sending to user
            formatted_result_dict = h.process_user_recommendations(reclog)
            # except:
            #     return redirect('home')

            # pagination related code
            # initial page result is sent as 1
            page = 1
            # divide results into 10 entry per page
            paginator = Paginator(formatted_result_dict, 10)
            # update CTR
            h.update_ctr(reclog.id, page, for_pagination=True)
            try:
                recom = paginator.page(page)
            except PageNotAnInteger:
                recom = paginator.page(1)
            except EmptyPage:
                recom = paginator.page(paginator.num_pages)
            response = render(
                request,
                'GUIManager/displayrecommendation.html',
                {
                    'recommendations': recom,
                    'algo':
                    'ScipR System' if is_system_rec is not None else algo.name,
                    'recommendation': reclog.id,
                    # to display alert message in result page
                    'message': '1'
                })
            return response
        elif request.method == "GET":
            # Pagination related
            # get the recommendation list again
            try:
                recommendation = model.Recommendation.objects.get(
                    id=request.GET.get('rec_id'))
            except:
                return redirect('home')
            if model.SystemAlgorithmRecommendationLog.objects.filter(
                    recommendation=recommendation).exists():
                algo = 'ScipR System'
            else:
                algo = recommendation.algorithm.name
            page = request.GET.get('page', 1)
            # update CTR when a new page is shown
            h.update_ctr(request.GET.get('rec_id'), page, for_pagination=True)
            # divide results into 10 entry per page
            paginator = Paginator(
                h.process_user_recommendations(recommendation), 10)

            try:
                recom = paginator.page(page)
                # to prevent unauthorised attempts to view previous
                # recommendations based on rec_id
                if request.user.id != recommendation.user_id:
                    return redirect('home')
            except PageNotAnInteger:
                recom = paginator.page(1)
            except EmptyPage:
                recom = paginator.page(paginator.num_pages)
            response = render(
                request, 'GUIManager/displayrecommendation.html', {
                    'recommendations': recom,
                    'algo': algo,
                    'recommendation': request.GET.get('rec_id')
                })
            return response
            # return HttpResponseRedirect(reverse('display_recommendation'))

    else:

        return redirect('login')