最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

使用Python實(shí)現(xiàn)文本詞頻分析

 更新時(shí)間:2026年05月19日 08:54:54   作者:Enovo_你當(dāng)像鳥飛往你的山  
Python 是一個(gè)高層次的結(jié)合了解釋性、編譯性、互動(dòng)性和面向?qū)ο蟮哪_本語(yǔ)言,本文主要和大家簡(jiǎn)單介紹一下如何使用Python進(jìn)行文本詞頻分析,感興趣的小伙伴口可以了解下

一、前言

Python 簡(jiǎn)介

Python 是一個(gè)高層次的結(jié)合了解釋性、編譯性、互動(dòng)性和面向?qū)ο蟮哪_本語(yǔ)言。

Python 的設(shè)計(jì)具有很強(qiáng)的可讀性,相比其他語(yǔ)言經(jīng)常使用英文關(guān)鍵字,其他語(yǔ)言的一些標(biāo)點(diǎn)符號(hào),它具有比其他語(yǔ)言更有特色語(yǔ)法結(jié)構(gòu)。

  • Python 是一種解釋型語(yǔ)言: 這意味著開發(fā)過(guò)程中沒(méi)有了編譯這個(gè)環(huán)節(jié)。類似于PHP和Perl語(yǔ)言。
  • Python 是交互式語(yǔ)言: 這意味著,您可以在一個(gè) Python 提示符 >>> 后直接執(zhí)行代碼。
  • Python 是面向?qū)ο笳Z(yǔ)言: 這意味著Python支持面向?qū)ο蟮娘L(fēng)格或代碼封裝在對(duì)象的編程技術(shù)。
  • Python 是初學(xué)者的語(yǔ)言:Python 對(duì)初級(jí)程序員而言,是一種偉大的語(yǔ)言,它支持廣泛的應(yīng)用程序開發(fā),從簡(jiǎn)單的文字處理到 WWW 瀏覽器再到游戲。

Python 特點(diǎn)

  • 1.易于學(xué)習(xí):Python有相對(duì)較少的關(guān)鍵字,結(jié)構(gòu)簡(jiǎn)單,和一個(gè)明確定義的語(yǔ)法,學(xué)習(xí)起來(lái)更加簡(jiǎn)單。
  • 2.易于閱讀:Python代碼定義的更清晰。
  • 3.易于維護(hù):Python的成功在于它的源代碼是相當(dāng)容易維護(hù)的。
  • 4.一個(gè)廣泛的標(biāo)準(zhǔn)庫(kù):Python的最大的優(yōu)勢(shì)之一是豐富的庫(kù),跨平臺(tái)的,在UNIX,Windows和Macintosh兼容很好。
  • 5.互動(dòng)模式:互動(dòng)模式的支持,您可以從終端輸入執(zhí)行代碼并獲得結(jié)果的語(yǔ)言,互動(dòng)的測(cè)試和調(diào)試代碼片斷。
  • 6.可移植:基于其開放源代碼的特性,Python已經(jīng)被移植(也就是使其工作)到許多平臺(tái)。
  • 7.可擴(kuò)展:如果你需要一段運(yùn)行很快的關(guān)鍵代碼,或者是想要編寫一些不愿開放的算法,你可以使用C或C++完成那部分程序,然后從你的Python程序中調(diào)用。
  • 8.數(shù)據(jù)庫(kù):Python提供所有主要的商業(yè)數(shù)據(jù)庫(kù)的接口。
  • 9.GUI編程:Python支持GUI可以創(chuàng)建和移植到許多系統(tǒng)調(diào)用。
  • 10.可嵌入: 你可以將Python嵌入到C/C++程序,讓你的程序的用戶獲得"腳本化"的能力。

二、基本環(huán)境配置

版本:Python3

系統(tǒng):Windows

相關(guān)庫(kù):requests,lxml,numpy,Counter,pandas,re,jieba

開發(fā)工具:Pycharm

在這里我使用的是 anaconda ,眾所周知這是一個(gè)大軟件,但是它的環(huán)境是比較全面的,在之前的學(xué)習(xí)中,我們用的是這個(gè)軟件。

anconda,可以理解成運(yùn)輸車,每當(dāng)下載anconda的時(shí)候,里面不僅包含了python,還有180多個(gè)庫(kù)(武器)一同被打包下載下來(lái)

下載完anconda之后,再也不用一個(gè)個(gè)下載那些庫(kù)了。

三、分析

Part1介紹

文本分析一直都是數(shù)據(jù)分析的重要組成,研究方向眾多,包括但不限于詞頻分析、情感分析、文本分類、文本可視化等。其中一些方向研究難度不小,存在一定的技術(shù)門檻,但在中文文本分析中,大多數(shù)的研究方向都和詞語(yǔ)息息相關(guān),所以文本詞頻分析往往是文本分析的“第一步”。

在技術(shù)資源和數(shù)據(jù)資源豐饒的現(xiàn)代,人人都可以自建爐灶,進(jìn)行自己的文本研究。一些讀者可能在技術(shù)操作上存在困難,故而本文就來(lái)為大家在詞頻分析方面提供一些微小的幫助。

本文中所有 Python 代碼均在集成開發(fā)環(huán)境 PyCharm 中以及使用交互式開發(fā)環(huán)境 Jupyter Notebook 編寫和運(yùn)行,使用到的 Python 庫(kù)有 re(用于文本預(yù)處理)、jieba(用于中文分詞)、collections(用于詞頻統(tǒng)計(jì))、pandas (用于詞頻統(tǒng)計(jì)表的制作和保存)。

Part2詞頻分析對(duì)象

首先將文本保存為文本文件(txt 文件),正文部分如下圖所示。

Part3文本預(yù)處理

首先使用 Python 讀取文本,代碼如下:

with open('規(guī)劃.txt', 'r', encoding='utf-8') as f:
    # encoding 參數(shù)需要根據(jù)文本文件實(shí)際的編碼來(lái)設(shè)置
    Text = f.read()  # 讀取全部?jī)?nèi)容
f.close()            # 關(guān)閉文件,必要的操作
# 輸出正文的前 200 個(gè)字符
Text[2024:2224]

Python 讀取文本文件時(shí),會(huì)加載所有文本,包括空格和換行符。在文章正文的書寫中,我們難以避免地使用換行來(lái)讓文字連續(xù)。這有利于閱讀,但使用 Python 讀取文檔時(shí)會(huì)讀到很多換行符以及其他的空白字符,這嚴(yán)重影響了文本中詞語(yǔ)的連續(xù)性,所以將換行符和空白符全部去除是一個(gè)不錯(cuò)的解決方案,操作代碼如下:

import re
# 使用正則表達(dá)式去除文本中所有的換行符和空白符
Text = re.sub('\s+', '', Text) 

下圖是去除換行符后正文(不含目錄)的一部分:

小貼士

 文本經(jīng)過(guò)預(yù)處理后,在后續(xù)的分詞過(guò)程中不會(huì)受到干擾字符(換行符,空格)的影響,分詞效果更好。

Part4中文分詞——全都是“干貨”

分詞是詞頻分析最重要的一步,分詞的效果和準(zhǔn)確性直接影響詞頻統(tǒng)計(jì)的結(jié)果,所以在分詞方面,需要多做一些工作。

jieba 是 Python 的一個(gè)第三方庫(kù),可以用于分詞,篩選關(guān)鍵詞等。Python 有不少分詞工具,jieba 的分詞效果不一定是最好的,但是它的普適性、易用性、可擴(kuò)展性一定是非常優(yōu)秀的,本文就用它作為分詞的工具。

添加自定義詞庫(kù)(特色詞庫(kù))

jieba 分詞以基本詞庫(kù)為標(biāo)準(zhǔn),一般詞語(yǔ)的顆粒度比較小,鮮有某專業(yè)領(lǐng)域的特色詞。因此我們可以將一些字?jǐn)?shù)較多的詞語(yǔ)和專業(yè)領(lǐng)域的特色詞,添加到我們的特色詞庫(kù)。將特色詞庫(kù)導(dǎo)入后,這些詞語(yǔ)的權(quán)重要比常規(guī)詞語(yǔ)高一些,jieba 會(huì)優(yōu)先將他們視作詞語(yǔ)進(jìn)行分詞。

添加自定義詞語(yǔ)有兩種方式,一種是使用 jieba.add_word 添加,代碼如下:

import jieba
jieba.add_word('特色詞')

另一種是將所有詞語(yǔ)存入 txt(編碼為UTF-8)中,使用 jieba.load_userdict 添加,我們隨意從《“十四五”規(guī)劃》文本中選取 50 個(gè)詞語(yǔ)作為特色詞保存到 txt 中,詞庫(kù)格式如下圖所示:

將此 txt 加載到 jieba 特色詞庫(kù)的代碼如下:

# Special_words.txt 是特色詞語(yǔ)的路徑
jieba.load_userdict('Special_words.txt')

進(jìn)行分詞

使用jieba.lcut 對(duì)文章進(jìn)行分詞,所有詞語(yǔ)保存為一個(gè)列表,代碼如下:

Words_list = jieba.lcut(Text)  # 進(jìn)行分詞,結(jié)果為詞語(yǔ)列表
print(len(Words_list)) # 輸出詞語(yǔ)總數(shù)量,結(jié)果為 32789
Words_list[:10]  # 輸出前 10 個(gè)詞語(yǔ)

去除停用詞

停用詞一般指文本中一些無(wú)實(shí)際意義的語(yǔ)氣詞,助詞等用處不大的詞語(yǔ),因此需要在對(duì)分解結(jié)果進(jìn)行處理,去除其中的停用詞。有許多機(jī)構(gòu)已經(jīng)收錄了很多常見(jiàn)的停用詞,我們使用百度收錄的停用詞庫(kù)來(lái)去除停用詞,停用詞庫(kù)(txt 文件)如下圖所示:

去除停用詞的原理其實(shí)很簡(jiǎn)單,就是將停用詞庫(kù)加載為一個(gè)詞語(yǔ)列表,再將分詞列表中出現(xiàn)在停用詞庫(kù)中的詞語(yǔ)去除即可。將停用詞庫(kù)加載為詞列表的代碼如下:

Stopwords = open('./停用詞/baidu_stopwords.txt', 'r', encoding='utf-8').readlines()
Stopwords = [word.strip() for word in Stopwords]

去除分詞列表中停用詞的代碼如下:

Words_list = [word for word in Words_list if word not in Stopwords]
# 輸出去停用詞后的總詞數(shù)
print(len(Words_list)) # 輸出:28337, 較去除之前減少了 4452 個(gè)詞語(yǔ)

按需處理其他詞語(yǔ)

在去除停用詞后,詞語(yǔ)列表中仍有一些我們不需要的詞語(yǔ),如“”、“”、“13” 、“/” 等實(shí)際不需要的詞語(yǔ),我們編寫代碼去除所有不含中文的詞語(yǔ)和字?jǐn)?shù)為1的詞語(yǔ),代碼如下:

# 去除不含中文的詞語(yǔ)
Words_list = [word for word in Words_list if bool(re.search('[\u4e00-\u9fa5]', word)) == True]
# 去除字?jǐn)?shù)為 1 的詞語(yǔ)
Words_list = [word for word in Words_list if len(word) != 1]
# 輸出剩余詞語(yǔ)的數(shù)量
print(len(Words_list))    # 輸出:21913

經(jīng)過(guò)兩輪清洗,詞語(yǔ)總數(shù)量已經(jīng)從 32789 減少到 21913 個(gè)詞語(yǔ),一共去除 10876 個(gè)不需要的詞語(yǔ),剩余的詞語(yǔ)均是有意義的詞語(yǔ),對(duì)清洗后的結(jié)果做詞頻統(tǒng)計(jì)才更加有意義。也可見(jiàn)數(shù)據(jù)預(yù)處理的重要性。

Part5生成詞頻統(tǒng)計(jì)表

統(tǒng)計(jì)詞頻

對(duì)分詞結(jié)果進(jìn)行清理后,可以開始對(duì)剩余的詞語(yǔ)做詞頻統(tǒng)計(jì)了。Counter 是 Python  中 collections 庫(kù)中的一個(gè)函數(shù),可以用于統(tǒng)計(jì)列表元素出現(xiàn)頻率,詞頻統(tǒng)計(jì)的代碼如下:

from collections import Counter # 導(dǎo)入頻率統(tǒng)計(jì)函數(shù)
Word_count = Counter(Words_list) # 統(tǒng)計(jì)詞頻,所得結(jié)果為 Counter 對(duì)象
Word_count = dict(Word_count) # 將結(jié)果轉(zhuǎn)為字典對(duì)象
Word_count

將詞頻統(tǒng)計(jì)結(jié)果保存為表格

可以使用 pandas 將所有詞語(yǔ)及其頻率保存到 excel 表中,方便查看,生成以及保存到表的代碼如下:

import pandas as pd
Table = pd.DataFrame(columns=['詞語(yǔ)', '詞頻']) # 生成空表
Table['詞語(yǔ)'] = list(Word_count.keys())   # 詞語(yǔ)字段保存詞語(yǔ)
Table['詞頻'] = list(Word_count.values()) # 詞頻字段保存詞語(yǔ)對(duì)應(yīng)的詞頻
Table = Table.sort_values(by=['詞頻'], ascending=False) # 按照詞頻降序排序
Table.to_excel('詞頻統(tǒng)計(jì)表.xlsx', index=False) # 將結(jié)果保存為 excel 表

另外我們也可以提取我們添加的特色詞,獲取一個(gè)只包含特色詞的詞頻統(tǒng)計(jì)表,代碼如下:

# 讀取特色詞庫(kù)為詞列表
Specialwords = open('Special_words.txt', 'r', encoding='utf-8').readlines()
Specialwords = [word.strip() for word in Stopwords]
# 獲取分詞處理結(jié)果中所有的特色詞,這個(gè)結(jié)果可以直接用來(lái)制作詞云圖
Special_words = [word for word in Words_list if word in Specialwords]
# 對(duì)特色詞做詞頻統(tǒng)計(jì)
Special_count = dict(Counter(Special_words))
# 生成詞頻統(tǒng)計(jì)表并保存
Table_special = pd.DataFrame(columns=['特色詞語(yǔ)', '詞頻'])
Table_special['特色詞語(yǔ)'] = list(Special_count.keys())
Table_special['詞頻'] = list(Special_count.values())
Table_special = Table_special.sort_values(by=['詞頻'], ascending=False)
Table_special.to_excel('詞頻統(tǒng)計(jì)表.xlsx', index=False)

我們還可以根據(jù)特色詞語(yǔ)列表(不去重)來(lái)制作詞云圖,也就是文章頂部的那張?jiān)~云圖了。

Part6全部代碼

# 導(dǎo)入工具包
import re, jieba
import pandas as pd
from collections import Counter
# 讀取文本
with open('規(guī)劃.txt', 'r', encoding='utf-8') as f:
    # encoding 參數(shù)需要根據(jù)文本文件實(shí)際的編碼來(lái)設(shè)置,也可以
    # 事先對(duì) txt 進(jìn)行轉(zhuǎn)碼
    Text = f.read()  # 讀取全部?jī)?nèi)容
f.close()            # 關(guān)閉文件,必要的操作
# 使用正則表達(dá)式去除文本中所有的換行符和空白符
Text = re.sub('\s+', '', Text)
# 導(dǎo)入特色詞庫(kù)
jieba.load_userdict('Special_words.txt')
# 進(jìn)行分詞,所得結(jié)果為詞語(yǔ)列表
Words_list = jieba.lcut(Text)
# 加載停用詞、去除停用詞
Stopwords = open('./停用詞/baidu_stopwords.txt', 'r', encoding='utf-8').readlines()
Stopwords = [word.strip() for word in Stopwords]
Words_list = [word for word in Words_list if word not in Stopwords]
# 去除不含中文的詞語(yǔ)
Words_list = [word for word in Words_list if bool(re.search('[\u4e00-\u9fa5]', word)) == True]
# 去除字?jǐn)?shù)為 1 的詞語(yǔ)
Words_list = [word for word in Words_list if len(word) != 1]
# 統(tǒng)計(jì)詞頻 
Word_count = dict(Counter(Words_list))
# 生成詞頻統(tǒng)計(jì)表
Table = pd.DataFrame(columns=['詞語(yǔ)', '詞頻']) # 生成空表
Table['詞語(yǔ)'] = list(Word_count.keys())   # 詞語(yǔ)字段保存詞語(yǔ)
Table['詞頻'] = list(Word_count.values()) # 詞頻字段保存詞語(yǔ)對(duì)應(yīng)的詞頻
Table = Table.sort_values(by=['詞頻'], ascending=False) # 按照詞頻降序排序
Table.to_excel('詞頻統(tǒng)計(jì)表.xlsx', index=False) # 將結(jié)果保存為 excel 表

本文為大家介紹了如何使用 Python 進(jìn)行文本分分析中的詞頻分析。從文本讀取,到詞頻統(tǒng)計(jì)表的生成,講解了每一步的代碼和作用。

到此這篇關(guān)于使用Python實(shí)現(xiàn)文本詞頻分析的文章就介紹到這了,更多相關(guān)Python文本詞頻分析內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論

中西区| 南丰县| 枣强县| 涟源市| 德惠市| 北流市| 长岛县| 田阳县| 卢湾区| 锡林浩特市| 霞浦县| 健康| 自治县| 夹江县| 玛曲县| 随州市| 庄浪县| 广东省| 若尔盖县| 睢宁县| 原阳县| 侯马市| 云和县| 普宁市| 乌拉特中旗| 广宁县| 历史| 鄂尔多斯市| 郁南县| 锦屏县| 周至县| 巍山| 长兴县| 遂川县| 闵行区| 大田县| 临朐县| 浦江县| 兴化市| 浦北县| 韶山市|