使用python進行簡單的分詞與詞云

2021-08-07 06:18:08 字數 4359 閱讀 6109

目標:

匯入乙個文字檔案

使用jieba對文字進行分詞

使用wordcloud包繪製詞云

環境:python 3.6.0 |anaconda 4.3.1 (64-bit)

工具:

jupyter notebook

分詞使用最流行的分詞包jieba,參考:

詞云使用wordcloud包,參考:

這兩個包都不是anaconda自帶的,需要按官網的步驟安裝。

in [1]:

import

wordcloud

aswc

import

jieba

import

matplotlib.pyplot

asplt

from

scipy.misc

import

imread

%matplotlib inline

plt.rc(

'figure'

,figsize=(

15,15))

首先讀取檔案,儲存到乙個字串物件中。

in [2]:

all_text

=open

(file

='老九門.txt'

,encoding

='utf-8').

read

()

檢視一下字串的內容,發現其中有很多多餘的字元:'\n'、'\u3000'。

in [3]:

all_text

'\ufeff《盜墓筆記》中,一段與二月紅有關的故事。\n《老九門》壹:二月紅①\n絲帳許久沒有換過了。\n\u3000\u3000她半夜入不了眠,睜開眼睛,便看到床邊垂下的帳面,在月光下看著有一死暗淡。原來可是絲絲的帶著光亮,好像最白的銀拉出來的絲一般。\n\u3000\u3000果然再好的東西,也總是由好往壞了去。\n\u3000\u3000以往一過立秋,... ...《以下省略》
在分詞之前先把這些多餘字元剔除掉。

in [4]:

all_text

=all_text

.replace('

\n',''

)all_text

=all_text

.replace('

\u3000',

'')

下面先嘗試做一次分詞,把所有分詞用空格分開,輸出看一下分詞的結果:

in [6]:

seg_list

=jieba

.cut

(all_text

,cut_all

=false

)words

=' '

forseg

inseg_list

:words

=words

+seg

+' '

print

(words

)

 《 盜墓 筆記 》 中 , 一段 與 二月 紅 有關 的 故事 。 《 老 九門 》 壹 : 二月 紅 ① 絲帳 許久 沒有 換過 了 。 她 半夜 入 不了 眠 , 睜開眼睛 , 便 看到 床邊 垂下 的 帳面 , 在 月光 下 看著 有 一死 暗淡 。 原來 可是 絲絲 的 帶 著 光亮 , 好像 最白 的 銀拉 出來 的 絲 一般 。 果然 再 好 的 東西 , 也 總是 由 好 往壞 了 去 。 以往 一過 立秋 , 她 就 會 親自 拆 下 這塊 帳頭 , 親自 去 漂洗 , 她 知道 這 東西 的 脾氣 , 得 小心 伺候 著 , 一寸 一寸 地過 水 。 如今 不讓 她 下床 , 這 東西 沒 人 伺候 了 , 倒 也 顯得 越來越 不值 當 被 這麼 細心 對待 起來 。 也許 , 下 乙個 立秋 的 時候 , 才 有人 敢動 這個 東西 , 但 那個 人 , 必然 不是 自己 了 。 中午 大夫 和 他 說 的 那些 話 , 雖然 是 在 屋外 , 但是 她 還是 聽到 了 幾分 , 自己 的 病 , 不 知道 還有 多少 日子 可熬 。 她 舒 了 口氣 , 胸中 的 那絲 痛楚 似乎 好 了 一些 。 多少 日... ...《以下省略》
從分詞結果裡可以發現,有一些固定詞語,例如「盜墓筆記」、「老九門」、「二月紅」、「張大佛爺」、「齊鐵嘴」等書名、人名被分開了。在這篇**的環境下,這些才成為固定詞語,而預設的分詞策略根據通常的認識來分詞的。

針對這個情況,jieba有乙個「使用者詞典」的機制,把使用者認為應該成為整詞的,放到詞典裡,在分詞的時遇到它們,就會當作乙個整體。

老九門二月紅

盜墓筆記

張大佛爺

解九爺解九

狗五以下為jieba引入這個詞典檔案,再做一次分詞:

in [7]:

jieba

.load_userdict

('dict.txt'

)all_seg

=jieba

.cut

(all_text

,cut_all

=false

)all_word

=' '

forseg

inall_seg

:all_word

=all_word

+seg

+' '

print

(all_word

)

 《 盜墓筆記 》 中 , 一段 與 二月紅 有關 的 故事 。 《 老九門 》 壹 : 二月紅 ① 絲帳 許久 沒有 換過 了 。 她 半夜 入 不了 眠 , 睜開眼睛 , 便 看到 床邊 垂下 的 帳面 , 在 月光 下 看著 有 一死 暗淡 。 原來 可是 絲絲 的 帶 著 光亮 , 好像 最白 的 銀拉 出來 的 絲 一般 。 果然 再 好 的 東西 , 也 總是 由 好 往壞 了 去 。 以往 一過 立秋 , 她 就 會 親自 拆 下 這塊 帳頭 , 親自 去 漂洗 , 她 知道 這 東西 的 脾氣 , 得 小心 伺候 著 , 一寸 一寸 地過 水 。 如今 不讓 她 下床 , 這 東西 沒 人 伺候 了 , 倒 也 顯得 越來越 不值 當 被 這麼 細心 對待 起來 。 也許 , 下 乙個 立秋 的 時候 , 才 有人 敢動 這個 東西 , 但 那個 人 , 必然 不是 自己 了 。 中午 大夫 和 他 說 的 那些 話 , 雖然 是 在 屋外 , 但是 她 還是 聽到 了 幾分 , 自己 的 病 , 不 知道 還有 多少 日子 可熬 。 她 舒 了 口氣 , 胸中 的 那絲 痛楚 似乎 好 了 一些 。 多少 日子 了 ?... ...《以下省略》
從這個結果來看,就不會再把人名、書名分開了。

以下開始製作詞云。

製作詞云,使用的是wordcloud包,由兩個引數需要特別注意,乙個是字型,乙個是背景。字型好理解,就不解釋了。背景,是詞云顯示的背景形狀。這裡選用了乙個心形圖案。

以下是詞云製作過程:

in [8]:

# 引入字型

font

=r"c:\windows\fonts\simhei.ttf"

#讀取背景,生成矩陣

)# 生成詞云物件,設定引數

cloud=wc

.wordcloud

(font_path

=font

,#設定字型

background_color

="black"

,#背景顏色

max_words

=2000

,# 詞云顯示的最大詞數

mask

=color_mask

,#設定背景

max_font_size

=100

,#字型最大值

random_state=42

)# 繪製詞雲圖

# 把詞雲圖儲存到磁碟檔案中

mywc

.to_file

('老九門wordcloud.png'

)

以上就是使用python進行分詞,並繪製詞雲圖的簡單操作。對於jieba和wordcloud的更高階的使用方法,還需要進一步研究和學習。

使用Rwordseg進行分詞

1 文字簡介 wc text.txt 0 121467 4694908 2 使用rwordseg進行文字挖掘。1 使用r library rwordseg require rwordseg text readlines text.txt 輸入 seg unlist segmentcn text 使用...

使用pyhanlp進行分詞

from pyhanlp import def my segment sentence seg hanlp.segment sentence seg2 list seg seg3 list map lambda x str x seg2 seg4 list map lambda x x.split ...

Python 使用jieba進行分詞並計算詞權重

import jieba import xlrd import jieba.analyse defstopwordslist filepath stopwords line.strip for line in open filepath,r encoding utf 8 readlines retu...