2013-07-13 31 views
0

我正在使用美國國家語料庫獲取英語單詞的頻率。 文件結構如下(這是一個很大的文件,〜8 MB):Java在ANC中緩慢搜索(大文件)

Word1 Lemma1 Pos1 Frequency1 
Word2 Lemma2 Pos2 Frequency2 
Word3 Lemma3 Pos3 Frequency3 

,這裏是我的Java類,但它非常慢......我該怎麼改變它加快步伐? (我想找到與特定詞的頻率)

public static int frequency (String word) throws Exception { 

    int ft=0; 
    int fc=0; 
    int exit=0; 
    String frow; 
    String[] separated = new String[10]; 
    String fwordC = "..."; 
    String fwordP = "..."; 

    Scanner fscan = new Scanner(new File("./ANC-all-lemma.data")); 
    fscan.useDelimiter("\n"); 

    while(fscan.hasNext()){ 
     frow = fscan.next(); 
     separated = frow.split(" "); 

     separated[0]= separated[0].replaceAll("(\\r|\\n)", ""); 
     fwordC = separated[0]; //set current word 

     if (fwordC.equalsIgnoreCase(word)) { 
      System.out.println("Found!!!"); 
      return(separated[3]); 
     } 
    } 

} 

感謝一大堆!

+2

爲什麼不將該文件加載到配置單元表或豬關係並執行查詢? Apache Hive(http://hive.apache.org/) Apache Pig(http://pig.apache.org/) –

+0

對於[線程](http://www.codeproject.com/)你有什麼要求嗎?文章/ 616109/Java的線程教程)?你需要將你的大工作分成[小部分](http://www.codeproject.com/Articles/616115/Java-Thread-Example#ai),實際上爲每一行運行線程 – 2013-07-13 14:55:32

+0

8 MB是小文件這些日子甚至還有電話。你可以閱讀每一行,只分割以你想要的字符串開頭的那一行。如果將數據存儲在內存中並查找Map,速度會更快。查看地圖的時間不到一秒鐘。 –

回答

0

你一定要嘗試閱讀BufferedReader。掃描儀用於解析數據。 BufferedReader還具有大約8 KB的較大緩衝區。