【发布时间】:2016-01-04 11:46:41
【问题描述】:
我正在尝试查找每个单词在文件的某个部分中出现的频率以及该部分的总字数。 例如如果有一个文件:file.txt:
这是一个文件部分,它是文件的一部分。
# 这是另一个文件部分,它是由哈希分隔的同一文件的一部分。
我希望以有效的方式找到每个单词的频率,哪个单词在每个部分中具有最大频率和总字数。这样:
在第 1 节中:This-1;是-2;一个-1;文件-2;第 1 节;其中-1;第1部分;的-1; -1|总字数:11|频率最高的词:is,file
在第 2 节:This-1;是-2;另一个-1;文件-2;第 1 节;其中-1;第1部分;的-1; -1;相同-1;通过-1;哈希-1;|总字数:15|频率最高的词:is,file
到目前为止,我已经提出了一个循环,它遍历每个单词,增加总字数,然后将每个单词放入具有每个单词频率的键/值对中。我不知道最大频率。有没有我可以尝试使用的有效算法?
我希望在 Java 中这样做。所以,我正在考虑使用 HashMaps,但欢迎任何更好的方法。
谢谢:)
【问题讨论】:
-
听起来像是应用 MapReduce 的完美场景:hadoop.apache.org/docs/r1.2.1/mapred_tutorial.html;对于频率,您可以简单地使用
wordCountOfWorkxyz / totalWords。 -
这看起来不错。有没有一种方法可以在 MapReduce 中找到具有最大频率的键?总字数,我想我可以使用普通的迭代变量找到。
-
你不必为这个任务使用 MapReduce,我只是建议它,因为这是一个常见的场景,有时人们喜欢学习新事物。只要文件不是很大,您就可以简单地坚持您的算法。有趣的是,如果在整个部分上计算最大频率,它甚至都无关紧要。出现次数最多的词也将出现最高频率。
-
您看过 SO 上已经提供的解决方案了吗? stackoverflow.com/search?q=[java]+frequency+words 如果是这样。
-
@tbrown 哦,当然。我的文件不是很大。我一直在寻找可能需要 O(n) 时间来完成所有事情的东西,包括标记化、具有频率的哈希图、总字数以及 划分为部分。
标签: java algorithm sorting search