【发布时间】:2019-06-05 19:09:05
【问题描述】:
是否有任何算法可以有效地在大型文本语料库中找到 n 个最常见的 k-word 单词序列?
因此,例如,如果n = 1 和k = 5,而我的语料库是:
a b a b a c d e f a b a b a c c b c b a b c
输出将是a b a b a
【问题讨论】:
-
迭代每k个单词句子并在计数器上加1然后使用堆得到top n有什么问题?
-
感谢您提出这个建议——我假设您的意思是保留 k 词句子的哈希表,并在每次看到一个时递增一个计数器,遍历整个语料库一次。我可能会使用它,但对于大型语料库,在 RAM 中执行此操作会很困难(哈希表会变大)。如果您的意思是遍历每个 k-word 序列的语料库并始终保持固定大小的堆,这将解决内存问题,但现在时间复杂度将是 O(n^2),因为我们将进行迭代每个 k-word 句子遍历整个语料库一次,对吧?我或者我可能误解了。
-
正如@juvian 指出的,这可以在 O(N+k) 时间内完成,其中 N 是语料库中的单词数。见geeksforgeeks.org/…。