2012-03-05 1 views
3

알파벳순으로 정렬 된이 엄청난 색인이 있는데 특정 용어에 대한 줄을 알아야합니다. 줄 단위로 파일을 읽고 올바른 용어를 얻었는지 확인하는 것이 효율적이지 않은 것입니다. 따라서 인덱스의 크기 (우리는 영어 위키 백과 코퍼스를 인덱싱했습니다).자바 : 알파벳순 정렬 된 텍스트 파일에서 단어를 찾는 가장 좋은 방법

그 때문에 이진 검색을 할 방법을 찾고 있습니다. LineNumberReader를 사용하여 효율적으로 줄 수를 얻지 만 파일에서 n 번째 줄을 가져 오는 효율적인 솔루션이없는 것 같습니다.

내가 n 번째 줄에있을 때까지 줄을 읽는 지, 올바른 용어인지 확인하고 이진 검색 알고리즘에 따라 조치를 취하는 지 궁금합니다 (이미 건너 뛴 줄이 필요하기 때문에 줄을 다시 읽는 것 같습니다).) 다음 라인을 기준으로 용어를 확인하는 것이 더 효율적입니까?

다른 제안 사항도 환영합니다!

검색 할 용어 집합에 따라 일련의 줄을 가져와야합니다.

+0

['LineNumberReader'] (http://docs.oracle.com/javase/7/docs/api/java/io/LineNumberReader.html)는 파일을 효율적으로 색인화하거나 윤곽. 선형 적으로 파일을 읽을 때 단순히 현재 행 번호를보고합니다. –

+0

자, 알려 줘서 고마워. – ljtijhuis

답변

1

파일을 한 줄씩 읽는 것은 비효율적입니다. 예, 특히 사용중인 코퍼스의 크기에 비례합니다. 플랫 파일이 아닌 다른 것으로 색인을 생성하는 것을 고려 했습니까? 쿼리 할 수있는 데이터베이스와 비슷합니까? Lucene과 같은 도구를 사용하여 데이터를 색인하고 검색 할 수 있습니까?

5

데이터베이스를 사용해야하는 것처럼 들리 - 대용량 데이터 세트의 색인 된 쿼리와 관련된 수년간의 신중한 엔지니어링의 이점을 누릴 수 있습니다. 사용자가 직접 롤업하는 경우에 가까이 오지는 않을 것입니다.

당신은 정말이 스스로하고 싶어 경우 두 개의 인덱스를 작성해야합니다 것입니다 : 단어의

  • 인덱스 -> 신속 세트를 계산할 수 있도록 용어를 포함하는 행 번호 (들) 다음 데이터 세트가 정말 큰 경우> 파일의 위치를 ​​신속,

또한 랜덤 액세스를 통해 올바른 행을 검색 할 수 있도록이 두 가지 - 특정 검색어

  • 행 번호의 인덱스를 포함하는 줄 번호 색인 coul d 자체는 메모리보다 클 수 있습니다. 따라서 B-Tree과 같은 디스크 기반 색인을 구현해야합니다. 어느 시점에서 RDBMS 휠의 대부분을 재발 명하고 처음에는 적절한 데이터베이스를 사용하지 않아도 될 것입니다.

    시도해보십시오. PostgreSQL - 오픈 소스이고, 성숙하고 잘 유지되며 꽤 괜찮은 텍스트 검색 기능이 있습니다.

  • +0

    의견을 보내 주셔서 감사합니다. – ljtijhuis