我需要实现一个类似于http://venturocket.com的技能匹配功能--候选人输入一个技能列表,并对每个技能的熟练程度进行评分。然后,您可以通过再次输入一些技能和您要查找的专业知识级别来进行搜索。结果是根据候选人的技能与您的搜索匹配程度排序的候选人列表。
示例:
候选人1进入技能Java (熟练程度90),候选人2进入Java (50)。当我搜索Java (60)时,候选者2更接近匹配。
这也应该与多种技能一起工作。
我正在寻找的是能帮助我实现这一目标的技术或算法的指针。我目前的方法是在数据库中进行范围查询(例如,查找45到75之间的Java技能),然后在客户端进行排序,但这不会很快。
发布于 2012-05-12 15:00:16
将您正在检查的值作为查询的参数传递,然后使用欧几里德距离(差值的平方)进行排序:
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的(参见注释/编辑)。
发布于 2012-05-12 23:54:37
如果有人要求我实现这样的东西,我会从研究集群算法开始。
通过根据候选人在许多属性(技能)上的相似程度将候选人分组在一起,可以很容易地计算出哪组候选人最有可能与您的搜索参数相匹配。
k-means聚类非常容易使用,可能是一个很好的起点。http://en.wikipedia.org/wiki/K-means_clustering
在大多数编程语言中都有可靠的k-means实现,因此入门应该相当容易。
在Programming Collective Intelligence - http://shop.oreilly.com/product/9780596529321.do中有很多关于基于集群的过滤的好信息
发布于 2012-05-13 08:18:22
您可以将其视为information retrieval问题并使用cosine similarity。
这涉及到为每个候选人形成他们为每个标签输入的分数的向量。未提及的标签得分为0。查询以类似的方式转换,让用户为每个标签请求一个分数,或者可能只是将提到的标签视为高分,等等。使用点积和幅度,可以计算查询和每个候选之间的相似性分数;排序并选择最高的。
这些都是你自己实现它的主要步骤。在任何严肃的应用程序中,我建议您不要这样做,而是使用sphinx或lucene之类的东西来为您做这件事。
https://stackoverflow.com/questions/10561700
复制相似问题