有一个9M多行的语料库,文件大小4G。现在需要匹配指定动词,符合句子条件的输出。
但是文件过大。每次读取一行。匹配下来要好久。请问有没有什么方法可以加快处理速度。
BufferedReader cpreader = new BufferedReader(new InputStreamReader(new FileInputStream(this.getCorpusPath())));
tring line = cpreader.readLine();
while(line != null)
{
ArrayList<String> verbList = new ArrayList();
matcher_line = Pattern.compile("(.*\\%\\&\\$cook\\%\\&\\$VB.*)").matcher(line);
if(matcher_line.find())
{
System.out.println(line);
}
line = cpreader.readLine();
}
파일을 읽는 데에는 문제가 없지만, 줄 크기가 불확실할 수 있어 효율성에 영향을 미칠 수 있으므로 버퍼링 읽기로 변경해 볼 수 있습니다. .
단일 단어로 일치하는 경우에는 더 나은 일치 방법을 사용할 수 있습니다.
프로그램이 라인 단위로 처리됩니다. 멀티 스레드 처리를 사용하면 처리 후 다음 라인을 처리하는 것이 가장 좋습니다. 캐시를 사용하여 여러 줄을 읽은 다음 처리를 위해 여러 스레드에 할당하여 CPU를 최대화할 수 있습니다.
니오+멀티스레딩
으아악
이것은 루프 내부에 있고 정규식은 매번 컴파일해야 하므로 매우 느립니다. 잠시 동안 외부에 두고 살펴보세요