public static void frequencyFinder() throws FileNotFoundException, IOException {
String foldername = ".../Meta_Oct/separate";
File folder = new File(foldername);
File[] listOfFiles = folder.listFiles();
String line;
for (int x = 0; x < listOfFiles.length; x++) {
BufferedReader in = new BufferedReader(new FileReader(listOfFiles[x]));
String filename = listOfFiles[x].getName();
String language = filename.split("@")[0];
String target = filename.split("@")[1];
String source = filename.split("@")[2];
int frequency = 0;
while ((line = in.readLine()) != null) {
lemma_match = line.split(";")[3];
frequency = 1;
while((in.readLine().split(";")[3]).equals(lemma_match)){
frequency++;
line = in.readLine();
}
System.out.println(target + ":" + source +":"+lemma_match + ":" + frequency);
frequency = 0;
lemma_match = null;
}
}
}
마지막 열의 단어 빈도를 계산해야합니다. 문제는 while 루프가 일부 줄을 건너 뛰고 NullPointerException
으로 끝나고 모든 주파수가 그 지점까지 계산되지 않는다는 것입니다. 샘플 파일뿐만 아니라 아래의 스택 추적을 첨부했습니다.정렬 된 목록의 단어 빈도 계산
EN;GOVERNMENT;DISEASE;bristle at
EN;GOVERNMENT;DISEASE;contract
EN;GOVERNMENT;DISEASE;detect in
EN;GOVERNMENT;DISEASE;detect in
EN;GOVERNMENT;DISEASE;immunize against
EN;GOVERNMENT;DISEASE;inherit from
EN;GOVERNMENT;DISEASE;spread
EN;GOVERNMENT;DISEASE;spread
EN;GOVERNMENT;DISEASE;spread
EN;GOVERNMENT;DISEASE;stave off
EN;GOVERNMENT;DISEASE;stave off
EN;GOVERNMENT;DISEASE;transmit
EN;GOVERNMENT;DISEASE;treat
EN;GOVERNMENT;DISEASE;treat
EN;GOVERNMENT;DISEASE;treat as
EN;GOVERNMENT;DISEASE;treat by
EN;GOVERNMENT;DISEASE;ward off
스택 추적 :이 코드 내 3 곳에서 새로운 라인을 읽기 때문에
while ((line = in.readLine()) != null) { // here you read a line
lemma_match = line.split(";")[3];
frequency = 1;
while((in.readLine().split(";")[3]).equals(lemma_match)){ // here you read
// another line
frequency++;
line = in.readLine(); // here you read another line
}
것은, 당신이 주파수를 증가하지 않습니다
GOVERNMENT:DISEASE:bristle at :1
GOVERNMENT:DISEASE:detect in :2
GOVERNMENT:DISEASE:spread :2
GOVERNMENT:DISEASE:stave off :1
Exception in thread "main" java.lang.NullPointerException
GOVERNMENT:DISEASE:treat :2
at javaapplication6.FrequencyFinder.frequencyFinder(FrequencyFinder.java:53)
at javaapplication6.FrequencyFinder.main(FrequencyFinder.java:26)
Java Result: 1
감사합니다. 그것은 완벽하게 작동합니다! – user3525357