簡體   English   中英

使用java計算文本文件中重復單詞的數量

[英]count # of repeated words in a text file using java

如何從路徑中打開java中的文本文件,並使用標記器計算文件中重復的單詞數。

例如:想要使用路徑名打開文件,並且要讀取和計算文件中重復的單詞

badpanda是半右的:有很多關於如何從文件中讀取單詞的信息。 不要接受他使用ArrayLists的建議 - 你只需要一個Map實現(HashMap或TreeMap)。 每個鍵都是文件中的一個單詞,每個值都是該單詞的當前計數。

由於這是家庭作業,這里有一些提示:

  1. Scanner類可用作標記器
  2. Multiset (或Bag )可用於計算單詞

關於可以采取的方法的一些細節。

掃描器作為令牌生成器

Scanner類使用諸如InputStreamFile類的源,並且可以使用許多可用的next方法之一一次讀取一條數據。

如果我們想將Scanner用作標記器,我們可以告訴它應該分割文本以制作標記的方式。

有一個Scanner.useDelimiter(String)Scanner.useDelimiter(Pattern)方法,可以通過使用正則表達式告訴Scanner以某種方式拆分令牌。

正確配置Scanner ,可以通過調用next方法獲取令牌,直到我們用完文本文件中的文本為止。 (此循環的終止條件可以由Scanner.hasNext確定。)

使用Multiset (或Bag )計算單詞

稱為多集 (或 )的數據結構可用於跟蹤可能已發生的單詞(或標記)。

多重集是一個集合 ,但每個元素可以有多個元素。 在我所看到的實現中,通過調用某些方法可以使集合中的元素具有多重性。

例如,使用Google的Guava庫中提供的Multiset實現, Multiset.count(Object)方法將返回給定對象的多重性。

那么,這意味着什么?

我們可以使用Multiset來跟蹤由Scanner讀取的文本文件中出現的令牌計數。

通過將標記從Scanner放入Multiset ,我們可以得出在文本文件中遇到每個標記的次數的計數。

從那里,我們可以遍歷令牌,並找到計數超過2的令牌,這些令牌是在文本文件中重復的令牌。

另一種方法?

從問題的另一種解釋來看,這是另一種選擇:

...並計算文件中重復的單詞數量......

如果我們僅需要嚴格的“重復單詞計數”,那么就有另一種方法。

Set可以用於跟蹤文件中已經遇到的令牌。

在每個新令牌上,在我們嘗試add令牌addSet ,我們可以使用Set.contains(Object)方法檢查令牌是否已經存在。

如果單詞已經存在,那么我們可以增加一個計數器來跟蹤重復的標記。

如果這不是問題的意圖,那么應該指出,使用精確的措辭來傳達意圖很重要,因為閱讀該問題的人可以用許多不同的方式來解釋該問題! ;)

了解如何通過谷歌搜索路徑中的文件流(下面是我找到的第一個鏈接;如果它不好,還有更多......)。

http://www.homeandlearn.co.uk/java/read_a_textfile_in_java.html

然后,創建一個arraylists的arraylist。 為每個新單詞添加一個條目(即將0索引設置為單詞的新arraylist)到初始arraylist,並為每個重復單詞添加一個條目到相應的arraylist。 完成整個文本文檔后,根據需要遍歷arraylist。

忘記令牌生成器

只需使用String.split方法。 它將字符串拆分為String數組,並且無需使用tokenizer類。

使用掃描儀讀取文件中的各行。

使用哈希表來計算單個單詞,這假設單詞上的額外標點符號無關緊要。

掃描程序完成文件讀取后,顯示值大於1的每個鍵/值對。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM