簡體   English   中英

使用 Python 在數百萬個文檔中找到最常見的句子/短語

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

我有大約 500 萬份文件。 一份文件由許多句子組成,可能大約有 1 到 5 頁長。 每個文檔都是一個文本文件。

我必須在所有文檔中找到最常見的句子/短語(至少 5 個單詞長)。 我應該如何實現這一目標?

對於恰好 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 = 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 克的計數已經低於較短 n 克的相關前 N 計數時,您將停止尋找更長的 n 克。 (也就是說,當任何更長的 n-gram 被確保比您感興趣的前 N ​​個出現頻率更低時。)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM