簡體   English   中英

高效的算法來查找單詞頻率,最大單詞頻率和總單詞數

[英]Efficient algorithm to find frequency of words, max word frequency and total word count

我正在嘗試查找文件某個部分中每個單詞的出現頻率以及該部分的總單詞數。 例如,如果有一個文件:file.txt:

這是文件的一部分,是文件的一部分。
#這是另一個文件部分,它是同一文件的一部分,用哈希分隔。

我希望找到每個單詞的出現頻率,該單詞在每個部分中以有效的方式具有最大的出現頻率和總單詞數。 這樣:

在第1節:This-1; 是-2; A-1; 文件-2; 部-1; 其中-1; 第1部分; 的-1; 在-1 | 總字數:11 | 具有最高頻率的詞:is,文件
在第2節:This-1; 是-2; 另一個-1; 文件-2; 部-1; 其中-1; 第1部分; 的-1; 所述-1; 相同-1; 通過-1; 散列-1; | 總詞數:15 | 具有最高頻率的詞:is,file

到目前為止,我想出了一個循環,遍歷每個單詞,增加總單詞計數,然后將每個單詞放入具有每個單詞出現頻率的鍵/值對中。 我不知道最大頻率。 我可以嘗試使用任何有效的算法嗎?

我希望在Java中這樣做。 因此,我當時在考慮使用HashMaps,但歡迎使用任何更好的方法。

謝謝 :)

您可以在更新每個單詞時輕松跟蹤當前的最大值。 例如,每個部分的循環:

Initialize HashMap of Words
maxWord = null  // word with current max count
while not end of section
    get word
    if word in Words
        increment count of word in HashMap
    else
        add to Words with count of 1
    if maxWord == null || Words[word].Count > Words[maxWord].Count
        maxWord = word
end while

完成該節的處理后,您便擁有所有單詞的頻率,並且maxWord包含計數最大的單詞。

整個算法為O(n)。 您可以一次通過文件。

但是,只構建單詞的HashMap更為簡單,然后在每一節的末尾依次進行選擇,以選擇具有最大計數的單詞。 這也被認為是O(n)。

暫無
暫無

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

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