基于Python的jieba分词和词云展示

jieba分词是目前最好的python处理中文的词库,有三种模式:精确模式、全模式、搜索引擎模式,并且支持自定义词库。

本文词云根据读取txt文件,文件主要是招聘职位的词云统计及可视化,其中为了更好地展现词云的效果,我们创建了自定义词库和停用词库:

先简单说说精确模式,全模式,搜索引擎模式

精确模式和全模式相当于贪婪算法,即最大匹配与最小比配,精确模式是对句子进行越少的切分越好,且切分后无重复字;全模式是把句子中的词汇只要在词库中就显示出来,一般都有重复;对于搜索引擎模式,就纯属是字面意思了。以“这个暑假我和我的女朋友去上海东方明珠塔游玩”为例:

import jieba 

seg_list = jieba.cut("这个暑假我和我的女朋友去上海东方明珠塔游玩", cut_all=True)
print("【全模式】:" + "/ ".join(seg_list)) 
print(type(seg_list))

seg_list = jieba.cut("这个暑假我和我的女朋友去上海东方明珠塔游玩", cut_all=False)
print("【精确模式】:" + "/ ".join(seg_list)) 
print(type(seg_list))

seg_list = jieba.cut_for_search("这个暑假我和我的女朋友去上海东方明珠塔游玩")
print("【搜索引擎模式】:" + "/ ".join(seg_list)) 
print(type(seg_list))
【全模式】:这个/ 暑假/ 我/ 和/ 我/ 的/ 女朋友/ 朋友/ 去/ 上海/ 上海东方/ 海东/ 东方/ 东方明珠/ 方明/ 明珠/ 塔/ 游玩

【精确模式】:这个/ 暑假/ 我/ 和/ 我/ 的/ 女朋友/ 去/ 上海/ 东方明珠/ 塔/ 游玩

【搜索引擎模式】:这个/ 暑假/ 我/ 和/ 我/ 的/ 朋友/ 女朋友/ 去/ 上海/ 东方/ 方明/ 明珠/ 东方明珠/ 塔/ 游玩

generator是迭代器类型,简单的理解就是可以提高运行速度,不需占用内存。

如果使用jieba.lcut即返回一个list。

在说说自定义词库和停用词库:

自定义词库:分词技术不能正确切分的词汇,如"我来自江苏科技大学",jieba分词会切分成“我/ 来自/ 江苏/ 科技/ 大学”,那我希望让他切分成“我/来自/江苏科技大学”,那么我就可以把“江苏科技大学”这个词语自定义词库以便正确的切分。

停用词库:就是把不需要的词汇去掉,例如在一句话中可以有名词、动词。形容词等,通常我们在统计词云的时候需要的是名词,我们就可以去掉除了名词的其他词性,当然也可以去掉具体的某些词。

好了基本定义大概就是这些,下边我们进行词云展示

import jieba 
#用来获取文档的路径
from os import path  
from PIL import Image 
import matplotlib.pyplot as plt 
#词云生成工具 
from wordcloud import WordCloud,ImageColorGenerator 

#导入自定义词典
jieba.load_userdict(u'../data/newdict.txt') 
stopwords_path=r'../data/namestop.txt'
f = open(u'../data/name.txt','r',encoding='utf8').read() 
def jiebaclearText(text): 
    
    #定义一个空的列表,将去除的停用词的分词保存 
    mywordList=[] 
    seg_list=jieba.cut(text,cut_all=False)
    #将一个generator的内容用/连接 
    listStr='/'.join(seg_list)  
    #打开停用词表
    f_stop=open(stopwords_path,encoding="utf8") 
    try: 
        f_stop_text = f_stop.read() 
    finally: 
        #关闭资源 
        f_stop.close() 
    
    #将停用词格式化,用\n分开,返回一个列表
    f_stop_seg_list=f_stop_text.split("\n") 
    print(f_stop_seg_list)
    a = listStr.split('/')
    #对默认模式分词的进行遍历,去除停用词 
    for myword in a: 
        if myword not in f_stop_seg_list: 
            mywordList.append(myword) 
    return ' '.join(mywordList) 

text1=jiebaclearText(f)
#加载字体
font = r'Font/simhei.ttf'
wordcloud = WordCloud( background_color="white", #设置背景为白色,默认为黑色 
                      width=1500, #设置图片的宽度 
                      height=960,#设置图片的高度 
                      margin=10, #设置图片的边缘 
                      font_path=font,
                      collocations=False
                     ).generate(text1) 
plt.imshow(wordcloud)
# 消除坐标轴 
plt.axis("off") 
# 展示图片 
plt.show() 
# 保存图片 
wordcloud.to_file('../Image/name.png')

产生的词云如下:

基于Python的jieba分词和词云展示_第1张图片

 

 

你可能感兴趣的:(自然语言处理)