1

我想为大型数据集生成 ngram 频率。维基百科,或者更具体地说,Freebase 的 WEX 适合我的目的。

在接下来的一天左右,最好和最具成本效益的方法是什么?

我的想法是:

  • PostgreSQL 使用正则表达式来拆分句子和单词。我已经在 PostgreSQL 中有 WEX 转储,并且我已经有正则表达式来进行拆分(此处不需要主要准确性)
  • MapReduce 与 Hadoop
  • MapReduce 与 Amazon 的 Elastic MapReduce,我对此几乎一无所知

我使用 Hadoop 的经验包括在三个 EC2 实例上计算 Pi 的效率非常低。我精通Java,并且了解Map + Reduce 的概念。我担心 PostgreSQL 会花费很长时间,因为它不容易并行化。

还有其他方法吗?在接下来的几天里,我最好的选择是什么?

4

2 回答 2

2

Mapreduce 可以正常工作,并且可能您可以通过 pig 完成大部分输入-输出混洗。

http://arxiv.org/abs/1207.4371

对于一些算法。

当然,为了确保你得到一个运行的开始,你实际上不需要使用 mapreduce 来完成这个任务。只需自己拆分输入,制作最简单的快速程序来计算单个输入文件的 ngram,然后聚合 ngram 频率。

于 2012-12-06T15:46:18.273 回答
2

Hadoop 为您提供了两个好东西,在我看来是主要的:并行任务运行(仅映射作业)和分布式排序(在 map 和 reduce 之间进行洗牌)
对于 NGram,看起来您需要两者 - 并行任务(映射器)来发出 ngram和改组 - 计算每个 ngram 的数量。
所以我认为这里的 Hadoop 是理想的解决方案。

于 2012-12-06T18:30:32.717 回答