当前位置:  开发笔记 > 大数据 > 正文

跟踪/计数字频率

如何解决《跟踪/计数字频率》经验,为你挑选了1个好方法。

我想就一个好的设计达成一些社区共识,以便能够存储和查询字频数.我正在构建一个应用程序,我必须解析文本输入并存储一个单词出现的次数(随着时间的推移).所以给出以下输入:

"杀死一只嘲笑的鸟"

"嘲笑钢琴演奏家"

将存储以下值:

Word    Count
-------------
To      1
Kill    1
A       2
Mocking 2
Bird    1
Piano   1
Player  1

然后能够快速查询给定任意单词的计数值.

我目前的计划是简单地将单词和计数存储在数据库中,并依赖于缓存单词计数值......但我怀疑我不会获得足够的缓存命中率以使其成为长期可行的解决方案.

任何人都可以建议算法,数据结构或任何其他可能使其成为一个性能良好的解决方案的想法吗?



1> Jørn Schou-R..:

字数统计是MapReduce程序的典范示例(来自维基百科的伪代码):

void map(String name, String document):
  for each word w in document:
     EmitIntermediate(w, "1");

void reduce(String word, Iterator partialCounts):
  int result = 0;
  for each pc in partialCounts:
    result += ParseInt(pc);
  Emit(AsString(result));

并不是说这是这样做方法,但是如果你需要能够在单个机器上可用的内存超出特定单词的数量时能够很好地扩展的东西,这绝对是一个选择.只要您能够保持低于内存限制,更新哈希表的简单循环应该可以解决问题.

推荐阅读
手机用户2402851155
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有