使用 Python 在数百万文档中找到最常见的 sentences/phrases

Find the most common sentences/phrases among millions of documents using Python

我有大约 500 万份文件。一份文件由许多句子组成,可能有 1 到 5 页长。每个文档都是一个文本文件。

我必须在所有文档中找到最常见的句子/短语(至少 5 个单词长)。我该如何实现?

对于恰好 5 个单词长的短语,这相对简单 Python(可能需要大量内存)。对于更长的短语,它有点复杂 - 并且可能需要进一步说明您想要查找哪种更长的短语。

对于 5 个单词(又名“5-gram”)的情况:

一次遍历语料库,您生成 所有 5-grams,并计算它们的出现次数(比如 Counter),然后报告前 N 个.

例如,假设 docs 是所有标记化文本的 Python 序列,其中每个单独的项目都是一个字符串单词列表。那么大致是:

from collections import Counter

ngram_size = 5
tallies = Counter()

for doc in docs:
    for i in range(0, len(doc)-4):
        ngram = tuple(doc[i:i+5])
        tallies[ngram] += 1

# show the 10 most-common n-grams
print(tallies.most_common(10))

如果您随后还想考虑更长的短语,那就有点棘手了——但请注意,任何此类短语都必须以您已经找到的一些 5 克开头。

所以你可以考虑逐渐重复上述步骤,对于 6 克、7 克等

但是要针对 memory/effort 进行优化,您可以添加一个步骤来 忽略 所有尚未以前 N 个候选者之一开始的 n-gram您选择了较早的 运行。 (例如,在 6 克 运行 中,上面的 += 行将以 6 克开始为条件 - 从您已经认为感兴趣的少数 5 克之一开始.)

此外,当(例如)前 8-gram 的计数已经低于较短 n-gram 的相关前 N 计数时,您将停止寻找更长的 n-gram。 (也就是说,当任何更长的 n-grams 肯定比您感兴趣的前 N ​​个更频繁时。)