2012-07-17 4 views
3

분석 할 원시 텍스트가있는 데이터베이스가 있습니다. 예를 들어 수억 개의 개별 웹 페이지 제목 태그를 수집하여 주제에 따라 클러스터했습니다. 이제 각 주제 클러스터의 하위 집합에 대한 몇 가지 추가 테스트를 수행하는 데 관심이 있습니다. 문제는 두 가지입니다. 첫째, 모든 텍스트를 메모리에 저장하여 평가할 수는 없습니다. 둘째, 이러한 분석을 여러 번 병렬로 실행해야하므로, 하위 집합을 메모리에 넣을 수는 있어도 많은 하위 집합을 메모리에 맞출 수는 없습니다.메모리에 맞지 않는 데이터 분석

저는 발전기로 작업 해 왔지만 이미로드되고 평가 된 데이터 행에 대한 정보를 알고 있어야하는 경우가 종종 있습니다.

내 질문은 다음과 같습니다. 메모리에 맞지 않는 데이터를 처리하고 분석하는 가장 좋은 방법은 무엇입니까? 데이터는 필연적으로 일종의 데이터베이스에서 추출해야합니다 (현재는 mysql이지만 곧 더 강력한 솔루션으로 전환 될 것입니다.)

저는 파이썬에서 데이터를 처리하는 소프트웨어를 구축하고 있습니다.

편집, 감사

내가 연구하고 내 생각과 연구 결과를 게시 계속 하루 종일 계획이에 브레인 스토밍됩니다. 입력이나 조언을 남겨주세요.

IDEA 1 : 단어 및 n 그램을 토큰으로 저장하고 파일에 저장하십시오. 데이터베이스에서 가져온 각 문자열에 대해 기존 파일의 토큰을 사용하여 토큰 화합니다. 토큰이 존재하지 않으면 작성하십시오. 각 단어 토큰에 대해 문자열의 모든 단어가 하나씩 표시 될 때까지 오른쪽에서 왼쪽으로 결합하십시오. 감소 된 토큰으로 구성된 기존 목록 (메모리에 맞을 수 있음)을 검색하여 잠재적 인 일치 및 유사점을 찾습니다. 각 감소 된 토큰에는 토큰 카테고리를 나타내는 식별자가 포함됩니다. 감소 된 토큰 (단어 토큰의 조합에 의해 생성 된 토큰)이 토큰 화 된 관심 문자열과 범주 적으로 일치하지만 직접적으로 일치하지 않는 것으로 밝혀지면 감소 된 토큰이 해당 토큰으로 분해되고 단어 토큰으로 비교됩니다. 토큰을 관심있는 문자열에 추가하십시오.

이 작업을 수행 할 수있는 라이브러리 또는 모듈이 이미 있는지 잘 모르겠지만 실제로 얻을 수있는 이점도 없습니다. 그러나, 우선 순위 : 1) 메모리 절약, 2) 런타임에 대한 걱정. 생각?

편집 2

하둡은 확실히이 문제에 대한 해결책이 될 것입니다. python과 hadoop에서 자연 언어 처리에 대한 훌륭한 자원을 발견했습니다. 아래를 참조하십시오 : 당신의 도움에 대한

  1. http://www.cloudera.com/blog/2010/03/natural-language-processing-with-hadoop-and-python
  2. http://lintool.github.com/MapReduceAlgorithms/MapReduce-book-final.pdf
  3. http://www.michael-noll.com/tutorials/writing-an-hadoop-mapreduce-program-in-python
  4. https://github.com/klbostee/dumbo/wiki/Short-tutorial

감사합니다!

답변

2

Map/Reduce이 목적으로 만들어졌습니다.

최고의 맵 축소 엔진은 Hadoop이지만 학습 곡선이 높고 많은 노드가 필요합니다. 작은 프로젝트 인 경우 MongoDB을 사용할 수 있습니다.이 데이터베이스는 실제로 사용하기 쉬운 데이터베이스이며 Javascript를 사용하는 내부 맵 축소 엔진을 포함합니다. 지도 축소 프레임 워크는 매우 간단하고 배우기 쉽지만 Hadoop을 사용하여 JDK에서 얻을 수있는 모든 도구가 부족합니다.

경고 : MongoDB의지도 축소 엔진에서는 한 번에 하나의지도 축소 작업 만 실행할 수 있습니다. 이것은 연쇄 작업 또는 중간 데이터 세트 (< 100GB)에 대해서는 문제가 없지만 Hadoop의 병렬 처리가 부족합니다.

+1

Upvoted. 개념적으로 알고리즘을 각각 다른 단계로 나눌 필요가 있습니다. 각 단계에는 자체 입력, 작업 저장 및 출력이 있습니다. 각 단계는 데이터의 고유 한 파티션에서 작동해야합니다. 작업 기억 장치는 메모리 내부 공간에 대해 걱정할 필요가있는 유일한 데이터입니다. 알고리즘의 각 단계에 필요한 모든 메타 모델 및 그룹 요약/요약을 작성하는 것을 두려워하지 마십시오. 디스크는 RAM보다 훨씬 저렴합니다. –

+0

이것은 완벽합니다. Hadoop은 확실히이 문제에 대한 해결책을 찾고 있습니다. –

0

현재 mysql이 있지만 곧 더 강력한 솔루션으로 전환 될 것입니다.

시간을 악화시키지 마십시오. 대부분의 유형 작업이 튜닝 된 경우 MySQL을 사용하는 것이 가장 좋습니다. 거대한 데이터 massives를 처리

iteratools 또는

소개 방법으로 반복 데이터 Build a Basic Python Iterator 사용합니다. 그것은 당신 알고리즘에 달려 있습니다.

관련 문제