Beispiel #1
0
        public double PredicaoDeVaga(Usuario usuario, Vaga vaga)
        {
            double pontuacao = 0.0;

            double avaliadaPor = 0.0;

            bool alreadyFound = false;

            foreach (Avaliacao avaliacao in vaga.avaliacoes)
            {

                if (alreadyFound || avaliacao.usuario.ID != usuario.ID)
                {
                    ++avaliadaPor;

                    double pontosSimilaridade = SimilaridadeDeUsuarioComOutroUsuario(usuario, avaliacao.usuario);

                    if (avaliacao.Gostou)
                    {
                        pontuacao += pontosSimilaridade;
                    }
                    else
                    {
                        pontuacao -= pontosSimilaridade;
                    }
                }
                else
                {
                    alreadyFound = true;
                }
            }

            return pontuacao / avaliadaPor;
        }
        public double CalculaPercentagemDeRequisitosAtendidos(Usuario usuario, Vaga vaga)
        {
            double pontosTotais = 0, pontosFeitos = 0;

            foreach (NivelQualificacao qualificacaoVaga in vaga.qualidadesDesejadas)
            {
                NivelQualificacao qualificacaoUsuario = usuario.qualidades.FirstOrDefault(n => n.qualificacao.Tipo == qualificacaoVaga.qualificacao.Tipo);

                pontosTotais += qualificacaoVaga.Nivel;

                if (qualificacaoUsuario != null)
                {
                    double aproveitamento = (double)qualificacaoUsuario.Nivel / qualificacaoVaga.Nivel;

                    if (aproveitamento > 1)
                    {
                        pontosFeitos += qualificacaoVaga.Nivel + (qualificacaoUsuario.Nivel - qualificacaoVaga.Nivel) * 0.05;
                    }
                    else if (aproveitamento == 1)
                    {
                        pontosFeitos += qualificacaoVaga.Nivel;
                    }
                    else if (aproveitamento < 1)
                    {
                        pontosFeitos += qualificacaoUsuario.Nivel; // * aproveitamento;
                    }

                }

            }

            return pontosFeitos / pontosTotais;
        }
Beispiel #3
0
        public void TestDistanciaFundaoBarra()
        {
            //https://www.google.com.br/maps/dir/-22.8580108,-43.2322284/-22.9965259,-43.3564107

            RecommendationService rService = Factory.Instance.Get<RecommendationService>();

            Usuario usuario = new Usuario { Latitude = -22.8580108, Longitude = -43.2322284 };
            Vaga vaga = new Vaga { Latitude = -22.9965259, Longitude = -43.3564107 };

            double distancia = rService.CalculaDistanciaEntreUsuarioEVaga(usuario, vaga);
            Assert.IsTrue(distancia > 25 && distancia < 30, "Esperando entre 25 e 30, retornado: " +  distancia);
        }
        public double CalculaDistanciaEntreUsuarioEVaga(Usuario usuario, Vaga vaga)
        {
            if (usuario.Latitude != 0.0 &&
                usuario.Longitude != 0.0 &&
                vaga.Latitude != 0.0 &&
                vaga.Longitude != 0.0)
            {
                return googleApi.CalculaDistanciaEntreDoisPontos(usuario.Latitude, usuario.Longitude, vaga.Latitude, vaga.Longitude);
            }

            return 0.0;
        }
Beispiel #5
0
        public IEnumerable<PontuacaoVaga> OrdenaVagasPorCoeficienteDeJaccard(IEnumerable<Vaga> vagas, Usuario usuario)
        {
            List<PontuacaoVaga> listaPontuacaoVaga = new List<PontuacaoVaga>();

            foreach (Vaga vaga in vagas)
            {
                listaPontuacaoVaga.Add(new PontuacaoVaga
                {
                    vaga = vaga,
                    predicaoAvaliacao = PredicaoDeVaga(usuario, vaga)
                });
            }

            //TO DO
            return listaPontuacaoVaga.OrderByDescending(v => v.predicaoAvaliacao);
        }
        public List<Vaga> OrdenaVagasPorRecomendacao(Usuario usuario, List<Vaga> listaVagas)
        {
            List<Tuple<Vaga, double, double>> listaRetornoVagas = new List<Tuple<Vaga, double, double>>();

            foreach (Vaga vaga in listaVagas)
            {
                double requisitosAtendidos = CalculaPercentagemDeRequisitosAtendidos(usuario, vaga);
                double distanciaUsuarioVaga = CalculaDistanciaEntreUsuarioEVaga(usuario, vaga);

                listaRetornoVagas.Add(Tuple.Create(vaga, requisitosAtendidos, distanciaUsuarioVaga));
            }

            listaRetornoVagas.Sort(new ComparadorVaga());

            return listaRetornoVagas.Select(t => t.Item1).ToList();
        }
Beispiel #7
0
        public double SimilaridadeDeUsuarioComOutroUsuario(Usuario usuario, Usuario outro)
        {
            double acordos = 0.0;
            double desacordos = 0.0;

            double totalAvaliacoes = 0.0;

            HashSet<Avaliacao> outrasAvaliacoes = (outro.avaliacoes as HashSet<Avaliacao>);

            Dictionary<int, Avaliacao> dic = new Dictionary<int, Avaliacao>();

            foreach (Avaliacao avaliacao in outrasAvaliacoes)
            {
                dic.Add(avaliacao.vaga.ID, avaliacao);
            }

            foreach (Avaliacao avaliacao in usuario.avaliacoes)
            {
                Avaliacao outra;

                if (dic.TryGetValue(avaliacao.vaga.ID, out outra))
                {
                    dic.Remove(avaliacao.vaga.ID);

                    if (avaliacao.Gostou == outra.Gostou)
                    {
                        ++acordos;
                    }
                    else
                    {
                        ++desacordos;
                    }

                    outrasAvaliacoes.Remove(outra);
                }
            }

            totalAvaliacoes = usuario.avaliacoes.Count + outrasAvaliacoes.Count;

            return (acordos - desacordos) / totalAvaliacoes;
        }
        public void TestBasico()
        {
            Usuario usuario = new Usuario
            {
                qualidades = new List<NivelQualificacao> {
                    new NivelQualificacao { qualificacao = jQuery, Nivel = 90 },
                    new NivelQualificacao { qualificacao = javascript, Nivel = 95 },
                    new NivelQualificacao { qualificacao = CSharp, Nivel = 70 },
                    new NivelQualificacao { qualificacao = CSS, Nivel = 60 },
                    new NivelQualificacao { qualificacao = Lideranca, Nivel = 50 }
                }
            };

            List<Vaga> listaVagasInicial = new List<Vaga> {
                new Vaga { Titulo = "Vaga3", qualidadesDesejadas = new List<NivelQualificacao> {
                    new NivelQualificacao { qualificacao = TrabalhoEmEquipe, Nivel = 80 },
                    new NivelQualificacao { qualificacao = SerAutoDidata, Nivel = 60 },
                }},
                new Vaga { Titulo = "Vaga1", qualidadesDesejadas = new List<NivelQualificacao> {
                    new NivelQualificacao { qualificacao = jQuery, Nivel = 70 },
                    new NivelQualificacao { qualificacao = javascript, Nivel = 80 },
                    new NivelQualificacao { qualificacao = CSharp, Nivel = 90 },
                    new NivelQualificacao { qualificacao = SerAutoDidata, Nivel = 50 },
                }},
                new Vaga { Titulo = "Vaga2", qualidadesDesejadas = new List<NivelQualificacao> {
                    new NivelQualificacao { qualificacao = CSS, Nivel = 70 },
                    new NivelQualificacao { qualificacao = CSharp, Nivel = 60 },
                    new NivelQualificacao { qualificacao = TrabalhoEmEquipe, Nivel = 80 },
                    new NivelQualificacao { qualificacao = SerAutoDidata, Nivel = 80 },
                }}
            };

            RecommendationService rService = Factory.Instance.Get<RecommendationService>();

            List<Vaga> listaVagasRecomendadas = rService.OrdenaVagasPorRecomendacao(usuario, listaVagasInicial);
            Assert.IsTrue(listaVagasRecomendadas != null);
            Assert.IsTrue(listaVagasRecomendadas[0].Titulo == "Vaga1", "Esperada vaga1, vaga retornada = " + listaVagasRecomendadas[0].Titulo);
            Assert.IsTrue(listaVagasRecomendadas[1].Titulo == "Vaga2", "Esperada vaga2, vaga retornada = " + listaVagasRecomendadas[1].Titulo);
            Assert.IsTrue(listaVagasRecomendadas[2].Titulo == "Vaga3", "Esperada vaga3, vaga retornada = " + listaVagasRecomendadas[2].Titulo);
        }
Beispiel #9
0
 public UsuarioModel(Usuario usuario)
 {
     this.ID = usuario.ID;
     this.UserID = usuario.UserID;
     this.Email = usuario.Email;
     this.Nome = usuario.Nome;
     this.Sobrenome = usuario.Sobrenome;
     this.Roles = usuario.Roles;
     this.Latitude = usuario.Latitude;
     this.Longitude = usuario.Longitude;
     this.DataCriacao = usuario.DataCriacao;
     this.DataNascimento = usuario.DataNascimento;
     this.Genero = usuario.Genero;
     this.FacebookID = usuario.FacebookID;
     this.EmailVerificado = usuario.EmailVerificado;
     this.CadastradoPeloFacebook = usuario.CadastradoPeloFacebook;
     this.Descricao = usuario.Descricao;
     this.DescricaoMarkdown = usuario.DescricaoMarkdown;
     this.HeaderImageUrl = usuario.HeaderImageUrl;
     this.ProfileImageUrl = usuario.ProfileImageUrl;
     this.Bloqueado = usuario.Bloqueado;
     this.EhAdmin = usuario.Roles.Contains("admin");
 }
Beispiel #10
0
        public void TestSimilaridade1Inverso()
        {
            Usuario usuario = new Usuario
            {
                avaliacoes = new List<Avaliacao> {
                    new Avaliacao {
                        Gostou = true,
                        vaga = vaga1
                    }
                }
            };

            Usuario outro = new Usuario
            {
                avaliacoes = new List<Avaliacao> {
                    new Avaliacao {
                        Gostou = false,
                        vaga = vaga1
                    }
                }
            };

            Assert.AreEqual(-1, jaccardService.SimilaridadeDeUsuarioComOutroUsuario(usuario, outro));
        }
Beispiel #11
0
        private IEnumerable<Vaga> OrdenaVagasRestantesPorConteudo(List<JaccardService.PontuacaoVaga> vagasOrdenadasPorJaccard, Usuario usuario)
        {
            IEnumerable<Vaga> vagasOrdenadas = new List<Vaga>();

            List<Vaga> tempVagas = new List<Vaga>();

            if (vagasOrdenadasPorJaccard.Count > 1)
            {
                tempVagas.Add(vagasOrdenadasPorJaccard[0].vaga);
            }
            else
            {
                return vagasOrdenadasPorJaccard.Select(v => v.vaga);
            }

            for (int i = 1; i < vagasOrdenadasPorJaccard.Count(); ++i)
            {
                if (vagasOrdenadasPorJaccard[i].predicaoAvaliacao != vagasOrdenadasPorJaccard[i - 1].predicaoAvaliacao)
                {
                    tempVagas = _recommendationService.OrdenaVagasPorRecomendacao(usuario, tempVagas);

                    vagasOrdenadas = vagasOrdenadas.Concat(tempVagas);

                    tempVagas = new List<Vaga>();
                }

                tempVagas.Add(vagasOrdenadasPorJaccard[i].vaga);
            }

            tempVagas = _recommendationService.OrdenaVagasPorRecomendacao(usuario, tempVagas);

            vagasOrdenadas = vagasOrdenadas.Concat(tempVagas);

            return vagasOrdenadas.ToList();
        }
Beispiel #12
0
        public bool RegistrarUsuario(string Nome, string userID, string Email, string senha)
        {
            Usuario usuario = _uow.Usuarios.Get(u =>
                u.UserID.ToLower() == userID.ToLower() ||
                u.Email.ToLower() == Email.ToLower()).FirstOrDefault();

            if (Nome != HtmlRemoval.StripTagsRegex(Nome) ||
                Email != HtmlRemoval.StripTagsRegex(Email) ||
                userID != HtmlRemoval.StripTagsRegex(userID)) return false;

            if (usuario != null || userID.Length < 6 || Nome.Length < 2 || Email.Length < 5 || senha.Length < 6) return false;

            string patternEmail = @"^[a-z0-9!#$%&'*+/=?^_`{|}~.-]+@[a-z0-9-]+\.([a-z0-9])+(\.[a-z0-9]+)*";
            Regex rgx = new Regex(patternEmail, RegexOptions.IgnoreCase);

            if (!rgx.IsMatch(Email)) return false;

            Usuario novoUsuario = new Usuario()
            {
                Nome =  Nome,
                Email = Email,
                UserID = userID,
                Senha = senha,
                Roles = "user",
                DataCriacao = DateTime.Now
            };

            _uow.Usuarios.Insert(novoUsuario);
            _uow.Save();

            return true;
        }
Beispiel #13
0
        private Usuario GetUsuarioFromUsuarioModel(UsuarioModel usuarioModel)
        {
            if (usuarioModel == null) return null;

            Usuario usuario = new Usuario();

            usuarioModel.Nome = HtmlRemoval.StripTagsRegex(usuarioModel.Nome);
            usuarioModel.DescricaoMarkdown = HtmlRemoval.StripTagsRegex(usuarioModel.DescricaoMarkdown);
            usuarioModel.Descricao = HtmlRemoval.StripTagsRegex(usuarioModel.Descricao);

            usuarioModel.ProfileImageUrl = HtmlRemoval.StripTagsRegex(usuarioModel.ProfileImageUrl);
            usuarioModel.HeaderImageUrl = HtmlRemoval.StripTagsRegex(usuarioModel.HeaderImageUrl);

            Uri uriResult;

            if (!(Uri.TryCreate(usuarioModel.ProfileImageUrl, UriKind.Absolute, out uriResult) && uriResult.Scheme == Uri.UriSchemeHttp))
            {
                usuarioModel.ProfileImageUrl = null;
            }

            if (!(Uri.TryCreate(usuarioModel.HeaderImageUrl, UriKind.Absolute, out uriResult) && uriResult.Scheme == Uri.UriSchemeHttp))
            {
                usuarioModel.HeaderImageUrl = null;
            }

            usuario.Nome = usuarioModel.Nome.Substring(0, usuarioModel.Nome.Length > 29 ? 29 : usuarioModel.Nome.Length);
            usuario.Descricao = usuarioModel.Descricao.Substring(0, usuarioModel.Descricao.Length > 79 ? 79 : usuarioModel.Descricao.Length);
            usuario.DescricaoMarkdown = usuarioModel.DescricaoMarkdown.Substring(0, usuarioModel.DescricaoMarkdown.Length > 3999 ? 3999 : usuarioModel.DescricaoMarkdown.Length);

            usuario.ProfileImageUrl = usuarioModel.ProfileImageUrl;
            usuario.HeaderImageUrl = usuarioModel.HeaderImageUrl;

            return usuario;
        }
Beispiel #14
0
        public void TestUmaSoQualidade2()
        {
            Usuario usuario = new Usuario
            {
                qualidades = new List<NivelQualificacao> {
                    new NivelQualificacao { qualificacao = jQuery, Nivel = 80 },
                    new NivelQualificacao { qualificacao = javascript, Nivel = 80 },
                    new NivelQualificacao { qualificacao = CSharp, Nivel = 80 }
                }
            };

            List<Vaga> listaVagasInicial = new List<Vaga> {
                new Vaga { Titulo = "Vaga1", qualidadesDesejadas = new List<NivelQualificacao> {
                    new NivelQualificacao { qualificacao = javascript, Nivel = 75 }
                }},
                new Vaga { Titulo = "Vaga3", qualidadesDesejadas = new List<NivelQualificacao> {
                    new NivelQualificacao { qualificacao = CSharp, Nivel = 85 }
                }},
                new Vaga { Titulo = "Vaga2", qualidadesDesejadas = new List<NivelQualificacao> {
                    new NivelQualificacao { qualificacao = jQuery, Nivel = 81 }
                }}
            };

            RecommendationService rService = Factory.Instance.Get<RecommendationService>();

            List<Vaga> listaVagasRecomendadas = rService.OrdenaVagasPorRecomendacao(usuario, listaVagasInicial);
            Assert.IsTrue(listaVagasRecomendadas != null);
            Assert.IsTrue(listaVagasRecomendadas[0].Titulo == "Vaga1", "Esperada vaga1, vaga retornada = " + listaVagasRecomendadas[0].Titulo);
            Assert.IsTrue(listaVagasRecomendadas[1].Titulo == "Vaga2", "Esperada vaga2, vaga retornada = " + listaVagasRecomendadas[1].Titulo);
            Assert.IsTrue(listaVagasRecomendadas[2].Titulo == "Vaga3", "Esperada vaga3, vaga retornada = " + listaVagasRecomendadas[2].Titulo);
        }
Beispiel #15
0
        public void TestSalarioERequisitosLigeiramenteDiferentes()
        {
            Usuario usuario = new Usuario
            {
                qualidades = new List<NivelQualificacao> {
                    new NivelQualificacao { qualificacao = jQuery, Nivel = 70 },
                    new NivelQualificacao { qualificacao = javascript, Nivel = 80 },
                    new NivelQualificacao { qualificacao = CSharp, Nivel = 90 },
                }
            };

            List<Vaga> listaVagasInicial = new List<Vaga> {
                new Vaga { Titulo = "Vaga2", Salario = 2100, qualidadesDesejadas = new List<NivelQualificacao> {
                    new NivelQualificacao { qualificacao = jQuery, Nivel = 70 },
                    new NivelQualificacao { qualificacao = javascript, Nivel = 80 },
                    new NivelQualificacao { qualificacao = CSharp, Nivel = 90 },
                    new NivelQualificacao { qualificacao = SerAutoDidata, Nivel = 50 },
                }},
                new Vaga { Titulo = "Vaga1", Salario = 2500, qualidadesDesejadas = new List<NivelQualificacao> {
                    new NivelQualificacao { qualificacao = jQuery, Nivel = 80 },
                    new NivelQualificacao { qualificacao = javascript, Nivel = 90 },
                    new NivelQualificacao { qualificacao = CSharp, Nivel = 90 },
                    new NivelQualificacao { qualificacao = SerAutoDidata, Nivel = 50 },
                }}
            };

            RecommendationService rService = Factory.Instance.Get<RecommendationService>();

            List<Vaga> listaVagasRecomendadas = rService.OrdenaVagasPorRecomendacao(usuario, listaVagasInicial);
            Assert.IsTrue(listaVagasRecomendadas != null);
            Assert.IsTrue(listaVagasRecomendadas[0].Titulo == "Vaga1", "Esperada vaga1, vaga retornada = " + listaVagasRecomendadas[0].Titulo);
            Assert.IsTrue(listaVagasRecomendadas[1].Titulo == "Vaga2", "Esperada vaga2, vaga retornada = " + listaVagasRecomendadas[1].Titulo);
        }
Beispiel #16
0
        public void TestPorcentagem75Porcento()
        {
            Usuario usuario = new Usuario
            {
                qualidades = new List<NivelQualificacao> {
                    new NivelQualificacao { qualificacao = jQuery, Nivel = 100 },
                    new NivelQualificacao { qualificacao = javascript, Nivel = 100 },
                    new NivelQualificacao { qualificacao = CSharp, Nivel = 100 },
                }
            };

            Vaga vaga = new Vaga
            {
                Titulo = "Vaga2",
                Salario = 2100,
                qualidadesDesejadas = new List<NivelQualificacao> {
                    new NivelQualificacao { qualificacao = jQuery, Nivel = 100 },
                    new NivelQualificacao { qualificacao = javascript, Nivel = 100 },
                    new NivelQualificacao { qualificacao = CSharp, Nivel = 100 },
                    new NivelQualificacao { qualificacao = SerAutoDidata, Nivel = 100 },
                }
            };

            RecommendationService rService = Factory.Instance.Get<RecommendationService>();

            Assert.AreEqual(rService.CalculaPercentagemDeRequisitosAtendidos(usuario, vaga), 0.75);
        }