利用python實(shí)現(xiàn)詞頻統(tǒng)計(jì)分析的代碼示例
詞頻統(tǒng)計(jì)的概念
詞頻統(tǒng)計(jì)是指在文本或語(yǔ)音數(shù)據(jù)中,統(tǒng)計(jì)每個(gè)單詞或符號(hào)出現(xiàn)的次數(shù),以便對(duì)文本或語(yǔ)音數(shù)據(jù)進(jìn)行分析和預(yù)處理。詞頻統(tǒng)計(jì)是自然語(yǔ)言處理中的一個(gè)重要任務(wù),其目的是為后續(xù)的文本分析、情感分析、機(jī)器翻譯等任務(wù)做好準(zhǔn)備。
在詞頻統(tǒng)計(jì)中,通常將文本或語(yǔ)音數(shù)據(jù)轉(zhuǎn)換成單詞或符號(hào)的形式,然后統(tǒng)計(jì)每個(gè)單詞或符號(hào)出現(xiàn)的次數(shù),并將其存儲(chǔ)為一個(gè)數(shù)據(jù)集或字典。這些數(shù)據(jù)集或字典可以用來(lái)訓(xùn)練機(jī)器學(xué)習(xí)模型或進(jìn)行文本分類(lèi)、情感分析等任務(wù)。
詞頻統(tǒng)計(jì)可以應(yīng)用于許多領(lǐng)域,例如文本分類(lèi)、情感分析、機(jī)器翻譯、信息檢索等。在文本分類(lèi)中,詞頻統(tǒng)計(jì)可以幫助確定最重要的單詞或符號(hào),以幫助分類(lèi)器進(jìn)行分類(lèi)。在情感分析中,詞頻統(tǒng)計(jì)可以幫助確定文本中最常見(jiàn)的情感,以便進(jìn)行分類(lèi)。在機(jī)器翻譯中,詞頻統(tǒng)計(jì)可以幫助確定翻譯的單詞或符號(hào)。在信息檢索中,詞頻統(tǒng)計(jì)可以幫助確定查詢(xún)中最重要的單詞或符號(hào),以便進(jìn)行查詢(xún)匹配。
總之,詞頻統(tǒng)計(jì)是自然語(yǔ)言處理中的一個(gè)重要任務(wù),其目的是為后續(xù)的文本分析、情感分析、機(jī)器翻譯等任務(wù)做好準(zhǔn)備。
常用的方法和工具:
Python:Python 是一種非常流行的編程語(yǔ)言,有許多庫(kù)和工具可以用于文本處理和統(tǒng)計(jì),其中最流行的是 NumPy、Pandas 和 SciPy??梢允褂眠@些庫(kù)中的任何一個(gè)來(lái)計(jì)算文本中詞頻統(tǒng)計(jì),例如使用 NumPy 中的 str_freq 函數(shù)來(lái)計(jì)算字符串中單詞出現(xiàn)的頻率。
R:R 是一種統(tǒng)計(jì)軟件,可以輕松地進(jìn)行數(shù)據(jù)可視化和統(tǒng)計(jì)分析。可以使用 R 中的 text mining 包來(lái)計(jì)算文本中詞頻統(tǒng)計(jì),例如使用 tm 包中的 tf_idf 函數(shù)來(lái)計(jì)算文本的分詞和詞頻統(tǒng)計(jì)。
Java:Java 是一種流行的編程語(yǔ)言,也有許多庫(kù)和工具可以用于文本處理和統(tǒng)計(jì)??梢允褂?Java 中的 Apache Commons Text 和 Apache Commons Collections 庫(kù)來(lái)計(jì)算文本中詞頻統(tǒng)計(jì),例如使用 Commons Text 中的 getWords method 來(lái)獲取文本中的單詞。
JavaScript:JavaScript 是一種前端編程語(yǔ)言,也可以用于后端開(kāi)發(fā)??梢允褂?JavaScript 中的 Node.js 和 npm 包管理器來(lái)運(yùn)行文本處理和統(tǒng)計(jì)任務(wù),例如使用 npm 包中的 text-parser 和 text-count 包來(lái)計(jì)算文本中詞頻統(tǒng)計(jì)。
Python實(shí)現(xiàn)詞頻統(tǒng)計(jì)
關(guān)于python的實(shí)現(xiàn),我給大家介紹兩種最常用的方法。
在做詞頻統(tǒng)計(jì)之前,需要要用到前面介紹中文分詞封裝的函數(shù),然后我這里使用了關(guān)于大唐不夜城的一條評(píng)論文本作為示范先進(jìn)行分詞。
import re
import jieba
def chinese_word_cut(mytext):
jieba.load_userdict('自定義詞典.txt') # 這里你可以添加jieba庫(kù)識(shí)別不了的網(wǎng)絡(luò)新詞,避免將一些新詞拆開(kāi)
jieba.initialize() # 初始化jieba
# 文本預(yù)處理 :去除一些無(wú)用的字符只提取出中文出來(lái)
new_data = re.findall('[\u4e00-\u9fa5]+', mytext, re.S)
new_data = " ".join(new_data)
# 文本分詞
seg_list_exact = jieba.lcut(new_data)
result_list = []
# 讀取停用詞庫(kù)
with open('停用詞庫(kù).txt', encoding='utf-8') as f: # 可根據(jù)需要打開(kāi)停用詞庫(kù),然后加上不想顯示的詞語(yǔ)
con = f.readlines()
stop_words = set()
for i in con:
i = i.replace("\n", "") # 去掉讀取每一行數(shù)據(jù)的\n
stop_words.add(i)
# 去除停用詞并且去除單字
for word in seg_list_exact:
if word not in stop_words and len(word) > 1:
result_list.append(word)
return result_list
comment = '大唐不夜城,不夜城趣味性很高,里面地方特色東西好吃,也有星巴克麥當(dāng)勞等等選擇,有不少場(chǎng)表演,外景夜景一定要薅一個(gè),其它地方很難有這般景象了。娛樂(lè)體驗(yàn)了不倒翁,還有十二時(shí)辰里面表演更加精彩、內(nèi)景拍照不錯(cuò),簋唐樓可以嘗試一下沉浸劇本殺……'
comment_cutted = chinese_word_cut(comment)
comment_cutted
方法1:使用Pandas庫(kù)實(shí)現(xiàn)
首先使用pandas將前面分詞結(jié)果進(jìn)行轉(zhuǎn)化DataFrame類(lèi)型
import pandas as pd df = pd.DataFrame(comment_cutted) df

接著使用groupby函數(shù)對(duì)第0列進(jìn)行統(tǒng)計(jì),然后降序輸出
word_frequency_df = df.groupby(0).size().sort_values(ascending=False) word_frequency_df

最后將詞頻統(tǒng)計(jì)的結(jié)果保存為文件
# 將詞頻統(tǒng)計(jì)進(jìn)行保存
word_frequency_df.to_excel('詞頻統(tǒng)計(jì)結(jié)果.xlsx') # 保存為excel文件
# word_frequency_df.to_csv('詞頻統(tǒng)計(jì)結(jié)果.xlsx') # 保存為csv文件
方法2:使用collections庫(kù)
# 方法2-使用collections庫(kù) from collections import Counter Counter(comment_cutted)

使用Counter函數(shù)對(duì)前面的分詞結(jié)果進(jìn)行統(tǒng)計(jì),然后使用most_common輸出按詞頻頻次降序排列的結(jié)果,如果你只想輸出前n個(gè)單詞,傳入數(shù)值即可。 默認(rèn)是全部輸出。
word_counts = Counter(comment_cutted) word_counts.most_common() # word_counts.most_common(10) # 輸出詞頻最高的前十個(gè)單詞

如果想將上面結(jié)果保存為文件的話,執(zhí)行以下代碼:
# 將詞頻統(tǒng)計(jì)結(jié)果保存為txt文件
word_counts_top = word_counts.most_common()
with open('詞頻統(tǒng)計(jì)結(jié)果.txt','w',encoding='utf-8')as f:
for i in word_counts_top:
f.write(str(i[0]))
f.write('\t')
f.write(str(i[1]))
f.write('\n')
如果我們想將TOP10高頻詞進(jìn)行可視化展示,可以執(zhí)行下面代碼:
import matplotlib.pylab as plt
plt.rcParams['font.sans-serif'] = ['SimHei'] #解決中文顯示
plt.rcParams['axes.unicode_minus'] = False #解決符號(hào)無(wú)法顯示
word_counts = Counter(comment_cutted)
word_counts_top = word_counts.most_common()
x = [item[0] for item in word_counts_top[:10]]
y = [item[1] for item in word_counts_top[:10]]
plt.bar(x,y)
plt.title('Top10高頻詞')
plt.xlabel('詞語(yǔ)')
plt.ylabel('頻次')
plt.show()
到此這篇關(guān)于利用python實(shí)現(xiàn)詞頻統(tǒng)計(jì)分析的代碼示例的文章就介紹到這了,更多相關(guān)python詞頻統(tǒng)計(jì)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python?計(jì)算機(jī)視覺(jué)編程進(jìn)階之OpenCV?圖像銳化及邊緣檢測(cè)
計(jì)算機(jī)視覺(jué)這種技術(shù)可以將靜止圖像或視頻數(shù)據(jù)轉(zhuǎn)換為一種決策或新的表示。所有這樣的轉(zhuǎn)換都是為了完成某種特定的目的而進(jìn)行的,本篇我們來(lái)學(xué)習(xí)下如何對(duì)圖像進(jìn)行銳化處理以及如何進(jìn)行邊緣檢測(cè)2021-11-11
Python程序打包exe報(bào)錯(cuò)的幾種解決方法
本文主要介紹了Python程序打包exe報(bào)錯(cuò)的幾種解決方法,文中通過(guò)幾種解決方法的介紹非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2023-08-08
如何利用Python動(dòng)態(tài)模擬太陽(yáng)系運(yùn)轉(zhuǎn)
這篇文章主要給大家介紹了關(guān)于如何利用Python動(dòng)態(tài)模擬太陽(yáng)系運(yùn)轉(zhuǎn)的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-09-09
Python操作MongoDb數(shù)據(jù)庫(kù)流程詳解
這篇文章主要介紹了Python操作MongoDb數(shù)據(jù)庫(kù)流程詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-03-03
django2.2安裝錯(cuò)誤最全的解決方案(小結(jié))
這篇文章主要介紹了django2.2安裝錯(cuò)誤最全的解決方案(小結(jié)),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-09-09
談?wù)剬?duì)Pytorch中的forward的理解
這篇文章主要介紹了談?wù)剬?duì)Pytorch中的forward的理解,在Pytorch中,forward方法是一個(gè)特殊的方法,被專(zhuān)門(mén)用來(lái)進(jìn)行前向傳播,本文給大家詳細(xì)講解,需要的朋友可以參考下2023-04-04

