Python中文分詞及詞頻統計


# 導入擴展庫
import re                           # 正則表達式庫
import jieba                        # 結巴分詞
import jieba.posseg                 # 詞性獲取
import collections                  # 詞頻統計庫
import numpy                        # numpy數據處理庫
from PIL import Image               # 圖像處理庫
import wordcloud                    # 詞雲展示庫
import matplotlib.pyplot as plt     # 圖像展示庫(這里以plt代表庫的全稱)
import utils

# 主要功能自定義設置

userdict = '用戶詞典.txt'             # 用戶詞典
StopWords = './data/stopword.txt'            # 停用詞庫
number = 10000                          # 統計個數
background = './a.png'           # 詞頻背景




def test():
    # 讀取文件
    fn = open(Analysis_text, 'r', encoding='UTF-8')  # 打開文件
    string_data = fn.read()  # 讀出整個文件
    fn.close()
    # 文本預處理
    pattern = re.compile(u'\t|\n|\.|-|:|;|\)|\(|\?|"')  # 定義正則表達式匹配模式(空格等)
    string_data = re.sub(pattern, '', string_data)  # 將符合模式的字符去除
    # 動態調整詞典
    # jieba.suggest_freq('小小花', True)  # True表示該詞不能被分割,False表示該詞能被分割

    # 添加用戶詞典
    # jieba.load_userdict(userdict)

    # 文本分詞
    seg_list_exact = jieba.cut(string_data, cut_all=False, HMM=True)  # 精確模式分詞+HMM
    object_list = []

    # 去除停用詞(去掉一些意義不大的詞,如標點符號、嗯、啊等)
    with open(StopWords, 'r', encoding='UTF-8') as meaninglessFile:
        stopwords = set(meaninglessFile.read().split('\n'))
    stopwords.add(' ')
    for word in seg_list_exact:  # 循環讀出每個分詞
        if word not in stopwords:  # 如果不在去除詞庫中
            object_list.append(word)  # 分詞追加到列表

    # 詞頻統計
    word_counts = collections.Counter(object_list)  # 對分詞做詞頻統計
    word_counts_top = word_counts.most_common(number)  # 獲取前number個最高頻的詞
    # 輸出至工作台,並導出“詞頻.txt”文件
    # print('\n詞語\t詞頻\t詞性')
    # print('——————————')
    # fileOut = open(Output, 'w', encoding='UTF-8')  # 創建文本文件;若已存在,則進行覆蓋
    # fileOut.write('詞語\t詞頻\t詞性\n')
    # fileOut.write('——————————\n')
    return word_counts_top
if __name__ == '__main__':
    list = ['x_train']
    # list = ['lvyou','tiyu','jiaoyu','shishang','keji','caijing','yule','lishi','chongwu','jiankang']
    for v in list:
        Analysis_text = './xinwen/'+v+'.txt'  # 分析文檔
        Output = './cipin/'+v+'.txt'  # 輸出文件
        word_counts_top = test()
        for TopWord, Frequency in word_counts_top:  # 獲取詞語和詞頻
            print(TopWord + '\t', str(Frequency) + '\t',v)  # 逐行輸出數據
            print(type(Frequency))
            # fileOut.write(TopWord + '\t' + str(Frequency) + '\t' + '\n')  # 逐行寫入str格式數據
            utils.insert(TopWord,Frequency,v)
        # fileOut.close()  # 關閉文件

這個是根據我的需求寫的循環十個文本並存入數據庫的分詞,統計了一萬個詞頻

 
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM