使用Python實(shí)現(xiàn)一個(gè)簡(jiǎn)單實(shí)用的文本詞頻統(tǒng)計(jì)分析工具
前言
文本分析是自然語(yǔ)言處理(NLP)中的基礎(chǔ)任務(wù),而詞頻統(tǒng)計(jì)則是文本分析的入門(mén)級(jí)應(yīng)用。通過(guò)詞頻分析,我們可以快速了解文本的主題傾向、關(guān)鍵信息分布以及語(yǔ)言使用習(xí)慣。本文將帶你實(shí)現(xiàn)一個(gè)簡(jiǎn)單而實(shí)用的文本詞頻統(tǒng)計(jì)工具,非常適合Python初學(xué)者練手。
功能特點(diǎn)
支持任意.txt格式文本文件的詞頻分析
自動(dòng)處理文本編碼問(wèn)題
使用正則表達(dá)式精確提取英文單詞(包括帶連字符和撇號(hào)的單詞)
按頻率排序并計(jì)算每個(gè)單詞的出現(xiàn)比例
支持查看前N個(gè)高頻詞功能
代碼實(shí)現(xiàn)
import re from collections import defaultdict def word_frequency(file_path, top_n=None): """ 統(tǒng)計(jì)文本文件中的單詞頻率 :param file_path: 文本文件路徑 :param top_n: 顯示前N個(gè)高頻詞,默認(rèn)顯示全部 :return: 排序后的單詞頻率列表 """ # 讀取文件內(nèi)容 try: with open(file_path, 'r', encoding='utf-8') as file: text = file.read().lower() # 轉(zhuǎn)為小寫(xiě) except FileNotFoundError: print(f"錯(cuò)誤:文件 {file_path} 未找到") return [] except UnicodeDecodeError: print("錯(cuò)誤:文件編碼不支持,請(qǐng)嘗試使用其他編碼(如gbk)") return [] # 使用正則表達(dá)式提取單詞(包括帶連字符的單詞) words = re.findall(r"\b[a-zA-Z'-]+\b", text) # 統(tǒng)計(jì)詞頻 frequency = defaultdict(int) for word in words: frequency[word] += 1 # 按頻率排序 sorted_words = sorted(frequency.items(), key=lambda x: x[1], reverse=True) # 輸出結(jié)果 print(f"\n總共有 {len(words)} 個(gè)單詞,其中唯一單詞 {len(sorted_words)} 個(gè)") print("排名 | 單詞\t\t頻率\t占比") print("-" * 40) total_words = len(words) for rank, (word, count) in enumerate(sorted_words[:top_n], 1): percentage = (count / total_words) * 100 print(f"{rank:4} | {word:12} {count:6} \t{percentage:.2f}%") return sorted_words if __name__ == "__main__": # 使用示例 file_path = input("請(qǐng)輸入文本文件路徑:").strip() top_n = input("要顯示前多少個(gè)高頻詞(默認(rèn)全部):").strip() top_n = int(top_n) if top_n.isdigit() else None word_frequency(file_path, top_n)
代碼解析
導(dǎo)入必要模塊:
- re:提供正則表達(dá)式支持,用于精確提取單詞
- defaultdict:特殊字典類型,當(dāng)鍵不存在時(shí)提供默認(rèn)值,簡(jiǎn)化詞頻統(tǒng)計(jì)
核心函數(shù)設(shè)計(jì):
- 異常處理確保文件打開(kāi)的健壯性
- 使用正則表達(dá)式\b[a-zA-Z'-]+\b提取英文單詞(包括帶連字符和撇號(hào)的復(fù)雜形式)
- 采用defaultdict高效統(tǒng)計(jì)詞頻
- 使用Python內(nèi)置的sorted()函數(shù)按詞頻排序
用戶交互:
- 支持自定義文件路徑輸入
- 靈活設(shè)置顯示的高頻詞數(shù)量
運(yùn)行效果
將以下文本保存為txt文件,然后運(yùn)行程序,輸入文件路徑即可看到分析結(jié)果:
應(yīng)用場(chǎng)景
英文文學(xué)作品詞匯分析
論文關(guān)鍵詞提取
網(wǎng)絡(luò)文本主題挖掘
語(yǔ)言學(xué)習(xí)詞匯頻率研究
進(jìn)階改進(jìn)方向
增加中文分詞支持(可結(jié)合jieba等分詞庫(kù))
添加停用詞過(guò)濾功能
實(shí)現(xiàn)數(shù)據(jù)可視化展示(如詞云圖)
開(kāi)發(fā)GUI界面提升用戶體驗(yàn)
支持批量文件分析比較
到此這篇關(guān)于使用Python實(shí)現(xiàn)一個(gè)簡(jiǎn)單實(shí)用的文本詞頻統(tǒng)計(jì)分析工具的文章就介紹到這了,更多相關(guān)Python文本詞頻統(tǒng)計(jì)分析內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python保存dict字典類型數(shù)據(jù)到Mysql并自動(dòng)創(chuàng)建表與列
這篇文章主要介紹了Python保存dict字典類型數(shù)據(jù)到Mysql并自動(dòng)創(chuàng)建表與列,字典是另一種可變?nèi)萜髂P?,且可存?chǔ)任意類型對(duì)象,想了解更多內(nèi)容的小伙伴可以和小編一起進(jìn)入下面文章學(xué)習(xí)更多內(nèi)容,希望對(duì)你有所幫助2022-02-02python3的UnicodeDecodeError解決方法
這篇文章主要介紹了python3的UnicodeDecodeError解決方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-12-12Python開(kāi)發(fā).exe小工具的詳細(xì)步驟
這篇文章主要介紹了Python開(kāi)發(fā).exe小工具的詳細(xì)步驟,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-01-01利用Python實(shí)現(xiàn)朋友圈中的九宮格圖片效果
這篇文章主要給大家介紹了關(guān)于利用Python如何實(shí)現(xiàn)朋友圈中九宮格圖片效果的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-09-09python爬蟲(chóng)之urllib庫(kù)常用方法用法總結(jié)大全
urllib是python自帶的請(qǐng)求庫(kù),各種功能相比較之下也是比較完備的,下面這篇文章主要給大家介紹了關(guān)于python爬蟲(chóng)之urllib庫(kù)常用方法用法的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考下2018-11-11詳解Python?AdaBoost算法的實(shí)現(xiàn)
Boosting是機(jī)器學(xué)習(xí)的三大框架之一。Boost也被稱為增強(qiáng)學(xué)習(xí)或提升法,其中典型的代表算法是AdaBoost算法。本文介紹了AdaBoost算法及python實(shí)現(xiàn),感興趣的可以學(xué)習(xí)一下2022-10-10Python中多進(jìn)程處理的Process和Pool的用法詳解
在Python編程中,多進(jìn)程是一種強(qiáng)大的并行處理技術(shù),Python提供了兩種主要的多進(jìn)程處理方式:Process和Pool,本文將詳細(xì)介紹這兩種方式的使用,希望對(duì)大家有所幫助2024-02-02