아래 첫 번째 코드 스 니펫부터 시작하여 줄 목록을 검색하고 각 줄의 모든 키워드 (각 줄에서 식별 됨)를 소문자로 변환했습니다. 약 800 줄의 내 테스트 목록의 경우 키워드 목록이 100 개 이하인 경우 전체 줄 목록에 대한 키워드 대체가 1 초 미만입니다. 목록을 101 개 항목 이상으로 확장하면 처리 시간이 9 초 이상으로 늘어납니다.정규 표현식 실행 시간이 100 번째 패턴 이후에 급격하게 증가합니다.
두 번째 코드 단편 (키워드 목록의 모든 패턴이 컴파일되는 곳)을 사용하면 총 처리 시간이 1 초 미만으로 줄어 듭니다.
컴파일되지 않은 대체 검색의 처리 시간이 입력 행마다 검색된 항목의 수에 너무 민감한 이유를 알고있는 사람이 있습니까? 나는 그것이 100 개의 키워드 후에 너무 예리하게 뛰는 것이 놀랍다.
조각 # 1
for line in lines_in:
for keyword in keywords:
rawstring = r'\b' + keyword + r'\b'
line = re.sub(rawstring, keyword, line, 0, re.IGNORECASE)
조각 번호가 re.compile 2
for i in range(len(keywords)):
re_pattern = re.compile(r'\b' + keywords[i] + r'\b', re.IGNORECASE)
pattern.append(re_pattern)
for line in lines_in:
for i in range(len(keywords)):
line = pattern[i].sub(keywords[i], line, 0)
이유를 지적 해 주셔서 감사합니다. 작동하도록 설계된 것처럼 항상 작동하는 것이 좋습니다. – smith7959