最受欢迎的搭配



谁能帮我找出K个文件中最流行的N种搭配?我已经实现了基本的Map Reduce来查找最流行的单词(单词计数器)。但是我该如何处理搭配呢?任何片段都将被欣赏(Erlang, Python, Java, c++)。

为简单起见,假设搭配是包含两个单词的表达式。例如"美丽的女孩","黑暗的乘客"。

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

所以,我们有由句子组成的文本,每个句子由单词组成。如果搭配是一个句子中两个连续的单词,那么代码可能是这样的:

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].

当然,你需要确保你有足够的内存用于这个方法,因为它最终会复制很多数据。

相关内容

  • 没有找到相关文章

最新更新