如何用Python作中文分詞?

打算繪製中文詞雲圖?那你得先學會如何作中文文本分詞。跟着咱們的教程,一步步用Python來動手實踐吧。git

需求

在《如何用Python作詞雲》一文中,咱們介紹了英文文本的詞雲製做方法。你們玩兒得可還高興?github

文中提過,選擇英文文本做爲示例,是由於處理起來最簡單。可是很快就有讀者嘗試用中文文本作詞雲了。按照前文的方法,你成功了嗎?編程

估計是不成功的。由於這裏面缺了一個重要的步驟。瀏覽器

觀察你的英文文本。你會發現英文單詞之間採用空格做爲強制分隔符。微信

例如:工具

Yes Minister is a satirical British sitcom written by Sir Antony Jay and Jonathan Lynn that was first transmitted by BBC Television between 1980 and 1984, split over three seven-episode series.post

可是,中文的文本就沒有這種空格區隔了。爲了作詞雲,咱們首先須要知道中文文本里面都有哪些「詞」。字體

你可能以爲這根本不是問題——我一眼就能看出詞和詞之間的邊界!編碼

對,你固然能夠。你能夠人工處理1句、100句,甚至是10000句話。可是若是給你100萬句話呢?雲計算

這就是人工處理和電腦自動化處理的最顯著區別——規模。

別那麼急着放棄啊,你能夠用電腦來幫忙。

你的問題應該是:如何用電腦把中文文本正確拆分爲一個個的單詞呢?

這種工做,專業術語叫作分詞。

在介紹分詞工具及其安裝以前,請確認你已經閱讀過《如何用Python作詞雲》一文,而且按照其中的步驟作了相關的準備工做,而後再繼續依照本文的介紹一步步實踐。

分詞

中文分詞的工具備不少種。有的免費,有的收費。有的在你的筆記本電腦裏就能安裝使用,有的卻須要聯網作雲計算。

今天給你們介紹的,是如何利用Python,在你的筆記本電腦上,免費作中文分詞。

咱們採用的工具,名稱頗有特色,叫作「 結巴分詞 」。

爲何叫這麼奇怪的名字?

讀完本文,你本身應該就能想明白了。

咱們先來安裝這款分詞工具。回到你的「終端」或者「命令提示符」下。

進入你以前創建好的demo文件夾。

輸入如下命令:

pip install jieba
複製代碼

好了,如今你電腦裏的Python已經知道該如何給中文分詞了。

數據

在《如何用Python作詞雲》一文中,咱們使用了英劇」Yes, minister「的維基百科介紹文本。此次咱們又從維基百科上找到了這部英劇對應的中文頁面。翻譯名稱叫作《是,大臣》。

將網頁正文拷貝下來以後,存入文本文件yes-minister-cn.txt,而且將這個文件移動到咱們的工做目錄demo下面。

好了,咱們有了用於分析的中文文本數據了。

先別忙着編程序。正式輸入代碼以前,咱們還須要作一件事情,就是下載一份中文字體文件。

請到 這個網址 下載simsun.ttf。

下載後,將這個ttf字體文件也移動到demo目錄下,跟文本文件放在一塊兒。

代碼

在命令行下,執行:

jupyter notebook
複製代碼

瀏覽器會自動開啓,而且顯示以下界面。

這裏還有上一次詞雲製做時我們的勞動成果。此時目錄下多了一個文本文件,是"Yes, Minister"的中文介紹信息。

打開這個文件,瀏覽一下內容。

咱們確認中文文本內容已經正確存儲。

回到Jupyter筆記本的主頁面。點擊New按鈕,新建一個筆記本(Notebook)。在Notebooks裏面,請選擇Python 2選項。

系統會提示咱們輸入Notebook的名稱。爲了和上次的英文詞雲製做筆記本區別,就叫它wordcloud-cn好了。

咱們在網頁裏惟一的代碼文本框裏,輸入如下3條語句。輸入後,按Shift+Enter鍵執行。

filename = "yes-minister-cn.txt"
with open(filename) as f:
 mytext = f.read()
複製代碼

而後咱們嘗試顯示mytext的內容。輸入如下語句以後,仍是得按Shift+Enter鍵執行。

print(mytext)
複製代碼

顯示的結果以下圖所示。

既然中文文本內容讀取沒有問題,咱們就開始分詞吧。輸入如下兩行語句:

import jieba
mytext = " ".join(jieba.cut(mytext))
複製代碼

系統會提示一些信息,那是結巴分詞第一次啓用的時候須要作的準備工做。忽略就能夠了。

分詞的結果如何?咱們來看看。輸入:

print(mytext)
複製代碼

你就能夠看到下圖所示的分詞結果了。

單詞之間已經再也不牢牢相連,而是用空格作了區隔,就如同英文單詞間的天然劃分同樣。

你是否是火燒眉毛要用分詞後的中文文本做詞雲了?

能夠,輸入如下語句:

from wordcloud import WordCloud
wordcloud = WordCloud().generate(mytext)
%pylab inline
import matplotlib.pyplot as plt
plt.imshow(wordcloud, interpolation='bilinear')
plt.axis("off"
複製代碼

激動地期待着中文詞雲的出現?

惋惜,你看到的詞雲是這個樣子的。

你是否是很是憤怒,以爲此次又掉坑裏了?

彆着急,出現這樣的結果,並非分詞或者詞雲繪製工具備問題,更不是由於我們的教程步驟有誤,只是由於字體缺失。詞雲繪製工具wordcloud默認使用的字體是英文的,不包含中文編碼,因此纔會方框一片。解決的辦法,就是把你以前下載的simsun.ttf,做爲指定輸出字體。

輸入如下語句:

from wordcloud import WordCloud
wordcloud = WordCloud(font_path="simsun.ttf").generate(mytext)
%pylab inline
import matplotlib.pyplot as plt
plt.imshow(wordcloud, interpolation='bilinear')
plt.axis("off")
複製代碼

此次你看到的輸出圖形就變成了這個樣子:

這樣一來,咱們就經過中文詞雲的製做過程,體會到了中文分詞的必要性了。

這裏給你留個思考題,對比一下這次生成的中文詞雲,和上次作出的英文詞雲:

這兩個詞雲對應的文本都來自維基百科,描述的是一樣一部劇,它們有什麼異同?從這種對比中,你能夠發現維基百科中英文介紹內容之間,有哪些有趣的規律?

討論

掌握了本方法後,你本身作出了一張什麼樣的中文詞雲圖?除了作詞雲之外,你還知道中文分詞的哪些其餘應用場景?歡迎留言,分享給你們。咱們共同交流討論。

喜歡請點贊。還能夠微信關注和置頂個人公衆號「玉樹芝蘭」(nkwangshuyi)

若是你對數據科學感興趣,不妨閱讀個人系列教程索引貼《如何高效入門數據科學?》,裏面還有更多的有趣問題及解法。

相關文章
相關標籤/搜索