문제

관련/공통 키워드 또는 태그의 공간 맵을 구축하기 위한 전략이나 아이디어를 이해하려고 노력하고 있습니다.SO를 예로 사용합니다.당신이 가면 https://stackoverflow.com/tags "python"을 입력하면 해당 단어가 포함된 모든 태그가 표시되지만 밀접하게 관련된 태그(WSGI, Google App Engine, 비행 등)는 표시되지 않습니다.

내 질문에 따르면, 검색에서 밀접하게 관련된 태그/키워드를 무게순으로 정렬하여 찾기 위해 쿼리할 수 있는 공간 맵을 어떻게 구축할 수 있습니까?그렇다면 태그 foo의 가중치를 잠재적으로 더 많은 수의 태그에 저장하고 시스템의 응답성을 유지하는 방법은 무엇입니까?

저는 이미 David Weinberger가 진행한 Google Tech-talk를 시청했는데, 이는 저를 생각하게 만드는 훌륭한 기술 강연입니다.http://video.google.com/videoplay?docid=2159021324062223592&ei=qseASZvgI6e4qAP91a2PDg&q=google+tech+talk

도움이 되었습니까?

해결책

O'Reilly의 클러스터링 개념을 확인하세요. "집단지성 프로그래밍".

다른 팁

그러한 관계에 관한 데이터를 구축하는 가장 가능성 있는 방법은 어떤 태그가 가장 자주 함께 표시되는지, 동시에 가장 적은 수의 다른 태그와 함께 표시되는지를 분류하는 것인 것 같습니다.

즉, "c++"와 "stl"은 함께 많이 등장하고, "stl"은 "c++" 없이는 거의(?) 나오지 않으므로 서로 관련이 있다(적어도 한 방향으로)."c++"와 "알고리즘"도 함께 많이 등장하지만, 따로 등장하는 경우가 더 많아 서로 관련이 없습니다.

데이터가 어떻게 구성될 수 있는지 생각하면서 제가 생각한 아이디어 중 하나는 아마도 4개의 테이블 시스템일 수 있었습니다.하나의 테이블은 소스 데이터입니다(예:SO를 사용하면 일종의 질문 테이블이 있어야 하며, 이는 태그 테이블에 조인된 다음 태그 테이블에 다시 조인되는 태그 가중치 테이블입니다.

#pseudo code
     source table {
     id: int
     source_data: text   
     }

     source_tag table {
        source_id: int
        tag_id: int
     }

     tag table{
      id: int
      tag: String(30)
     }

    tag_weight table {
        base_tag_id: int
        weight: float( 0-10 or 100 ) or int ( count of mutual occurrence )
        source_tag_id: int      
    }

이 구조가 얼마나 효율적인지는 모르겠지만, 작업할 부분이 있다고 생각합니다.그렇지 않으면 소스 데이터에 대한 새로운 승인이 업데이트 후 트리거를 실행하거나 백그라운드에서 작업자 프로세스가 미리 설정된 시간에 가중치를 재조정하도록 할 수 있습니다.

좋은 검색 엔진이 필요합니다.;)

너 스스로해라:유사성 알고리즘 중 하나를 구현합니다.예를 들어: 레벤슈타인 거리 또는 주사위의 계수.

또는 다음과 같이 바로 사용할 수 있는 것을 사용하세요. 루씬.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top