1

我是一名初学者程序员,我正在尝试做一个程序来打开一个里面有大文本的文本文件,然后计算它包含多少个单词。然后它应该写出文本中有多少个不同的单词,并写出每个单词在文本中的频率。我打算使用一个数组字符串来存储所有唯一的单词,并使用一个整数字符串来存储频率。

该程序计算单词,但我有点不确定如何正确编写代码以获取单词列表以及它们在文本中重复的频率。

我写了这个:

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

好的,这是您需要做的:
1. 使用 aBufferedReader从文件中逐行读取文本。
2.创建一个HashMap<String,Integer>存储词、频关系。
3.当你阅读每一行文本时,使用split()来获取4个数组中的文本行中的String[]
所有单词。遍历每个单词。对于每个单词,从HashTable. 如果你得到一个空值,你第一次找到了这个词。因此,创建一个Integer值为 1的新值HashMap
并将其放回 5. 这样做直到你没有达到 EOF。 HashMap

完毕 !

于 2013-10-06T18:20:04.883 回答
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));
}

最后,您将拥有一个包含文件包含的所有单词的地图和一个表示该单词在文本中出现多少次的整数。

于 2013-10-06T18:25:53.503 回答
0

你基本上在这里需要一个哈希。在 java 中,您可以使用 aHashMap<String, Integer>来存储单词及其频率。

所以当你读入一个新单词时,在 hashMap 中检查它,比如说 h,如果它存在,增加频率或添加一个频率 = 1 的新单词。

于 2013-10-06T18:17:16.150 回答
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 回答