2011-03-10 15 views
4

私に1000個のtxt.filesがあるディレクトリがあります。私は、1000語の文書に何回出現したかを各単語ごとに知りたい。だから、「牛」という言葉さえもXで100回も起こったと言いますが、それはまだ1と数えられます。別のドキュメントで発生した場合は、1だけインクリメントされます。したがって、すべての単一文書に「牛」が表示される場合、最大値は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

大丈夫ですので2回の反復が必要ですか?ワンショットでそれをする方法はありませんか?文字列として直接txtファイル全体を読む方法がありますので、行ごとに読む必要はありません。 – aherlambang

+0

ÁEquinoXいいえ、繰り返しは1回だけですが、すべての単語に対して2つのコレクションをチェック/更新してください。 – biziclop

+0

あなたは私の質問を誤解していると思う...私は新しいファイルを開始するときにセット全体をリセットしたくない...前のセットの前の単語が次のファイルに現れるかもしれないので、 – aherlambang

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; 
} 
関連する問題