Получение частот ngram для большого набора данных

Я хотел бы сгенерировать частоты ngram для большого набора данных. Википедия, а точнее, WEX от Freebase подходит для моих целей.

Какой самый лучший и экономичный способ сделать это на следующий день или около того?

Мои мысли:

  • PostgreSQL использует регулярное выражение для разделения предложений и слов. У меня уже есть дамп WEX в PostgreSQL, и у меня уже есть регулярное выражение для разделения (большая точность здесь не требуется)
  • MapReduce с Hadoop
  • MapReduce с Amazon Elastic MapReduce, о котором я почти ничего не знаю

Мой опыт работы с Hadoop состоит в очень неэффективном вычислении Pi на трех инстансах EC2. Я хорошо разбираюсь в Java и понимаю концепцию Map + Reduce. Боюсь, PostgreSQL займет очень много времени, так как его нелегко распараллелить.

Любые другие способы сделать это? Что мне лучше всего сделать, чтобы сделать это в ближайшие пару дней?


person Max    schedule 06.12.2012    source источник


Ответы (2)


Mapreduce будет работать нормально, и, вероятно, вы могли бы выполнять большую часть перетасовки ввода-вывода с помощью pig.

Видеть

http://arxiv.org/abs/1207.4371

для некоторых алгоритмов.

Конечно, чтобы убедиться, что у вас есть быстрый старт, вам на самом деле не нужно использовать mapreduce для этой задачи; просто разделите входные данные самостоятельно, сделайте простейшую быструю программу для вычисления ngrams одного входного файла и агрегируйте частоты ngram позже.

person tjltjl    schedule 06.12.2012

Hadoop дает вам две хорошие вещи, которые, на мой взгляд, являются главными: запуск задачи parralell (карта только заданий) и распределенная сортировка (перетасовка между картой и уменьшением). испускать нграммы и перетасовывать - подсчитывать количество каждого нграмм.
Так что я думаю, что Hadoop здесь идеальное решение.

person David Gruzman    schedule 06.12.2012