2011-01-24 4 views
10

자연어 처리 연구에 사용하는 문자열이 많습니다. 파이썬으로 저장하는 좋은 방법이 필요합니다.파이썬에서 큰 목록 (~ 10GB)을 저장하고 액세스하는 방법은 무엇입니까?

피클을 사용할 수는 있지만 전체 목록을 메모리에로드하는 것은 불가능할 것입니다 (저는 믿습니다). 크기는 약 10GB이며, 많은 메인 메모리가 없습니다. 현재 shelve 라이브러리에 저장된 목록이 있습니다 ... 선반은 "0", "1", ..., "n"등의 문자열로 색인이 생성됩니다.

하나의 파일에 이러한 개체를 저장하는 더 좋은 방법이 있습니까? 여전히 임의의 (ish) 액세스 권한이 있습니까?

최상의 옵션은 여러 목록으로 분할하는 것일 수 있습니다.

감사합니다.

답변

9

데이터를 가져 오는 방법에 따라 SQLite3이 최선의 방법 일 수 있습니다. SQLite3는 관계형 데이터에 대한 무작위 액세스는 뛰어나지 만 데이터가 관계형 적이 지 않으면 많은 의미를 갖지 않을 수 있습니다. (비록 당신의 모든 물건이 'ID'번호와 문자열이라 할지라도, 문자열의 기본 저장을위한 SQLite3가 훌륭하다고 생각합니다.)

문자열을 어떤 식 으로든 그룹화하는 메커니즘을 이해할 수 있다면 (예를 들어, 문장 중 일부에 대상 또는 주제가 내포되어 있고 구체적으로 연구하고 싶거나 문자열의 출처에 따라 공식 또는 비공식 또는 초 정보인지 여부에 따라) 데이터를 파티셔닝하여 데이터의 '작업 세트'를 상당히 줄일 수 있으며 연구의 처리량을 대폭 향상시킬 수 있습니다. 그러나 진정으로 무작위 접근을 원한다면 하나의 커다란 더미가 가장 좋을 것입니다.

희망이 도움이됩니다.

+0

실제로 데이터베이스가 이러한 종류의 작업에 더 적합하다고 생각합니다. 나는 그 총을 줄 것입니다 : D –

+1

그냥 SQLite3 이상으로 이식. 처리 속도가 훨씬 빠르며 선반이 차지하는 디스크 공간의 약 1/3이 필요합니다! –

+2

하! 작은 _and_. 나는 SQLite3을 좋아한다. : D – sarnold

3

데이터베이스 사용을 고려해 볼 수 있습니다. 각 문장마다 하나의 행이있는 문장 또는 문자열 테이블 일 수 있습니다.

일부 객체 관계 맵퍼 (예 : sqlalchemy)를 사용하면 데이터에 대한 객체 지향 뷰를 만들 수 있으며 문자열을 반복하거나 데이터의 더 큰 부분 집합을 작업에 적용 할 수 있습니다.

또한 각 문장에 대한 추가 데이터를 저장하여 작업하려는 항목 세트를보다 세밀하게 제어 할 수 있습니다.

+0

sqlalchemy에 대해 들어 보지 못했지만 재미있어 보입니다. –

1

저는 shelve (bdb 백엔드 사용) 또는 Sqlite3을 사용한다고 말합니다.
SQLite3과 함께 간다. CREATE TABLE list(idx int primary key, value text);과 같은 테이블을 사용하면 충분하다.

관련 문제