所謂分詞即是將文字序列按完整的意思切分成乙個乙個的詞兒,方便進行下一步的分析(詞頻統計,情感分析等)。
由於英文詞與詞自帶空格作為分隔符,相比於中文分詞要簡單的多。我們在做中文分詞時,需要把詞語從一整段話中篩出來,困難之處在於,漢語表達博大精深,一段話往往有不同的切分方法。
所幸這不是我們需要擔心的,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 中文分詞
英文單詞之間是以空格作為自然分界符的,而漢語是以字為基本的書寫單位,詞語之間沒有明顯的區分標記,因此,中文詞語分析是中文資訊處理的基礎與關鍵。分詞演算法可分為三大類 基於字典 詞庫匹配的分詞方法 基於詞頻度統計的分詞方法和基於知識理解的分詞方法。在基於字典 詞庫匹配的分詞方法中,又分為正向最大匹配 ...