技能匹配算法

时间:2012-05-12 06:51:24

标签: database algorithm search matching

我需要实现类似于http://venturocket.com的技能匹配功能 - 候选人输入技能列表并评估他对每个技能的熟练程度。然后,您可以再次输入一些技能和您正在寻找的专业水平。结果是根据他们的技能与您的搜索匹配顺序排列的候选人列表。

示例:

候选人1进入技能Java(熟练程度90),候选人2进入Java(50)。当我搜索Java(60)时,候选人2是一个更接近的匹配。

这种说法也适用于多种技能。

我正在寻找的是能够帮助我实现这一目标的技术或算法的指针。我目前的方法是在数据库中进行范围查询(例如,查找45到75之间的Java技能)然后在客户端上排序,但这不会很快。

3 个答案:

答案 0 :(得分:4)

将您要检查的值作为查询的参数传递,然后使用欧几里德距离(差值的平方)进行排序:

SELECT TOP 20 * -- added a TOP 20 as example, choose/limit as appropriate for your situation
FROM Candidate
ORDER BY SQUARE(Candidate.JavaProficiency - @JavaProficiency) + SQUARE(Candidate.SqlProficiency - @SqlProficiency)

对于多个特征,您可以总结每个方差。

有关详细信息,请参阅Wikipedia: Euclidean Distance(特别是“平方欧几里德距离”部分)。请注意,这个答案实际上是DanRedux(见评论/编辑)。

答案 1 :(得分:2)

如果我被要求实现这样的东西,我将从查看聚类算法开始。

通过根据候选人在多个属性(技能)上的相似性将候选人分组在一起,可以很容易地找出最有可能与您的搜索参数匹配的候选人群。

k-means聚类相当容易使用,可能是一个很好的起点。 http://en.wikipedia.org/wiki/K-means_clustering

在大多数编程语言中都有坚实的k-means实现,所以入门应该相当容易。

在集体智慧编程中有很多关于基于群集的过滤的好信息 - http://shop.oreilly.com/product/9780596529321.do

答案 2 :(得分:0)

您可以将此视为information retrieval问题并使用cosine similarity

这涉及为每个候选人形成他们为每个标签输入的分数的向量。未提及的标签得分为0.查询的变换方式类似,让用户请求每个标签的分数,或者可能只是将提到的标签视为高分等。使用点积和幅度,可以计算查询之间的相似性得分和每个候选人;排序并选择最高的。

这些是你自己实施它的广泛招数。在任何严肃的应用程序中,我建议你这样做,而是去除sphinxlucene之类的内容,为你做这件事。