首頁 > 後端開發 > Python教學 > 如何使用Python查找文本文件的ZIPF分佈

如何使用Python查找文本文件的ZIPF分佈

Jennifer Aniston
發布: 2025-03-05 09:58:11
原創
922 人瀏覽過

How to Use Python to Find the Zipf Distribution of a Text File

本教程演示如何使用Python處理Zipf定律這一統計概念,並展示Python在處理該定律時讀取和排序大型文本文件的效率。

您可能想知道Zipf分佈這個術語是什麼意思。要理解這個術語,我們首先需要定義Zipf定律。別擔心,我會盡量簡化說明。

Zipf定律

Zipf定律簡單來說就是:在一個大型自然語言語料庫中,最頻繁出現的詞的出現頻率大約是第二頻繁詞的兩倍,是第三頻繁詞的三倍,是第四頻繁詞的四倍,以此類推。

讓我們來看一個例子。如果您查看美國英語的Brown語料庫,您會注意到最頻繁出現的詞是“the”(出現69,971次)。第二頻繁出現的詞“of”出現了36,411次。

“the”約佔Brown語料庫詞彙的7%(100萬多個詞中的69,971個)。而“of”約佔語料庫的3.6%(大約是“the”的一半)。因此,我們可以看到Zipf定律適用於這種情況。

因此,Zipf定律試圖告訴我們,少量項目通常佔據我們觀察到的活動的大部分。例如,少數疾病(癌症、心血管疾病)佔死亡人數的大部分。這也適用於在文學作品中佔據大部分詞頻的詞語,以及我們生活中許多其他的例子。

數據準備

在繼續之前,讓我向您介紹我們將在此教程中使用的實驗數據。我們的數據來自Project Gutenberg網站上提供的《德古拉》文本版。

程序構建

在下載上一節中的數據後,讓我們開始構建Python腳本,它將查找dracula.txt中數據的Zipf分佈。

第一步是使用read()函數讀取文件。

由於我們將查找模式(即單詞),因此正則表達式派上用場。我們將使用Python的b[A-Za-z][a-z]{2,9}b來去除任何不是傳統意義上單詞的詞語。例如,它不會匹配robotics_89、40_pie_40和BIGmango。 “BIGmango”不匹配是因為它開頭包含多個大寫字母。

這個正則表達式基本上告訴我們查找所有以字母(大寫或小寫)開頭,後跟至少2個字符且不超過9個字符的字母序列的單詞。換句話說,輸出中包含的單詞大小範圍為3到10個字符。

在Python中,這可以表示為:

words = re.findall(r'(\b[A-Za-z][a-z]{2,9}\b)', file_to_string)
登入後複製
登入後複製

現在,我們可以運行一個循環來計算每個單詞出現的頻率:

for word in words:
    count = frequency.get(word,0)
    frequency[word] = count + 1
登入後複製
登入後複製

在這裡,如果單詞尚未在單詞列表中找到,我們使用enumerate()函數遍歷值,以便我們還可以跟踪不同單詞的索引位置,而不是引發for循環錯誤。

然後將最頻繁單詞的頻率除以其他單詞的頻率來計算它們的比率。這使我們能夠查看Zipf定律的遵循程度。

整合所有內容

在了解了程序的不同構建塊之後,讓我們看看它們是如何組合在一起的:

words = re.findall(r'(\b[A-Za-z][a-z]{2,9}\b)', file_to_string)
登入後複製
登入後複製

這裡我將顯示程序返回的前十個單詞及其頻率:

for word in words:
    count = frequency.get(word,0)
    frequency[word] = count + 1
登入後複製
登入後複製

從這個Zipf分佈中,我們可以驗證Zipf定律,即一些詞(高頻詞)代表大部分詞,例如“the”、“and”、“that”、“was”和“for”。

結論

在本教程中,我們看到了Python如何簡化對Zipf定律等統計概念的處理。特別是當處理大型文本文件時,Python非常方便,如果我們手動查找Zipf分佈,則需要大量時間和精力。正如我們所看到的,我們能夠快速加載、解析並找到大小為28 MB的文件的Zipf分佈。並且由於Python的字典,排序輸出也很簡單。

此文章已更新,並包含Monty Shokeen的貢獻。 Monty是一位全棧開發人員,他還喜歡編寫教程和學習新的JavaScript庫。

以上是如何使用Python查找文本文件的ZIPF分佈的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板