약 135k 문서 (문서 당 여러 페이지)와 약 800k 단어의 어휘로 구성된 텍스트 말뭉치를 분석하고 있습니다. 어휘의 절반과 같은 것이 빈도가 1 또는 2 인 단어라는 것을 알았으므로 제거하고 싶습니다.
그래서 나는 다음과 같은 것을 실행하고 있습니다.
remove_indices = np.array(index_df[index_df['frequency'] <= 2]['index']).astype(int)
for file_name in tqdm(corpus):
content = corpus[file_name].astype(int)
content = [index for index in content if index not in remove_indices]
corpus[file_name] = np.array(content).astype(np.uint32)
어디 corpus
다음과 같은 :
{
'filename1.txt': np.array([43, 177718, 3817, ...., 28181]).astype(np.uint32),
'filename2.txt': ....
}
각 단어는 이전에 양의 정수 인덱스로 인코딩되었습니다.
문제는 각 반복마다 여러 번의 검사 content = [index for index in content if index not in remove_indices]
를 거쳐야하는 데 len(remove_indices) * len(content)
있습니다. 이것은 영원히 걸릴 것입니다 (tqdm은 나에게 100h +를 말하고 있습니다). 속도를 높이는 방법에 대한 팁이 있습니까?
내가 지금까지 시도한 것
remove_indices
말뭉치에서 제거 된 후 제거 할 수 있다는 사실을 활용 합니다. 아직도 영원하다 ...이 목록 이해 대신 https://numpy.org/devdocs/reference/generated/numpy.isin.htmlnumpy.isin()
방법을 사용할 수 있습니다 .
또는 set
기존 단어 / 인덱스를 만들 수 있습니다 . 그러면이 in
연산은 O (n) 대신 O (1)이됩니다 (여기서 n은 배열의 길이).
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다