最受欢迎的搭配

时间:2012-12-20 13:48:05

标签: java erlang mapreduce data-mining text-extraction

任何人都可以帮助在K文件集中找到最受欢迎的N个搭配。 我已经实现了基本的Map Reduce来寻找最流行的单词(单词计数器)。但是我该如何处理搭配呢?任何片段都将受到赞赏(Erlang,Python,Java,C ++)。

为简单起见,假设搭配是一个带有两个单词的表达式。例如“漂亮女孩”,“黑暗乘客”。

1 个答案:

答案 0 :(得分:0)

嗯,这个想法和单词计数一样,但你必须为每个地图操作存储前一个单词。或者,您可以使用单词对填充集合,并使用与简单单词相同的操作。

因此,我们的文本由句子组成,每个句子由单词组成。如果搭配是句子中的几个连续单词,则代码可能如下所示:

calc(Text) ->
   calc(undefined, [], Text, dict:new()).

calc(W1, [W2 | Sentence], Text, Dict) ->
   NewDict = dict:update_counter({W1, W2}, -1, Dict),
   calc(W2, Sentence, Text, NewDict);
calc(_, [], [[Word | Sentence] | Text], Dict) ->
   calc(Word, Sentence, Text, Dict);
calc(_, _, [], Dict) ->
   List = dict:to_list(Dict),
   Sorted = lists:keysort(2, List),
   {Result, _} = lists:split(50, Sorted),
   [{Key, -Value} || Value <- Result].

当然,你需要确保你有足够的内存用于这个方法,因为它最终会生成许多数据副本。