public RatingCounterTests(AlghorythmTestSeed testSeed) { _ratingCounter = testSeed.RatingCounter; _cV = testSeed.CV; _vacancy = testSeed.Vacancy; _splitedSkills = testSeed.SkillsMatcher.MatchSkills(testSeed.SkillKnowledge, testSeed.SplitedSkills); }
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; } }
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); }
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); }
public SplitedSkillsAlghorythmModel MatchSkills(List <SkillKnowledgeAlghorythmModel> skillKnowledges , SplitedSkillsAlghorythmModel splitedSkills) { splitedSkills = FindCommonSkills(skillKnowledges, splitedSkills); splitedSkills = FindAllSubSkills(skillKnowledges, splitedSkills); return(splitedSkills); }
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); }
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); }
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); }
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); }
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); }
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 }; }
public SkillMatcherTests(AlghorythmTestSeed testSeed) { _skillsMatcher = testSeed.SkillsMatcher; _skillKnowledge = testSeed.SkillKnowledge; _splitedSkills = testSeed.SplitedSkills; }
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); }