Python做中文分詞

2021-09-29 16:48:09 字數 4209 閱讀 3060

所謂分詞即是將文字序列按完整的意思切分成乙個乙個的詞兒,方便進行下一步的分析(詞頻統計,情感分析等)。

由於英文詞與詞自帶空格作為分隔符,相比於中文分詞要簡單的多。我們在做中文分詞時,需要把詞語從一整段話中篩出來,困難之處在於,漢語表達博大精深,一段話往往有不同的切分方法。

所幸這不是我們需要擔心的,python中的jieba庫提供了現成的解決方案:

import jieba

text=

"李小璐給王思聰買了微博熱搜。"

result=jieba.cut(text)

print

("切分結果: "

+","

.join(result)

)

jiaba呼叫了自己的分詞演算法,將切分好的文字按逗號分隔符分開,得到下面結果

切分結果:  李小璐,給,王思聰,買,了,微博熱,搜,。
可見切分結果不盡如人意,比較明顯的是,「微博」,「熱搜」就沒有被識別出來,其次有一些詞,比如「了」 「買」以及標點符號,顯然我們不想讓這些詞出現在詞云裡,因為它們本身沒什麼意義。

對於某些特別的名詞,為了使得其切分時不被分開,我們可以選擇在切分前強調一下這些名詞,比如:

import jieba

text=

"李小璐給王思聰買了微博熱搜。"

#強調特殊名詞

jieba.suggest_freq(

('微博'),

true

)jieba.suggest_freq(

('熱搜'),

true

)result=jieba.cut(text)

print

("切分結果: "

+","

.join(result)

)

切分結果:  李小璐,給,王思聰,買,了,微博,熱搜,。
還可以將特殊用詞加入使用者自定義詞典,實現相同的效果:

jieba.load_userdict(

"./utils/jieba_user_dict.txt"

)

jieba.load_userdict()

structure of dict

file

: word1 freq1 word_type1

word2 freq2 word_type2

...word type may be ignored

'''

文字清洗

切分之後一些特殊的符號會單獨成詞,這些詞會影響我們之後的分析。

對於「了」,「的」這樣長度為一的詞,顯然對我們分析文字沒有任何幫助。處理的方法為將長度為1的詞全部剔除掉。 示例

import jieba

#讀取標點符號庫

f=open

("utils/stopwords.txt"

,"r"

)stopwords=

.fromkeys(f.read(

).split(

"\n"))

f.close(

)#載入使用者自定義詞典

jieba.load_userdict(

"./utils/jieba_user_dict.txt"

)segs=jieba.cut(text)

mytext_list=

#文字清洗

for seg in segs:

if seg not

in stopwords and seg!=

" "and

len(seg)!=1

:" ",""

))cloud_text=

",".join(mytext_list)

繪製詞云

做好了中文分詞,下一步即是繪製詞云了。這裡我們使用了另乙個比較強大的庫wordcloud。

from wordcloud import wordcloud

wc = wordcloud(

background_color=

"white"

,#背景顏色

max_words=

200,

#顯示最大詞數

font_path=

"./font/wb.ttf"

,#使用字型

min_font_size=15,

max_font_size=

50,

width=

400#圖幅寬度

)wc.generate(cloud_text)

wc.to_file(

"pic.png"

)

wordcloud在生成物件時,提供了多個引數:

parameters |-

----

----

-| font_path : string

| 使用的字型庫

| width :

int(default=

400)

| 寬度

| height :

int(default=

200)

| 高度

| mask : nd-array or

none

(default=

none

) | scale :

float

(default=1)

| 圖幅放大、縮小係數

| min_font_size :

int(default=4)

| 最小的字元

| min_font_size :

int(default=4)

| 最大的字元

| max_words : number (default=

200)

| 最多顯示的詞數

| stopwords :

set of strings or

none

| 不需要顯示的詞

| background_color : color value (default=

"black"

)| 背景顏色 |.

在繪製詞云的時候,可以通過wordcloud的mask引數,可以指定詞圖的輪廓,繪製成各種形狀的。比如我們想用以上這張,wordcloud會識別出除純白的的部分作為輪廓。具體實現如下:

#載入需要使用的類庫

from pil import image

import numpy as np

from wordcloud import wordcloud, imagecolorgenerator

from matplotlib import pyplot as plt

#載入背景

cloud_mask = np.array(image.

open

("./bc_img/heart.jpeg"))

#忽略顯示的詞

st=set([

"東西"

,"這是"])

#生成wordcloud物件

PHP做中文分詞技術

今天做了個中文分詞技術,覺得好用,分享給大家試試好用嗎,我用的是thinkphp3.2.3框架做的,不知道大家喜歡用這個框架不。步驟如下 3 解壓scws類pscws.class.php,並加上命名空間 pscws4.class.php檔名換成了pscws.class.php xdb r.class...

python中文分詞 結巴分詞

中文分詞是中文文字處理的乙個基礎性工作,結巴分詞利用進行中文分詞。其基本實現原理有三點 基於trie樹結構實現高效的詞圖掃瞄,生成句子中漢字所有可能成詞情況所構成的有向無環圖 dag 採用了動態規劃查詢最大概率路徑,找出基於詞頻的最大切分組合 對於未登入詞,採用了基於漢字成詞能力的hmm模型,使用了...

python 中文分詞

英文單詞之間是以空格作為自然分界符的,而漢語是以字為基本的書寫單位,詞語之間沒有明顯的區分標記,因此,中文詞語分析是中文資訊處理的基礎與關鍵。分詞演算法可分為三大類 基於字典 詞庫匹配的分詞方法 基於詞頻度統計的分詞方法和基於知識理解的分詞方法。在基於字典 詞庫匹配的分詞方法中,又分為正向最大匹配 ...