2012-07-06 65 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中有比較