コード例 #1
0
 public RatingCounterTests(AlghorythmTestSeed testSeed)
 {
     _ratingCounter = testSeed.RatingCounter;
     _cV            = testSeed.CV;
     _vacancy       = testSeed.Vacancy;
     _splitedSkills = testSeed.SkillsMatcher.MatchSkills(testSeed.SkillKnowledge, testSeed.SplitedSkills);
 }
コード例 #2
0
ファイル: SkillSplitter.cs プロジェクト: lenaonisch/PandaHR
        private void FindMainSkills(int middleWeight, SplitedSkillsAlghorythmModel splitedSkills)
        {
            if (splitedSkills.HardSkills.Count != 0)
            {
                var  buffer = new List <SkillRequestSkillKnowledge>(splitedSkills.HardSkills.ToList());
                bool stoped = false;

                for (int index = 1; index < splitedSkills.HardSkills.Count; index++)
                {
                    splitedSkills.MainSkills.Add(new SkillRequestSkillKnowledge()
                    {
                        SkillRequirement = splitedSkills.HardSkills[index - 1].SkillRequirement
                    });
                    buffer.Remove(splitedSkills.HardSkills[index - 1]);

                    if (splitedSkills.HardSkills[index - 1].SkillRequirement.Weight
                        - splitedSkills.HardSkills[index].SkillRequirement.Weight > middleWeight)
                    {
                        stoped = true;
                        break;
                    }
                }
                if (!stoped)
                {
                    splitedSkills.MainSkills.Add(new SkillRequestSkillKnowledge()
                    {
                        SkillRequirement = splitedSkills.HardSkills[splitedSkills.HardSkills.Count - 1].SkillRequirement
                    });
                    buffer.Remove(buffer.Last());
                }

                splitedSkills.HardSkills = buffer;
            }
        }
コード例 #3
0
        public void RatingDependensyBySkillWeigthTest()
        {
            //Arrange
            int firstWeigth  = 40;
            int secondWeigth = 80;
            int firstRating  = 0;
            int secondRating = 0;
            int middleWeight = 30;

            var newSplitedSkills = new SplitedSkillsAlghorythmModel();

            newSplitedSkills.HardSkills = new List <SkillRequestSkillKnowledge>(_splitedSkills.HardSkills);
            newSplitedSkills.LangSkills = new List <SkillRequestSkillKnowledge>(_splitedSkills.LangSkills);
            newSplitedSkills.MainSkills = new List <SkillRequestSkillKnowledge>(_splitedSkills.MainSkills);
            newSplitedSkills.SoftSkills = new List <SkillRequestSkillKnowledge>(_splitedSkills.SoftSkills);

            //Act
            newSplitedSkills.HardSkills[0].SkillRequirement.Weight = firstWeigth;
            firstRating = _ratingCounter.CountRating(newSplitedSkills, _cV, _vacancy, middleWeight);

            newSplitedSkills.HardSkills[0].SkillRequirement.Weight = secondWeigth;
            secondRating = _ratingCounter.CountRating(newSplitedSkills, _cV, _vacancy, middleWeight);

            //Assert
            Assert.True(secondRating > firstRating);
        }
コード例 #4
0
ファイル: ScoreAlghorythm.cs プロジェクト: lenaonisch/PandaHR
        public List <IdAndRating> GetVacancysRaiting(IEnumerable <VacancyAlghorythmModel> vacancys, CVAlghorythmModel cV)
        {
            List <IdAndRating>           vacancysByRating = new List <IdAndRating>();
            SplitedSkillsAlghorythmModel splitedSkills;

            int middleWeight;
            int raiting;

            foreach (VacancyAlghorythmModel vacancy in vacancys)
            {
                middleWeight  = FindMiddleWeight(vacancy.SkillRequests);
                splitedSkills = _skillSplitter.SplitSkills(vacancy.SkillRequests, middleWeight);

                splitedSkills = _skillsMatcher.MatchSkills(cV.SkillKnowledges, splitedSkills);

                raiting = _ratingCounter.CountRating(splitedSkills, cV, vacancy, middleWeight);
                vacancysByRating.Add(new IdAndRating()
                {
                    Rating = raiting,
                    Id     = vacancy.Id
                });

                splitedSkills = new SplitedSkillsAlghorythmModel();
            }
            vacancysByRating = vacancysByRating.OrderByDescending(x => x.Rating).ToList();

            return(vacancysByRating);
        }
コード例 #5
0
        public SplitedSkillsAlghorythmModel MatchSkills(List <SkillKnowledgeAlghorythmModel> skillKnowledges
                                                        , SplitedSkillsAlghorythmModel splitedSkills)
        {
            splitedSkills = FindCommonSkills(skillKnowledges, splitedSkills);
            splitedSkills = FindAllSubSkills(skillKnowledges, splitedSkills);

            return(splitedSkills);
        }
コード例 #6
0
        private SplitedSkillsAlghorythmModel FindAllSubSkills(List <SkillKnowledgeAlghorythmModel> knowledges
                                                              , SplitedSkillsAlghorythmModel splitedSkills)
        {
            splitedSkills.HardSkills = FindRootSkills(knowledges, splitedSkills.HardSkills);
            splitedSkills.LangSkills = FindRootSkills(knowledges, splitedSkills.LangSkills);
            splitedSkills.MainSkills = FindRootSkills(knowledges, splitedSkills.MainSkills);
            splitedSkills.SoftSkills = FindRootSkills(knowledges, splitedSkills.SoftSkills);

            return(splitedSkills);
        }
コード例 #7
0
        private SplitedSkillsAlghorythmModel FindCommonSkills(List <SkillKnowledgeAlghorythmModel> knowledges
                                                              , SplitedSkillsAlghorythmModel splitedSkills)
        {
            splitedSkills.HardSkills = FindPairSkill(knowledges, splitedSkills.HardSkills);
            splitedSkills.LangSkills = FindPairSkill(knowledges, splitedSkills.LangSkills);
            splitedSkills.MainSkills = FindPairSkill(knowledges, splitedSkills.MainSkills);
            splitedSkills.SoftSkills = FindPairSkill(knowledges, splitedSkills.SoftSkills);

            return(splitedSkills);
        }
コード例 #8
0
ファイル: RatingCounter.cs プロジェクト: lenaonisch/PandaHR
        public int CountRating(SplitedSkillsAlghorythmModel splitedSkills, CVAlghorythmModel cv, VacancyAlghorythmModel vacancy
                               , int middleWeight)
        {
            int rating = 1;

            rating += CountOtherSkillScore(splitedSkills.SoftSkills, _softKnowledgeScaleStep);
            rating += CountMainSkillScore(splitedSkills.MainSkills);
            rating += CountOtherSkillScore(splitedSkills.HardSkills, _hardKnowledgeScaleStep);
            rating += CountLanguageSkillScore(splitedSkills, middleWeight);
            rating  = CountRatingWithQualification(rating, cv, vacancy);

            rating = RatingToZeroIfLess(rating);

            return(rating);
        }
コード例 #9
0
        public void CountRatingWithoutHardSkillTest()
        {
            //Arrange
            int rating;
            int result       = 316;
            int middleWeight = 30;

            var newSplitedSkills = new SplitedSkillsAlghorythmModel();

            newSplitedSkills.HardSkills = new List <SkillRequestSkillKnowledge>(_splitedSkills.HardSkills);
            newSplitedSkills.LangSkills = new List <SkillRequestSkillKnowledge>(_splitedSkills.LangSkills);
            newSplitedSkills.MainSkills = new List <SkillRequestSkillKnowledge>(_splitedSkills.MainSkills);
            newSplitedSkills.SoftSkills = new List <SkillRequestSkillKnowledge>(_splitedSkills.SoftSkills);

            //Act
            newSplitedSkills.HardSkills[0].SkillKnowledge = null;
            rating = _ratingCounter.CountRating(newSplitedSkills, _cV, _vacancy, middleWeight);

            //Assert
            Assert.Equal(result, rating);
        }
コード例 #10
0
ファイル: SkillSplitter.cs プロジェクト: lenaonisch/PandaHR
        private SplitedSkillsAlghorythmModel SplitSkillsByType(List <SkillRequestAlghorythmModel> skillRequests)
        {
            var splitedSkills = new SplitedSkillsAlghorythmModel();

            skillRequests = skillRequests.OrderByDescending(w => w.Weight).ToList();

            for (int index = 0; index < skillRequests.Count; index++)
            {
                if (skillRequests[index].Skill.SkillType == _skillTypeValues.HardSkillsValue)
                {
                    splitedSkills.HardSkills.Add(new SkillRequestSkillKnowledge()
                    {
                        SkillRequirement = skillRequests[index]
                    });
                }
                else if (skillRequests[index].Skill.SkillType == _skillTypeValues.LanguageSkillsValue)
                {
                    splitedSkills.LangSkills.Add(new SkillRequestSkillKnowledge()
                    {
                        SkillRequirement = skillRequests[index]
                    });
                }
                else if (skillRequests[index].Skill.SkillType == _skillTypeValues.SoftSkillsValue)
                {
                    splitedSkills.SoftSkills.Add(new SkillRequestSkillKnowledge()
                    {
                        SkillRequirement = skillRequests[index]
                    });
                }
                else
                {
                    throw new ArgumentException("Invalid SkillType value");
                }
            }

            return(splitedSkills);
        }
コード例 #11
0
        private void ConfigSplitedSkills()
        {
            var hardSkills = new List <SkillRequestSkillKnowledge>();
            var langSkills = new List <SkillRequestSkillKnowledge>();
            var mainSkills = new List <SkillRequestSkillKnowledge>();
            var softSkills = new List <SkillRequestSkillKnowledge>();

            mainSkills.Add(new SkillRequestSkillKnowledge()
            {
                SkillRequirement = new SkillRequestAlghorythmModel()
                {
                    Skill  = DotNet,
                    Weight = 80
                }
            });
            mainSkills.Add(new SkillRequestSkillKnowledge()
            {
                SkillRequirement = new SkillRequestAlghorythmModel()
                {
                    Skill  = EntityFramework,
                    Weight = 75
                }
            });

            hardSkills.Add(new SkillRequestSkillKnowledge()
            {
                SkillRequirement = new SkillRequestAlghorythmModel()
                {
                    Skill  = ASPNetCore,
                    Weight = 45
                }
            });

            langSkills.Add(new SkillRequestSkillKnowledge()
            {
                SkillRequirement = new SkillRequestAlghorythmModel()
                {
                    Skill  = English,
                    Weight = 80
                }
            });

            softSkills.Add(new SkillRequestSkillKnowledge()
            {
                SkillRequirement = new SkillRequestAlghorythmModel()
                {
                    Skill  = Oratory,
                    Weight = 35
                }
            });
            softSkills.Add(new SkillRequestSkillKnowledge()
            {
                SkillRequirement = new SkillRequestAlghorythmModel()
                {
                    Skill  = Friendliness,
                    Weight = 15
                }
            });

            SplitedSkills = new SplitedSkillsAlghorythmModel()
            {
                HardSkills = hardSkills,
                LangSkills = langSkills,
                MainSkills = mainSkills,
                SoftSkills = softSkills
            };
        }
コード例 #12
0
 public SkillMatcherTests(AlghorythmTestSeed testSeed)
 {
     _skillsMatcher  = testSeed.SkillsMatcher;
     _skillKnowledge = testSeed.SkillKnowledge;
     _splitedSkills  = testSeed.SplitedSkills;
 }
コード例 #13
0
ファイル: RatingCounter.cs プロジェクト: lenaonisch/PandaHR
        private int CountLanguageSkillScore(SplitedSkillsAlghorythmModel splitedSkills, int middleWeight)
        {
            if (splitedSkills.LangSkills.Count == 0)
            {
                return(0);
            }

            int rating = 1;

            foreach (var skill in splitedSkills.LangSkills)
            {
                if (skill.SkillRequirement.Weight > splitedSkills.MainSkills.Last().SkillRequirement.Weight - middleWeight) // lang is main?
                {
                    if (skill.SkillKnowledge != null)
                    {
                        if (skill.SkillKnowledge.KnowledgeLevel >= skill.SkillRequirement.KnowledgeLevel)
                        {
                            rating += skill.SkillRequirement.Weight + skill.SkillRequirement.Weight
                                      * (skill.SkillKnowledge.KnowledgeLevel - skill.SkillRequirement.KnowledgeLevel)
                                      * _languageKnowledgeScaleStep / PERCENT_DIVIDER;
                        }
                        else if (skill.SkillKnowledge.KnowledgeLevel < skill.SkillRequirement.KnowledgeLevel)
                        {
                            rating += skill.SkillRequirement.Weight - skill.SkillRequirement.Weight
                                      * (skill.SkillRequirement.KnowledgeLevel - skill.SkillKnowledge.KnowledgeLevel)
                                      * _languageKnowledgeScaleStep * _languageKnowledgeScaleStep / PERCENT_DIVIDER;

                            rating = RatingToZeroIfLess(rating);
                        }
                    }
                    else
                    {
                        rating -= skill.SkillRequirement.Weight;
                    }
                }

                else
                {
                    if (skill.SkillKnowledge != null)
                    {
                        if (skill.SkillKnowledge.KnowledgeLevel >= skill.SkillRequirement.KnowledgeLevel)
                        {
                            rating += skill.SkillRequirement.Weight + skill.SkillRequirement.Weight
                                      * (skill.SkillKnowledge.KnowledgeLevel - skill.SkillRequirement.KnowledgeLevel)
                                      * _languageKnowledgeScaleStep / PERCENT_DIVIDER >> 1;
                        }
                        else if (skill.SkillKnowledge.KnowledgeLevel < skill.SkillRequirement.KnowledgeLevel)
                        {
                            rating = CountWithExpirience(rating, skill);

                            rating += skill.SkillRequirement.Weight - skill.SkillRequirement.Weight
                                      * (skill.SkillRequirement.KnowledgeLevel - skill.SkillKnowledge.KnowledgeLevel)
                                      * _languageKnowledgeScaleStep * _languageKnowledgeScaleStep / PERCENT_DIVIDER >> 1;

                            rating = RatingToZeroIfLess(rating);
                        }
                    }
                    else
                    {
                        rating -= skill.SkillRequirement.Weight >> 1;
                    }
                }
            }
            rating /= splitedSkills.LangSkills.Count;

            return(rating);
        }