2012-06-29 4 views
0

저는 거의 100,000 개의 주석이 달린 데이터베이스를 가지고 있으며, 가장 많이 사용되는 단어 (일반적인 단어를 피하기 위해 정지 단어 사용)를 감지하고 싶습니다.MySQL/PHP에서 가장 인기있는 단어를 찾으십시오.

이 작업을 한 번만 수행 한 다음 가장 많이 사용되는 단어 몇 개를 사용하여 해당 단어가 포함 된 주석에 태그를 답니다.

쿼리 및 PHP 코드를 사용하면 도움이 될 수 있습니까? 감사합니다.

+0

댓글은 프리 텍스트 문자열입니다. 맞습니까? 사용자가 제공 한 텍스트가 들어있는 varchar (x)와 비슷합니까? – Windle

+1

http://stackoverflow.com/questions/9226603/sphinx-search-mysql-find-most-common-words – craig1231

+1

희망 나는 stackoverflow 시스템을 깰하지 않았다. 내 말은, 일반적인 과정이 무엇인지 자세히 설명했다. – Aufziehvogel

답변

1

내가 생각하는 가장 쉬운 방법은 다음과 같습니다

  • keywords는 고유 ID와 키워드를 저장 (keyword_id, comment_id, 계산) keywords (ID, 워드) 및 keywords_comments :

    • 두 개의 새 테이블 만들기 텍스트에서 찾았습니다.
    • keywords_comments은 해당 키워드가 들어있는 각 설명 간의 연결마다 하나의 행을 저장합니다. count에서이 키워드가 주석에 발생한 횟수를 저장합니다. keyword_id + comment_id라는 두 개의 열이 함께 고유하거나 직접 기본 키를 형성합니다.
  • 예를 귀하의 테이블

에 이러한 항목을 쓰기 모든 댓글을 통해 데이터베이스
  • 구문 분석에서 모든 주석을 검색하고 비 문자 (또는 다른 경계)
  • 에 의해 분할 다음 두 가지 의견이 있습니다.

    여보세요, 잘 있었 니?!

    와우, 안녕하세요. 내 이름은 스테판이야.

    이제 둘 다 반복하고 비 문자로 분할하십시오. 이것은 각 텍스트에 대해 다음 소문자 단어를 초래 : - 첫 번째 텍스트 : 안녕하세요, 당신 얼마나, - 두 번째 텍스트 : 내, 안녕하세요, 와우, 이름,이다, 즉시 구문 분석대로

    을 스테판 이 텍스트 중 하나를 이미 데이터베이스에 다시 삽입 할 수 있습니다. 나는 당신이 RAM에 100,000 개의 댓글을로드하고 싶지 않다고 생각한다. 이
  • 키워드에서 참조로 설정 아직있을 경우 tabke keywords으로 각 키워드를 작성

    • 구문 분석 첫 번째 텍스트를
    • 위의 키워드를 얻을 :

      그래서이 갈 것 주석 (keywords_comments) 및 개수를 올바르게 설정하십시오 (이 예에서는 각 단어가 각 텍스트에서 한 번만 발생하므로이를 계산해야합니다).

    • 구문 분석 번째 텍스트
    • ...

    가 마이너 개선

    당신은 아마 100.000 의견을 사용할 필요가 아주 쉽게 개선이다

    변수 계산 사용하거나 새 필드 has_been_analyzed을 추가 할 수 각 댓글에 그런 다음 데이터베이스에서 주석으로 주석을 읽을 수 있습니다.

    대개 데이터를 청크 방식으로 읽었을 때 데이터가 시작 방향에서 바뀔 수 없다는 것을 알 때 (주로 현재까지 일관된 상태로 유지됩니다) 계산할 변수를 사용합니다.

    SELECT * FROM table ORDER BY created ASC LIMIT 0, 100 
    SELECT * FROM table ORDER BY created ASC LIMIT 100, 100 
    SELECT * FROM table ORDER BY created ASC LIMIT 200, 100 
    … 
    

    우리는 우리가 이미 읽은 생각하는 장소에 추가하는 날짜가 없음을 확실히 알고있을 경우에만 작동하는지 생각해 그리고 내가 좋아하는 뭔가. 예 : DESC을 사용하면 데이터가 삽입 될 수 있으므로 작동하지 않습니다. 그러면 전체 오프셋이 깨지고 한 기사를 두 번 읽고 새 기사를 읽지 않을 것입니다.

    외부 계수 변수가 일관성을 유지할 수없는 경우 으로 해석되는 새 필드를 추가 할 수 있습니다.이 필드는 주석을 읽 자마자 true로 설정됩니다. 그렇다면 언제 어느 주석이 이미 읽었는지 볼 수 있습니다. SQL 쿼리는 다음과 같을 것이다 : 이것은만큼 당신이 (여러 클라이언트 또는 스레드) 작업 부하를 병렬화하지 않는 한 작동

    SELECT * FROM table WHERE analyzed = 0 LIMIT 100 /* Reading chunks of 100 */ 
    

    . 그렇지 않으면 읽기 + 설정 true가 atomar (동기화 됨)인지 확인해야합니다.

  • +0

    감사합니다 @Aufziehvogel, 정말 도움이되었습니다! – Santiago