任何人都可以帮助在K文件集中找到最受欢迎的N个搭配。 我已经实现了基本的Map Reduce来寻找最流行的单词(单词计数器)。但是我该如何处理搭配呢?任何片段都将受到赞赏(Erlang,Python,Java,C ++)。
为简单起见,假设搭配是一个带有两个单词的表达式。例如“漂亮女孩”,“黑暗乘客”。
答案 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].
当然,你需要确保你有足够的内存用于这个方法,因为它最终会生成许多数据副本。