2021年1月24日 星期日

【簡單玩python】~~使用 jieba 中文斷詞系統,輕鬆進行文章詞語分析

 假如今天你想要對一段文句或是文章內容進行中文詞語的分析與統計,做出類似「文字雲」的效果,要怎麼做呢?

個人簡略分析如下:

1.首先將文字(章)內容抓取下來

2.分析(分解)其中的詞語

3.統計每個詞語的使用頻率

然後...........思考如何美美的呈現囉

這其中最重要的核心關鍵,就在於如何進行詞語的分析工作,當然這也是分析自然語言的基礎啦~~不過目前先不管博大精深的這塊啦!

好~~所以這次我們就要來練習一下:中文的詞語分析及使用頻率統計

使用python要完成以上目標,有多簡單、便捷呢~~底下就紀錄、分享供參囉!

要完成這次的中文分詞(斷詞)工作,我們可以使用這組強大的中文斷詞工具:jieba(結巴?)

同樣的~~我們先上完整程式碼,再做說明吧!

編輯前,記得先將「jieba」安裝起來:pip install jieba

# 使用 jieba 中文分詞程式
import jieba

# jieba.load_userdict('userdict.txt')   # 可視需要引入自定義詞語庫
text = "Ubuntu是以桌面應用為主的Linux發行版," \
       "相當受到Linux使用者歡迎!" \
       "PyCharm是相當容易上手且功能強大、" \
       "實用的python IDE工具,可安裝在各種主要作業系統平台" \
       "在Ubuntu上也可以在軟體庫中找到免費的PyCharm CE 跟 EDU版本,供下載安裝!" \
       "安裝Ubuntu最新的LTS版本:20.04版後," \
       "即會預設安裝、更新至Python3.8的開發環境,相當方便!" \
       "但一切安裝完成後,便會發現在Ubuntu下" \
       "執行PyCharm編輯python程式時,會發現以下「怪怪」的情形"

w_dic = {}

words = jieba.cut(text)   # 呼叫jieba函式進行斷詞作業

### 逐詞建立 字詞:使用次數 字典檔
for w in words:
    if w not in w_dic:   # 若未出現過的字詞則建立新的字詞並設定使用次數為1
        w_dic[w] = 1
    else:
        w_dic[w] += 1

### 將大於二個字元的字詞及使用次數顯示出來查閱
for w in w_dic:
    if len(w) >= 2:
        print(w, w_dic[w])

程式說明部分,大部分在程式碼中都有做備註說明了!!所以也不用囉嗦佔篇幅~~~

執行結果如下:

以下只針對比較特殊的部分做一些心得分享:

1.由於jieba是由大陸團隊建置的,所以部分詞語可能會不夠精準,若想要(或避免)詞語上的誤判,可以將一些重要或常用的詞語建立在自定義的詞語庫檔案(如:userdict.txt)[記得該檔案須以utf-8編碼儲存]。引用自定義詞語庫方式,如程式碼第四行!(記得去除標記的 # 號喔)

userdict.txt檔案編輯方式為:一行一組詞語,如下:


2.若想要將結果依每個詞語的使用次數進行排序顯示(或應用),可將上列程式碼第26行之後的程式刪除,以下列程式碼取代即可:

w_dic_t = w_dic.items()    # 將字典檔轉為tuple(元組)

# 將(字詞, 次數)tuple,依使用次數由大到小重新排序
w_dic_s = sorted(w_dic_t, key=lambda x: x[1], reverse=True)

# 將排序後的(字詞, 次數)tuple:w_dic_s,依序將大於二個字元的詞語,次數條列出來
for w in w_dic_s:
    if len(w[0]) >= 2:
        print(w[0], w[1])

排序後顯示結果如下


好囉~~這次就記錄到這了.........881

诶~~~「文字雲」咧...........

吽~~~有了 「詞語、使用次數」 等資訊,如何藉由這些資訊去設計、呈現文字雲樣式,那就是介面設計的事了啦~~這裡就不討論了!乖.......呵!

沒有留言:

張貼留言