日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

Python大数据:jieba分词,词频统计

發布時間:2025/3/19 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Python大数据:jieba分词,词频统计 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

實驗目的

  • 學習如何讀取一個文件
  • 學習如何使用DataFrame
  • 學習jieba中文分詞組件及停用詞處理原理
  • 了解Jupyter Notebook
  • 概念

    中文分詞

    在自然語言處理過程中,為了能更好地處理句子,往往需要把句子拆開分成一個一個的詞語,這樣能更好的分析句子的特性,這個過程叫就叫做分詞。由于中文句子不像英文那樣天然自帶分隔,并且存在各種各樣的詞組,從而使中文分詞具有一定的難度。

    不過,中文分詞并不追求完美,而是通過關鍵字識別技術,抽取句子中最關鍵的部分,從而達到理解句子的目的。

    工具

    Jupyter Notebook

    Jupyter Notebook是一個交互式的筆記本工具,重點有兩點
    - “交互式” 讓你隨時隨時運行并暫存結果,
    - “筆記本” 記錄你的研究過程

    想象一下,在這之前你是如何使用Python的?

    • 用一切可能的文本編輯工具編寫代碼
    • 然后運行python xxx.py調試
    • 當你寫了一個9W條數據的處理程序之后,跑到一半報個錯,又得重頭開始
    • 畫圖基本靠腦補

    有了JN之后,你可以:

    • 直接在網頁上編寫代碼
    • 按Shift + Enter立即執行當前Cell的代碼段
    • Cell執行后的變量仍然生存,可以在下一個Cell繼續使用,所以,我用第一個Cell加載9W條數據,第二個Cell開始預處理,第三個Cell進行運算等等
    • 直接在網頁上畫出圖片,即時調整參數Shift+Enter預覽,麻麻再也不用擔心我寫錯代碼,美滋滋 ~~~

    jieba

    jieba模塊安裝請參見官方說明

    jieba 是一個python實現的中文分詞組件,在中文分詞界非常出名,支持簡、繁體中文,高級用戶還可以加入自定義詞典以提高分詞的準確率。

    它支持三種分詞模式

    • 精確模式:試圖將句子最精確地切開,適合文本分析;
    • 全模式:把句子中所有的可以成詞的詞語都掃描出來, 速度非常快,但是不能解決歧義;
    • 搜索引擎模式:在精確模式的基礎上,對長詞再次切分,提高召回率,適合用于搜索引擎分詞。

    另外它還自帶有關鍵詞摘取算法。

    • 基于 TF-IDF 算法的關鍵詞抽取
    • 基于 TextRank 算法的關鍵詞抽取

    pandas

    pandas 是基于NumPy 的大數據處理工具,基本數據結構有(二維表)DataFrame,(一維數組)Series。

    本次實驗中,我們主要使用pandas的DataFrame,加載、保存csv數據源,處理數組進行去重、統計。

    數據

    實驗數據為百度隨意打開的新聞,請讀者自行按下表格式準備

    idtitlecontent
    1文章標題文章內容
    2文章標題文章內容
    3文章標題文章內容
    本文使用的數據截圖

    思路(偽代碼)

  • 讀取數據源
  • 加載停用詞庫
  • 循環對每一篇文章進行分詞
    • 普通分詞,需要手工進行停用詞過濾
    • TF-IDF關鍵詞抽取,需要使用停用詞庫
    • textrank關鍵詞抽取,只取指定詞性的關鍵詞
  • 對結果進行詞頻統計
  • 輸出結果到csv文件
  • 實驗代碼

    第一行將代碼標記為utf-8編碼,避免出現處理非ascii字符時的錯誤

    # -*- coding: UTF-8 -*-

    載入需要用到的模塊,as是給模塊取個別名,輸入的時候不用輸那么長的單詞。

    嗯,反正你別問我為什么不給jieba取別名

    import numpy as np import pandas as pd import jieba import jieba.analyse import codecs

    默認情況下,pd顯示的文本長度為50,超出部分顯示為省略號,我們修改一下,以方便觀察數據(文章內容)

    #設置pd的顯示長度 pd.set_option('max_colwidth',500)

    讀取我們的實驗數據,將所有列設置為string,編碼指定utf-8,第一行為列頭

    #載入數據 rows=pd.read_csv('datas1.csv', header=0,encoding='utf-8',dtype=str)

    我們直接在下一個Cell中輸入變量rows,觀察載入的結果

    加載后的數據

    對于普通分詞,我們需要將停用詞載入到一個數組中,在分詞后逐一比較關鍵詞是否為停用詞

    stopwords = [line.strip() for line in codecs.open('stoped.txt', 'r', 'utf-8').readlines()]

    對于TF-IDF,我們只需要告訴組件停用詞庫,它將自己載入詞庫并使用它

    #載入停用詞 jieba.analyse.set_stop_words('stoped.txt')

    接下來我們就要對所有文章進行分詞了,先聲明一個數組,用于保存分詞后的關鍵字,此數組每行保存一個關鍵字對象。

    關鍵字對象有兩個屬性:

    • word: 關鍵字本身
    • count : 永遠為1,用于后面統計詞頻
    # 保存全局分詞,用于詞頻統計 segments = []

    普通分詞及停用詞判斷

    for index, row in rows.iterrows():content = row[2]#TextRank 關鍵詞抽取,只獲取固定詞性words = jieba.cut(content)splitedStr = ''for word in words:#停用詞判斷,如果當前的關鍵詞不在停用詞庫中才進行記錄if word not in stopwords:# 記錄全局分詞segments.append({'word':word, 'count':1})splitedStr += word + ' '

    Text Rank 關鍵詞抽取

    for index, row in rows.iterrows():content = row[2]#TextRank 關鍵詞抽取,只獲取固定詞性words = jieba.analyse.textrank(content, topK=20,withWeight=False,allowPOS=('ns', 'n', 'vn', 'v'))splitedStr = ''for word in words:# 記錄全局分詞segments.append({'word':word, 'count':1})splitedStr += word + ' '

    觀察分詞后的關鍵字,發現全是utf-8編碼后的文字,暫時不管,我們先將這個數組轉換為DataFrame對象,調用groupby方法和sum方法進行統計匯總。

    # 將結果數組轉為df序列 dfSg = pd.DataFrame(segments)# 詞頻統計 dfWord = dfSg.groupby('word')['count'].sum()

    輸出結果

    #導出csv dfWord.to_csv('keywords.csv',encoding='utf-8') 導出的數據結果

    完整代碼

    # -*- coding: UTF-8 -*- import numpy as np import pandas as pd import jieba import jieba.analyse import codecs#設置pd的顯示長度 pd.set_option('max_colwidth',500)#載入數據 rows=pd.read_csv('datas1.csv', header=0,encoding='utf-8',dtype=str)segments = [] for index, row in rows.iterrows():content = row[2]#TextRank 關鍵詞抽取,只獲取固定詞性words = jieba.analyse.textrank(content, topK=50,withWeight=False,allowPOS=('ns', 'n', 'vn', 'v'))splitedStr = ''for word in words:# 記錄全局分詞segments.append({'word':word, 'count':1})splitedStr += word + ' ' dfSg = pd.DataFrame(segments)# 詞頻統計 dfWord = dfSg.groupby('word')['count'].sum() #導出csv dfWord.to_csv('keywords.csv',encoding='utf-8')

    總結

    分詞算法

    本次實驗,我們學習了如何使用jieba模塊進行中文分詞與關鍵字提取,結果各有千秋:

    • 普通分詞:需要手工過濾停用詞、無意義詞、電話號碼、符號等,但能較為全面的保留所有關鍵字。
    • TF-IDF:停用詞過濾有限,也需要手工處理部分數字、符號;它通過詞頻抽取關鍵字,對同一篇文章的詞頻統計不具有統計意義,多用于宏觀上的觀測。
    • Text Rank: 大概效果同TF-IDF,通過限定詞性過濾無關字符,能得到較為工整的關鍵字結果。

    結論

    總之,我們應根據我們的目標去選擇適當的分詞方法。

    • 對某一篇文章進行關鍵字Map,我們選擇普通分詞,并自行過濾關鍵詞,或添加自定義詞庫。
    • 對采集的一批樣本進行關鍵字分析,我們可以選擇TF-IDF,對所有的關鍵字進行詞頻統計,并繪制出關鍵字云圖。
    • 如果我們要分析一批樣本中用戶的分類,用戶的行為,用戶的目的,我們可以選擇TextRank抽取指定詞性的關鍵字進行統計分析。

    引用

    jieba 開源倉庫 https://github.com/fxsjy/jieba

    下期預告

    Python大數據:商品評論的情感傾向分析

    總結

    以上是生活随笔為你收集整理的Python大数据:jieba分词,词频统计的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。