首页 > 解决方案 > 使用 Python 在数百万个文档中查找最常见的句子/短语

问题描述

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

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

标签: pythonpandasscikit-learnnlpgensim

解决方案


对于 5 字长的短语,这是相对简单的 Python(可能需要大量内存)。对于可变长的短语,它有点复杂 - 并且可能需要额外说明您想要找到什么样的更长的短语。

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

在一次遍历语料库中,您生成所有 5-grams,并计算它们的出现次数(比如进入 a 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-gram 开头。

因此,您可以考虑逐步重复上述内容,例如 6 克、7 克等。

但是为了优化内存/工作量,您可以添加一个步骤来忽略所有尚未以您从之前的运行中选择的前 N ​​个候选者之一开始的 n-gram。(例如,在 6-gram 运行中,+=上面的行将以 6-gram 开头为条件——从您已经认为感兴趣的少数 5-gram 之一开始。)

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


推荐阅读