2011-02-09 34 views
3

我有一個大小爲115MB的文本文件。它由大約2000萬字組成。我必須將該文件用作單詞集合,並使用它來搜索集合中每個用戶給定單詞的出現次數。我正在使用這個過程作爲我的項目中的一小部分。我需要一種方法來以更快更正確的方式找出給定單詞的出現次數,因爲我可以在迭代中使用它。我需要關於任何API的建議,我可以使用或以更快的方式執行任務的其他方式。任何建議表示讚賞。Java-從巨大的文本文件中計數單詞的發生率

+0

*嘆*,希望你說'awk' – 2011-02-09 07:16:00

回答

3

這種事情通常使用Lucene來實現,特別是如果您打算重複重新啓動應用程序或者您沒有足夠的內存。 Lucene也支持lots of other goodies

但是,如果你想「推出自己的」代碼,你有足夠的內存(可能是1GB),您的應用程序可以:

  • 解析該文件爲單詞的順序,
  • 過濾掉停止詞,
  • 建立一個「反向索引」作爲HashMap<String, List<Integer>>,其中String值是唯一字,而List<Integer>對象給出文件中出現字的偏移量。

可能需要幾秒(或幾分鐘)的時間才能處理一個很大的文件。但是,一旦創建了內存中的反向索引,您就可以快速進行搜索。 (也許亞微秒每搜索。)

+0

我想說,他甚至不需要地圖<字符串,列表>。他只需要存儲發生次數的Map 。 – AlexR 2011-02-09 10:16:47