2012-07-06 61 views
1

我想知道什么API或集合最适合用于使用扫描仪来搜索文档,计算单词出现的次数,并创建一个字母表列表中的这两个单词和每个单词a下一个词是多少次的子列表。Java排序收集/ api

这是一个类,所以请指出我正确的方向,因为我对Java和包完全陌生,但我不想要任何实际的编码技巧,谢谢。

+0

您是否正在创建马尔可夫链?看起来你正在描述的是频率表。 – 2012-07-06 18:09:26

+2

我建议使用'HashMap'来计算每个单词的出现次数。另一个'HashMap'来计算2-grams。 CodeEval创建了一些类似的挑战:http://codeeval.com/open_challenges/55/(你需要注册才能看到它) – alfasin 2012-07-06 18:10:28

+0

这是为了从某些输入文本中遇到的语法中创建新的随机句子/段落吗?我会去HashMap。 – 2012-07-06 18:12:33

回答

3

我想你可以用Map<String, Map<String, Integer>>做那样的事情。基本上你会得到一个单词,它与一个包含所有连续单词及其频率(即它们出现的次数)的映射关联。那么,你就必须是:

Map<String, Map<String, Integer>> frequencyTable = new HashMap<String, Map<String, Integer>>(); 

的分类,你可以创建一个保存一个单词,它的频率一类。然后,您可以将TreeSet与比较器一起使用(或在您的课堂上实施compareTo)以强制排序。那么你的地图应该是这样的:

Map<String, TreeSet<Frequency>> frequencyTable = new HashMap<String, TreeSet<Frequency>>(); 

假设Frequency是保存有关字符串,并将其出现次数信息类。这里唯一的困难是每次你需要更新频率时查找这个词,因为你必须遍历整个集合。

+1

这包含他正在查找的所有内容,但不容易公开一个单词的总使用次数。它可能是更多的Java/OO来做Map ,其中类包含总数,另一个是rmap。 – 2012-07-06 18:17:36

+0

@Colin你是对的。完全忘记了分拣部分。我会尝试编辑。我现在正在打电话。 – 2012-07-06 18:19:34

1

看看它的有关排序........

下面是几个选项...

  1. 使用Collections.sort(T T)随着可比接口,如果你想排序只有 单程。

  2. 使用Collection.sort(T T,比较器C)Comparator接口到一个以上的方式进行排序沿。

  3. 如果唯一性非常重要,你也可以使用TreeSet中有比较