2011-03-10 49 views
4

我有一個目錄,其中有1000個txt.files。我想知道每個單詞在1000文檔中出現的次數。所以,即使在X中出現100次「奶牛」這個詞,它仍然會被視爲一個。如果它發生在不同的文檔中,則會增加1。因此,如果每個文檔中出現「cow」,最大值爲1000。如何在不使用任何其他外部庫的情況下輕鬆完成此操作。這裏是我到目前爲止文檔中的字數頻率

 private Hashtable<String, Integer> getAllWordCount() 
    private Hashtable<String, Integer> getAllWordCount() 
    { 
     Hashtable<String, Integer> result = new Hashtable<String, Integer>(); 
     HashSet<String> words = new HashSet<String>(); 
     try { 
      for (int j = 0; j < fileDirectory.length; j++){ 
       File theDirectory = new File(fileDirectory[j]); 
       File[] children = theDirectory.listFiles(); 

       for (int i = 0; i < children.length; i++){ 
        Scanner scanner = new Scanner(new FileReader(children[i])); 

        while (scanner.hasNext()){ 
String text = scanner.next().replaceAll("[^A-Za-z0-9]", ""); 
         if (words.contains(text) == false){ 
          if (result.get(text) == null) 
           result.put(text, 1); 
          else 
           result.put(text, result.get(text) + 1); 
          words.add(text); 
         } 
        } 
       } 
       words.clear(); 
      } 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
     System.out.println(result.size()); 
     return result; 
    } 

回答

2

您還需要在其中存儲每個獨特字你從當前文件中讀取一個HashSet<String>

然後,在讀完每個單詞後,您應該檢查它是否在集合中,如果不是,則遞增result映射中的相應值(或者添加一個新條目(如果它是空的,就像您已經這樣做了))和將單詞添加到集合中。

不要忘了在開始閱讀新文件時重置該設置。

+0

好吧,這樣兩次迭代是必要的?沒有辦法做到一槍?有沒有辦法直接讀取整個txt文件作爲字符串,所以我不必逐行閱讀 – aherlambang 2011-03-10 00:30:13

+0

ÁEquinoX不,只需要一次迭代,但您檢查/更新每個單詞的兩個集合。 – biziclop 2011-03-10 00:37:33

+0

我認爲你誤解了我的問題......我不想在開始一個新文件時重置整個集合,因爲之前的集合中的前幾個字詞可能出現在下一個文件 – aherlambang 2011-03-10 00:38:12

0

這個怎麼樣?

private Hashtable<String, Integer> getAllWordCount() 
{ 
    Hashtable<String, Integer> result = new Hashtable<String, Integer>(); 
    HashSet<String> words = new HashSet<String>(); 
    try { 
     for (int j = 0; j < fileDirectory.length; j++){ 
      File theDirectory = new File(fileDirectory[j]); 
      File[] children = theDirectory.listFiles(); 
      for (int i = 0; i < children.length; i++){ 
       Scanner scanner = new Scanner(new FileReader(children[i])); 
       while (scanner.hasNext()){ 
        String text = scanner.next().replaceAll("[^A-Za-z0-9]", ""); 
        words.add(text); 
       } 
       for (String word : words) { 
        Integer count = result.get(word) 
        if (result.get(word) == null) { 
        result.put(word, 1); 
        } else { 
        result.put(word, result.get(word) + 1); 
        } 
       } 
       words.clear(); 
      } 
     } 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
    System.out.println(result.size()); 
    return result; 
}