0

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

为简单起见,假设搭配是一个包含两个单词的表达式。例如“美少女”、“黑暗乘客”。

4

1 回答 1

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

当然,您需要确保您有足够的内存来使用此方法,因为它最终会生成许多数据副本。

于 2012-12-24T14:57:57.560 回答