2011-12-21 3 views
2

저는 MongoDB에 짹짹의 크기에 대한 "설명"값을 가진 문서 그룹을 가지고 있습니다. 나는 이것에서 유행 화제 명부를 생성 할 필요가있다. 분명히 이것은 해결 된 문제이지만 코드를 직접 작성하지 않고 작업을 완료하는 데 결정적인 답/보석을 찾을 수 없습니다.MongoDB Trending Topics Gem이 있습니까?

내 애플 리케이션에 ruby ​​& mongoid를 사용하고 있습니다.

도움이 될만한 루비 보석이 있습니까? 감사.

답변

3

rubygems.org의 빠른 검색을 통해 프로그래밍을해야한다는 것을 알 수 있습니다. 이는 일반적으로 추세를 감지하는 시스템이 설치하기가 어려우므로 응용 프로그램의 "추세"를 결정하는 것을 추측하는 데 어려움을 겪습니다.

귀하의 신청서에 대해 몇 가지 가정을 할 것입니다.

사용자가 해시 태그 (#)를 사용하여 자신의 트윗을 스스로 분류한다고 가정 해 봅시다. 또한 이러한 해시 태그를 정렬하여 계산하면 주제가 인기 급상승하고 있는지 판단 할 수 있습니다.

이제 컴퓨터 과학 부분에 대해 이야기 해 보겠습니다. 위의 가정을 감안할 때, 추세를 파악하기 위해 해시 태그 모음을 빠르게 쿼리하고 정렬 할 수 있어야합니다.

MongoDB와 mongoid (레일 포함)를 사용하고 있으므로 가장 간단한 방법은 사용 횟수가 포함 된 태그 문서가있는 모음을 만드는 것입니다. 태그 및 개수에 대한 색인을 만듭니다.

누군가 트윗하면 해시 태그가 무엇인지 파악하고 태그 컬렉션에서 태그를 찾아 개수를 늘립니다. 트렌드가 무엇인지 파악하려면 태그 모음을 쿼리하고 카운트별로 정렬하십시오. 이렇게하면 항상 해시 태그를 추세로 파악할 수 있습니다.

카운트를 저장하는 대신 시간 델타 (주, 일, 시간 등)별로 세분화 된 수를 저장하는 것보다 더 구체적으로 알고 싶다면 따로 저장하는 것이 좋습니다. 개별 태그 대신 시간 델타를 나타내는 문서를 작성하고 모든 태그를 내부에 저장하십시오.

{ 
    start: "start datetime", 
    end: "end datetime", 
    tags: { 
     awesome: 3, 
     cool: 2, 
     boring: 2 
    } 
} 

캡핑 된 컬렉션을 사용할 수도 있습니다. 희망은 도움이됩니다.이 모든 것은 실제로 당신이하려는 일에 달려 있습니다. 정말 미쳐서 시간이 지남에 따라 추세를 계산할 수 있습니다. 여러분은 reddit이나 해커 뉴스 코드를 읽으면 그게 어떤 것인지 알 수 있습니다.

6

나는 그런 보석을 알고 있지만, 여기 당신이 자신을 위해 쓸 수있는 알고리즘입니다 : 텍스트에서

  1. 추출 n-grams은. 텍스트가 작기 때문에 (당신이 말한 트윗 크기) 모든 n-gram을 추출합니다. 여기에는 제한이 없습니다.각 텍스트의 N-그램에 대한

    "I eat icecream" => {(I), (eat), (icecream), (I eat), (eat icecream), (I eat icecream)}

  2. 계산 TF-IDF 가중치 벡터

    {(I):0.1, (eat):0.01, (icecream):0.2, (I eat):0.12, (eat icecream):0.001, (I eat icecream):0.00012}

  3. 당신의 벡터를 통해 incremental clustering 알고리즘, 아마도 스크립트를 통해 Weka 라이브러리에 대한 측정 기능과 사용 cosine similarityJRuby

  4. 모든 클러스터를 채우기 크기로 정렬하십시오. 가장 큰 클러스터 센터의 n-gram은 유행하는 주제입니다.

관련 문제