2013-07-08 1 views
3

줄 당 150 만 줄 및 50-100 줄의 텍스트 파일을 고려하십시오.색인이 생성되지 않은 텍스트 파일에서 단어를 검색하는 가장 빠른 방법 - Python

os.popen('grep -w word infile')가 될 것으로 보인다 사용하여 단어를 포함하는 행을 찾으려면보다 빠른

for line in infile: 
    if word in line: 
    print line 

어떻게 다른 하나는 파이썬에서 TEXTFILE에서 단어를 검색 할 수 있을까? 그 큰 unindex 텍스트 파일을 검색하는 가장 빠른 방법은 무엇입니까?

+0

정규식을 사용하면 매우 빠르다고 생각합니다. 하지만 파일이 매우 크기 때문에 정규식 분석을 위해 RAM에로드 할 수 없습니다. 그러나 큰 덩어리로 파일을 읽고 각각의 덩어리를 하나씩 정규식으로 분석하는 것이 가능합니다. 이렇게하면 연구 된 문자열이 두 개의 청크 위에 겹쳐져 발견되지 않을 수 있습니다. 따라서 청크 분석은 특정 방식으로 수행되어야합니다. 나는 이미 같은 코드를 작성하고 stackoverflow.com에 게시했습니다. 그것을 찾아 보자. – eyquem

+1

코드가 문자열을 감지하도록 의도 된 다음 게시물 (http://stackoverflow.com/questions/16583591/read-a-very-big-single-line-txt-file-and-split-it)을 찾았습니다. ROW_DEL을 큰 파일에 저장하고 더 짧은 문자열로 대체하십시오. 당신의 문제는 패턴을 탐지하는 것일뿐입니다. 나는 당신이 내가 덩어리 (chunk) 후에 텍스트 덩어리를 분석하고 제한된 필요에 그것의 원리를 적용하는 방식을 조사하기 위해 인용 된 게시물을 살펴볼 수 있다고 생각한다. – eyquem

답변

2

몇 가지 빠른 검색 알고리즘이 있습니다 (wikipedia 참조). 그들은 단어를 어떤 구조로 컴파일해야합니다. Grep은 Aho-Corasick algorithm을 사용 중입니다.

내가

  1. word 시간이 소요 각 라인에 대한 컴파일 소스 파이썬의 in에 대한 코드 그러나 하나를 보지 못했다

    (나는 분명히는 등, 결과를 캐시, 컴파일 할 수 in 아무것도 컴파일 의심) 또는

  2. 검색이 비효율적입니다. 처음에 "worw"를 확인하고 "o"다음에 "r"을 확인하고 실패 할 때 "worword"에서 "word"를 검색하는 것을 고려하십시오. 그러나 "o"또는 "r"을 다시 검사 할 이유는 없습니다 당신은 똑똑. 예를 들어, Knuth–Morris–Pratt algorithm은 실패가 발생할 때 건너 뛸 수있는 문자 수를 알려주는 검색된 단어를 기반으로 테이블을 작성합니다.
관련 문제