Java에서 많은 양의 텍스트를 토큰 화하려고합니다. 제가 큰 말을 할 때, 나는 한 번에 모든 책의 장을 의미합니다. 책의 한 페이지를 사용하여 코드의 첫 번째 초안을 작성했고 모든 것이 잘 작동했습니다. 이제는 모든 장을 처리하려고하는데 일이 제대로되지 않습니다. 챕터의 일부를 올바르게 처리 한 다음 중지합니다. 다음은Java에서 실제로 많은 양의 텍스트를 처리해야합니까?
는 관련 코드 나는 내 텍스트가 될 것으로 기대 디렉토리에있는 모든 파일을 읽고 있어요 비록
File folder = new File(Constants.rawFilePath("eng"));
FileHelper fileHelper = new FileHelper();
BPage firstChapter = new BPage();
BPage firstChapterSpanish = new BPage();
File[] allFiles = folder.listFiles();
//read the files into memory
ArrayList<ArrayList<String>> allPages = new ArrayList<ArrayList<String>>();
//for the english
for(int i=0;i<allFiles.length;i++)
{
String filePath = Constants.rawFilePath("/eng/metamorph_eng_"+String.valueOf(i)+".txt");
ArrayList<String> pageToAdd = fileHelper.readFileToMemory(filePath);
allPages.add(pageToAdd);
}
String allPagesAsString = "";
for(int i=0;i<allPages.size();i++)
{
allPagesAsString = allPagesAsString+fileHelper.turnListToString(allPages.get(i));
}
firstChapter.setUnTokenizedPage(allPagesAsString);
firstChapter.tokenize(Languages.ENGLISH);
folder = new File(Constants.rawFilePath("spa"));
allFiles = folder.listFiles();
//for the spanish
for(int i=0;i<allFiles.length;i++)
{
String filePath = Constants.rawFilePath("/eng/metamorph_eng_"+String.valueOf(i)+".txt");
ArrayList<String> pageToAdd = fileHelper.readFileToMemory(filePath);
allPages.add(pageToAdd);
}
allPagesAsString = "";
for(int i=0;i<allPages.size();i++)
{
allPagesAsString = allPagesAsString+fileHelper.turnListToString(allPages.get(i));
}
firstChapterSpanish.setUnTokenizedPage(allPagesAsString);
firstChapterSpanish.tokenize(Languages.SPANISH);
fileHelper.writeFile(firstChapter.getTokenizedPage(), Constants.partiallyprocessedFilePath("eng_ch_1.txt"));
fileHelper.writeFile(firstChapterSpanish.getTokenizedPage(), Constants.partiallyprocessedFilePath("spa_ch_1.txt"));
}
의 모든 파일의 첫 번째 쿠데타가 추가되고있다 내가 처리하고있는 문자열. 그것은 잠시 후에 코드가 여전히 실행되지만 특정 시점까지만 문자열에 문자열을 추가하는 것처럼 보입니다.
모든 파일을 한꺼번에 처리 할 수 있도록 변경해야하는 항목은 무엇입니까? 당신이 더 큰 문자열을 복사하는 경우
"그냥 멈춤"을 정의하십시오. 오류 메시지가 나타 납니까? 그렇다면 메시지는 무엇입니까? (그렇지 않은 경우 코드에 버그가 있거나 실제로 중지되지 않았지만 성능을 크롤링에 끌어 들일 정도로 심하게 스와핑됩니다.) 문제를 진단하기 위해 지금까지 수행 한 작업은 무엇입니까? – keshlam
빈 catch 블록? 로깅 프레임 워크로 일부 로깅을 강력히 고려하십시오. –
코드의 어느 시점에서 "그냥 멈추는가"? 많은 문자열 결합 ('allPagesAsString')을하고있는 것처럼 보이므로, 그 문자열을 ['StringBuilder'] (http://docs.oracle.com/javase/7/docs/api/)로 대체하고 싶을 수도 있습니다. java/lang/StringBuilder.html). 훨씬 더 효율적입니다. [이 질문에 대한 답변] (http://stackoverflow.com/questions/4645020/when-to-use-stringbuilder-in-java)을보십시오. – andersschuller