使用python的用户“技能”匹配

时间:2018-01-17 12:20:45

标签: python comparison matching recommendation-engine

问题陈述是:根据匹配技能(S1,S2,S3,S4)识别项目的正确人(X,Y,Z ......)(ABC,DEF,....) ,S5,S6 ......)。

示例: 在S1,S2,S3中有一个熟练的人X. 另一个熟悉S4,S5,S6的人Y. S1,S3,S5,S6中熟练的另一个人Z。

然后有一个项目ABC,它使用这些技能之一 - 让我们说技能S1。 所以我们应该能够为项目ABC识别人X,因为它使用技能S1。

同样,如果另一个项目DEF需要技能S5& S6,我们应该指派Y& Z因为技巧匹配。

是否有一个python等效于以最佳方式实现这一目标?

我试过了:

import re, math
from collections import Counter

WORD = re.compile(r'\w+')

def get_cosine(vec1, vec2):
     intersection = set(vec1.keys()) & set(vec2.keys())
     numerator = sum([vec1[x] * vec2[x] for x in intersection])

     sum1 = sum([vec1[x]**2 for x in vec1.keys()])
     sum2 = sum([vec2[x]**2 for x in vec2.keys()])
     denominator = math.sqrt(sum1) * math.sqrt(sum2)

     if not denominator:
        return 0.0
     else:
        return float(numerator) / denominator

def text_to_vector(text):
     words = WORD.findall(text)
     return Counter(words)

text1 = 'python, c, perl'
text2 = 'perl,c'

vector1 = text_to_vector(text1)
vector2 = text_to_vector(text2)

cosine = get_cosine(vector1, vector2)

print 'Cosine:', cosine

1 个答案:

答案 0 :(得分:1)

我不知道这是好方法。但如果不是大数据,你可以去做这件事:

skill = {'x': [1, 2, 3], 'y': [4, 5,6], 'z': [5,6,7,1]}
all_employees = list(skill.keys())
needed_employees = []
required_skill = [5, 6]
for i in (all_employees):
    c = 0
    for j in required_skill:
         if j in skill[i]:
            c += 1
    if c == len(required_skill):
         needed_employees.append(i)
print(needed_employees)