1

私は初心者のプログラマーで、内部に大きなテキストを含むテキスト ファイルを開いて、そこに含まれる単語数をカウントする 1 つのプログラムを実行しようとしています。次に、テキスト内に異なる単語がいくつあるかを書き、テキスト内の各単語の頻度を書きます。1 つの配列文字列を使用してすべての一意の単語を格納し、1 つの int-string を使用して頻度を格納するつもりでした。

プログラムは単語を数えますが、単語のリストとテキスト内で繰り返される頻度を取得するためにコードを正しく書く方法については少しわかりません。

私はこれを書きました:

import easyIO.*;
import java.util.*;

class Oblig3A{
    public static void main(String[] args){
        int cont = 0;
        In read = new In (alice.txt);
        In read2 = new In (alice.txt);

        while(read.endOfFile() == false)
        {
            String info = read.inWord();
            System.out.println(info);
            cont = cont + 1;
        }

        System.out.println(UniqueWords);

        final int AN_WORDS = cont;

        String[] words = new String[AN_WORDS];
        int[] frequency = new int[AN_WORDS];

        int i = 0;
        while(les2.endOfFile() == false){
           word[i] = read2.inWord();
           i = i + 1;
        }
    }
}
4

4 に答える 4

1

あなたが使用することができます

Map<String, Integer> map = HashMap<String, Integer>();

そして、値がすでにそこにあるかどうかを尋ねる単語をマップに追加します。そうでない場合は、カウンターを 1 に初期化してマップに追加します。

if(!map.containsKey(word))
{
    map.put(word, new Integer("1"));
}
else
{
    map.put(word, map.get(word) + new Integer(1));
}

最終的に、ファイルに含まれるすべての単語と、その単語がテキストに出現する回数を表す Integer を含むマップが作成されます。

于 2013-10-06T18:25:53.503 に答える
1


1. aBufferedReaderを使用して、ファイルからテキスト行を 1 つずつ読み取ります。
2.HashMap<String,Integer>単語、頻度関係を格納する a を作成します。
3. テキストの各行を読むとき、 を使用split()して、テキスト行のすべての単語を 4 の配列で取得しますString[]
。各単語を反復処理します。単語ごとに、 から値を取得しますHashTable。null 値を取得した場合は、その単語を初めて見つけたことになります。Integerしたがって、値 1 で新しいを作成し、それを に戻しHashMap
ます。null 以外の値を取得した場合は、値を増やして に戻しますHashMap
5. EOF に到達しなくなるまでこれを行います。

終わり !

于 2013-10-06T18:20:04.883 に答える
0

Guava Multisetの使用を検討したいライブラリを使用できる場合は、カウント機能が既に組み込まれています。

    public void count() throws IOException {
        Multiset<String> countSet = HashMultiset.create();
        BufferedReader bufferedReader = new BufferedReader(new FileReader("alice.txt"));
        String line;
        while ((line = bufferedReader.readLine()) != null) {
            List<String> words = Arrays.asList(line.split("\\W+"));
            countSet.addAll(words);
        }
        bufferedReader.close();
        for (Entry<String> entry : countSet.entrySet()) {
          System.out.println("word: " + entry.getElement() + " count: " + entry.getCount());
        }
    }
于 2013-10-06T18:57:31.680 に答える
0

ここでは基本的にハッシュが必要です。Java では、HashMap<String, Integer>単語とその頻度を格納する を使用できます。

したがって、新しい単語を読み込むときは、hashMap で確認し、h とします。存在する場合は、頻度を増やすか、頻度 = 1 の新しい単語を追加します。

于 2013-10-06T18:17:16.150 に答える