def calcularPontuacaoProximidade(indice_proximidade, loc_usuario, loc_est): ''' @param indice_proximidade: indice de proximidade (minimo e maximo) definido pelo usuario @param loc_usuario: localização atual do usuário (lat/long) @param loc_est: localização do estabelecimento (lat/long) @rtype: float ''' try: distancia = calcularDistancia(loc_usuario, loc_est) pontuacao = ( 100.0 - ((distancia - indice_proximidade.minimo) * 100.0)/float(indice_proximidade.diferenca()) ) return (pontuacao * indice_proximidade.relevancia)/100.0 except Exception, e: print "Recomendacao.views.calcularPontuacaoProximidade:", e return 0
def avaliar(localizacao_usuario, estabelecimento_item_list, indice_preco, indice_reputacao, indice_proximidade, formas_de_pagamento): ''' @author: alezy oliveira lima @param localizacao_usuario: localizacao.latitude e localizacao.longitude do usuário @type localizacao_usuario: Recomendacao.utils.Localizacao @param estabelecimento_item_list: lista de estabelecimentos que tem o item pretendido pelo usuário @type estabelecimento_item_list: list(ItemEstabelecimento) @param indice_preco: escala de indice_preco.minimo e indice_preco.maximo indicada pelo usuario @param indice_reputacao: escala de indice_reputacao.minimo e indice_reputacao.maximo indicada pelo usuario @param indice_proximidade: escala de indice_proximidade.minimo e indice_proximidade.maximo indicada pelo usuario @type indice_preco, indice_reputacao, indice_proximidade: Recomendacao.utils.Valores @param formas_de_pagamento: formas de pagamento indicadas pelo usuario @type formas_de_pagamento: list(int) @rtype: list(AvaliacaoItem) ''' # novo algoritmo de captação dos valores minimos e maximos try: lista = estabelecimento_item_list lista.sort(key=operator.attrgetter('preco')) indice_preco.maximo = lista[len(lista)-1].preco indice_preco.minimo = lista[0].preco lista.sort(key=operator.attrgetter('estabelecimento.reputacao.media')) indice_reputacao.maximo = lista[len(lista)-1].estabelecimento.reputacao.media indice_reputacao.minimo = lista[0].estabelecimento.reputacao.media for i in lista: i.distancia = calcularDistancia(localizacao_usuario, Localizacao(i.estabelecimento.latitude, i.estabelecimento.longitude)) lista.sort(key=operator.attrgetter('distancia')) indice_proximidade.maximo = lista[len(lista)-1].distancia indice_proximidade.minimo = lista[0].distancia except Exception, e: print e