我想知道什么API或集合最适合用于使用扫描仪来搜索文档,计算单词出现的次数,并创建一个字母表列表中的这两个单词和每个单词a下一个词是多少次的子列表。Java排序收集/ api
这是一个类,所以请指出我正确的方向,因为我对Java和包完全陌生,但我不想要任何实际的编码技巧,谢谢。
我想知道什么API或集合最适合用于使用扫描仪来搜索文档,计算单词出现的次数,并创建一个字母表列表中的这两个单词和每个单词a下一个词是多少次的子列表。Java排序收集/ api
这是一个类,所以请指出我正确的方向,因为我对Java和包完全陌生,但我不想要任何实际的编码技巧,谢谢。
我想你可以用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
是保存有关字符串,并将其出现次数信息类。这里唯一的困难是每次你需要更新频率时查找这个词,因为你必须遍历整个集合。
这包含他正在查找的所有内容,但不容易公开一个单词的总使用次数。它可能是更多的Java/OO来做Map
@Colin你是对的。完全忘记了分拣部分。我会尝试编辑。我现在正在打电话。 – 2012-07-06 18:19:34
看看它的有关排序........
下面是几个选项...
使用Collections.sort(T T)随着可比接口,如果你想排序只有 单程。
使用Collection.sort(T T,比较器C)与Comparator接口到一个以上的方式进行排序沿。
如果唯一性非常重要,你也可以使用TreeSet中有比较。
您是否正在创建马尔可夫链?看起来你正在描述的是频率表。 – 2012-07-06 18:09:26
我建议使用'HashMap'来计算每个单词的出现次数。另一个'HashMap'来计算2-grams。 CodeEval创建了一些类似的挑战:http://codeeval.com/open_challenges/55/(你需要注册才能看到它) – alfasin 2012-07-06 18:10:28
这是为了从某些输入文本中遇到的语法中创建新的随机句子/段落吗?我会去HashMap。 – 2012-07-06 18:12:33