java - Counting the frequency of words in a sorted list -
java - Counting the frequency of words in a sorted list -
public static void frequencyfinder() throws filenotfoundexception, ioexception { string foldername = ".../meta_oct/separate"; file folder = new file(foldername); file[] listoffiles = folder.listfiles(); string line; (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; } } }
the frequency of words in lastly column has calculated. problem while loop skips of lines , ends in nullpointerexceptions , not frequencies calculated until point either. have attached stack trace below, sample file.
en;government;disease;bristle @ en;government;disease;contract en;government;disease;detect in en;government;disease;detect in en;government;disease;immunize against en;government;disease;inherit 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 en;government;disease;treat en;government;disease;ward off stack trace:
government:disease:bristle @ :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 @ javaapplication6.frequencyfinder.frequencyfinder(frequencyfinder.java:53) @ javaapplication6.frequencyfinder.main(frequencyfinder.java:26) java result: 1
the next code has problems :
while ((line = in.readline()) != null) { // here read line lemma_match = line.split(";")[3]; frequency = 1; while((in.readline().split(";")[3]).equals(lemma_match)){ // here read // line frequency++; line = in.readline(); // here read line } since read new line in 3 places within code, don't increment frequency of these reads. example, in each iteration of inner loop reading 2 lines, increment frequency once. if prepare inner loop, still miss lines when inner while loop ends , outer while loop reads new line.
in addition, inner while loop give nullpointerexception, since don't check in.readline() != null before trying split it.
now lets see how can single loop :
string lemma_match = ""; while ((line = in.readline()) != null) { string new_lemma_match = line.split(";")[3]; if (!lemma_match.equals(new_lemma_match)) { // start count new lemma if (!lemma_match.equals("")) { system.out.println(target + ":" + source +":"+lemma_match + ":" + frequency); } lemma_match=new_lemma_match; frequency = 1; // initialize frequency new lemma } else { frequency++; // increment frequency current lemma } } java loops exception frequency
Comments
Post a Comment