2012-05-12 2 views
3

http://venturocket.com과 유사한 기술 일치 기능을 구현해야합니다. 후보자는 기술 목록을 입력하고 각자의 능력을 평가합니다. 그런 다음 다시 찾고 싶은 기술과 수준을 입력하여 검색 할 수 있습니다. 결과는 자신의 기술이 검색과 얼마나 잘 일치하는지에 따라 정렬 된 후보자 목록입니다.기술 일치 알고리즘

예 :

후보 1 스킬 자바 (숙련도 90) 및 후보 2로 진입하는 자바 (50)로 들어간다. Java (60)를 검색 할 때 후보 2가 더 일치합니다.

이 숄드는 여러 가지 기술로 작동합니다.

내가 찾고있는 것은 이것을 달성하는 데 도움이되는 기술이나 알고리즘을 가리키는 포인터입니다. 현재 나의 접근 방식은 데이터베이스에서 범위 쿼리를 수행하고 (예 : 45에서 75 사이의 Java 기술을 찾은 다음) 클라이언트에서 정렬하지만 매우 빠르지는 않을 것입니다.

+0

사람들이 자신의 실력을 대규모로 입력하게하면 무언가를 만드는 것이 정말 어려울 것입니다. 그냥 말해. 물론 프로그래밍 방식을 의미하지는 않습니다. – keyser

답변

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의 것입니다 (주석/편집 참조).

+2

후보자의 근접성을 결정하는보다 정확한 방법은 단순히 직교 거리 (Cartesian distance)이며, 각 수준의 숙련도를 차원으로 처리합니다. 이는 각 기술 차이의 제곱을 요약하는 것을 의미합니다. 예를 들어 두 명의 후보자가 Java (50), SQL (70), Java (60), SQL (40) 및 Java를 검색 한 경우 (60), SQL 200, 400이되므로 첫 번째 후보가 선택됩니다. 이것은 직교 좌표 거리이며, 각 차원의 스킬을 자신의 차원으로 취급하고, 가장 가까운 좌표를 전달할 수 있습니다. – DanRedux

+0

@ DanRedux - 정확하고 정확합니다. 당신은 당신의 코멘트를 대답해야한다, 그 다음 당신은 대표를 가질 수있다! :) –

+0

Naw, 나는 단 한명의 담당자와 함께 사람들을 도울 수 있기 때문에 볼 담당자를별로 관심이 없다. – DanRedux

2

이렇게 구현하도록 요청 받았으면 클러스터링 알고리즘을 살펴 보겠습니다.

여러 속성 (기술)에서 유사점을 기반으로 후보를 그룹화하면 검색 매개 변수와 가장 유사한 후보 클러스터를 쉽게 파악할 수 있습니다.

k-means 클러스터링은 사용하기가 쉽고 시작하기에 좋은 장소 일 것입니다. http://en.wikipedia.org/wiki/K-means_clustering

대부분의 프로그래밍 언어에서 k- 수단의 견고한 구현이 있으므로 시작하기가 쉽습니다. 당신은 information retrieval 문제로이를 치료하고 cosine similarity을 사용할 수 http://shop.oreilly.com/product/9780596529321.do

0

- 프로그래밍 집단 지성의 클러스터 기반의 필터링에 대한 좋은 정보를 많이 거기

.

각 후보에 대해 각 태그에 대해 입력 한 점수의 벡터를 형성해야합니다. 언급되지 않은 태그는 0의 점수를 얻습니다. 쿼리는 유사하게 변형되어 사용자가 각 태그에 대해 점수를 요청하게하거나 언급 한 태그를 높은 점수로 처리하는 등의 방식으로 곱을 곱합니다. 내적 값과 크기를 사용하여 쿼리 및 각 후보자; 정렬하고 최상위를 선택하십시오.

이러한 사항은 직접 구현하는 데 큰 스트로크입니다. 어떤 진지한 응용에서 나는 이 아니라이 아니라, sphinx 또는 lucene과 같은 것을 분쇄 해 줄 것을 권합니다.

+0

vector와 같은 벡터 기술의 내적을 사용하는 경우 'java'가 쿼리의 일부가 아닌 경우에 'java = 0 '? 그것은 틀린 것처럼 보입니다 - 각 벡터를 관련된 차원에만 투영 할 필요가 없습니까? – gcbenison

+0

공정한 포인트; 나는 고의적으로 단순화하고있다. 이 권리를 얻는 방법에 대한 전체 책 (예 : http://nlp.stanford.edu/IR-book/)이 있습니다. 내 설명은 설명하기위한 것입니다. 따라서 심각한 시도가 기존 검색 어플라이언스를 대신 사용하는 것이 좋습니다. – phs