利用python實(shí)現(xiàn)詞頻統(tǒng)計(jì)分析的代碼示例
詞頻統(tǒng)計(jì)的概念
詞頻統(tǒng)計(jì)是指在文本或語音數(shù)據(jù)中,統(tǒng)計(jì)每個(gè)單詞或符號(hào)出現(xiàn)的次數(shù),以便對(duì)文本或語音數(shù)據(jù)進(jìn)行分析和預(yù)處理。詞頻統(tǒng)計(jì)是自然語言處理中的一個(gè)重要任務(wù),其目的是為后續(xù)的文本分析、情感分析、機(jī)器翻譯等任務(wù)做好準(zhǔn)備。
在詞頻統(tǒng)計(jì)中,通常將文本或語音數(shù)據(jù)轉(zhuǎn)換成單詞或符號(hào)的形式,然后統(tǒng)計(jì)每個(gè)單詞或符號(hào)出現(xiàn)的次數(shù),并將其存儲(chǔ)為一個(gè)數(shù)據(jù)集或字典。這些數(shù)據(jù)集或字典可以用來訓(xùn)練機(jī)器學(xué)習(xí)模型或進(jìn)行文本分類、情感分析等任務(wù)。
詞頻統(tǒng)計(jì)可以應(yīng)用于許多領(lǐng)域,例如文本分類、情感分析、機(jī)器翻譯、信息檢索等。在文本分類中,詞頻統(tǒng)計(jì)可以幫助確定最重要的單詞或符號(hào),以幫助分類器進(jìn)行分類。在情感分析中,詞頻統(tǒng)計(jì)可以幫助確定文本中最常見的情感,以便進(jìn)行分類。在機(jī)器翻譯中,詞頻統(tǒng)計(jì)可以幫助確定翻譯的單詞或符號(hào)。在信息檢索中,詞頻統(tǒng)計(jì)可以幫助確定查詢中最重要的單詞或符號(hào),以便進(jìn)行查詢匹配。
總之,詞頻統(tǒng)計(jì)是自然語言處理中的一個(gè)重要任務(wù),其目的是為后續(xù)的文本分析、情感分析、機(jī)器翻譯等任務(wù)做好準(zhǔn)備。
常用的方法和工具:
Python:Python 是一種非常流行的編程語言,有許多庫和工具可以用于文本處理和統(tǒng)計(jì),其中最流行的是 NumPy、Pandas 和 SciPy。可以使用這些庫中的任何一個(gè)來計(jì)算文本中詞頻統(tǒng)計(jì),例如使用 NumPy 中的 str_freq 函數(shù)來計(jì)算字符串中單詞出現(xiàn)的頻率。
R:R 是一種統(tǒng)計(jì)軟件,可以輕松地進(jìn)行數(shù)據(jù)可視化和統(tǒng)計(jì)分析??梢允褂?R 中的 text mining 包來計(jì)算文本中詞頻統(tǒng)計(jì),例如使用 tm 包中的 tf_idf 函數(shù)來計(jì)算文本的分詞和詞頻統(tǒng)計(jì)。
Java:Java 是一種流行的編程語言,也有許多庫和工具可以用于文本處理和統(tǒng)計(jì)。可以使用 Java 中的 Apache Commons Text 和 Apache Commons Collections 庫來計(jì)算文本中詞頻統(tǒng)計(jì),例如使用 Commons Text 中的 getWords method 來獲取文本中的單詞。
JavaScript:JavaScript 是一種前端編程語言,也可以用于后端開發(fā)。可以使用 JavaScript 中的 Node.js 和 npm 包管理器來運(yùn)行文本處理和統(tǒng)計(jì)任務(wù),例如使用 npm 包中的 text-parser 和 text-count 包來計(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庫識(shí)別不了的網(wǎng)絡(luò)新詞,避免將一些新詞拆開 jieba.initialize() # 初始化jieba # 文本預(yù)處理 :去除一些無用的字符只提取出中文出來 new_data = re.findall('[\u4e00-\u9fa5]+', mytext, re.S) new_data = " ".join(new_data) # 文本分詞 seg_list_exact = jieba.lcut(new_data) result_list = [] # 讀取停用詞庫 with open('停用詞庫.txt', encoding='utf-8') as f: # 可根據(jù)需要打開停用詞庫,然后加上不想顯示的詞語 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è),其它地方很難有這般景象了。娛樂體驗(yàn)了不倒翁,還有十二時(shí)辰里面表演更加精彩、內(nèi)景拍照不錯(cuò),簋唐樓可以嘗試一下沉浸劇本殺……' comment_cutted = chinese_word_cut(comment) comment_cutted
方法1:使用Pandas庫實(shí)現(xiàn)
首先使用pandas將前面分詞結(jié)果進(jìn)行轉(zhuǎn)化DataFrame類型
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庫
# 方法2-使用collections庫 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)無法顯示 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('詞語') 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ī)視覺編程進(jìn)階之OpenCV?圖像銳化及邊緣檢測(cè)
計(jì)算機(jī)視覺這種技術(shù)可以將靜止圖像或視頻數(shù)據(jù)轉(zhuǎn)換為一種決策或新的表示。所有這樣的轉(zhuǎn)換都是為了完成某種特定的目的而進(jìn)行的,本篇我們來學(xué)習(xí)下如何對(duì)圖像進(jìn)行銳化處理以及如何進(jìn)行邊緣檢測(cè)2021-11-11Python程序打包exe報(bào)錯(cuò)的幾種解決方法
本文主要介紹了Python程序打包exe報(bào)錯(cuò)的幾種解決方法,文中通過幾種解決方法的介紹非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2023-08-08如何利用Python動(dòng)態(tài)模擬太陽系運(yùn)轉(zhuǎn)
這篇文章主要給大家介紹了關(guān)于如何利用Python動(dòng)態(tài)模擬太陽系運(yùn)轉(zhuǎn)的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-09-09Python操作MongoDb數(shù)據(jù)庫流程詳解
這篇文章主要介紹了Python操作MongoDb數(shù)據(jù)庫流程詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-03-03django2.2安裝錯(cuò)誤最全的解決方案(小結(jié))
這篇文章主要介紹了django2.2安裝錯(cuò)誤最全的解決方案(小結(jié)),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-09-09談?wù)剬?duì)Pytorch中的forward的理解
這篇文章主要介紹了談?wù)剬?duì)Pytorch中的forward的理解,在Pytorch中,forward方法是一個(gè)特殊的方法,被專門用來進(jìn)行前向傳播,本文給大家詳細(xì)講解,需要的朋友可以參考下2023-04-04