【问题标题】:Find the most common sentences/phrases among millions of documents using Python [closed]使用 Python 在数百万个文档中查找最常见的句子/短语 [关闭]
【发布时间】:2021-12-11 14:57:49
【问题描述】:

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

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

【问题讨论】:

标签: python pandas scikit-learn nlp gensim


【解决方案1】:

对于 5 字长的短语,这是相对简单的 Python(可能需要大量内存)。对于可变长的短语,它有点复杂 - 并且可能需要进一步说明您想要找到哪些类型的更长的短语。

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-05-20
    • 2018-01-28
    • 1970-01-01
    • 1970-01-01
    • 2020-04-11
    • 2014-06-07
    • 2022-08-03
    • 2018-08-22
    相关资源
    最近更新 更多