Python做中文分词

中文分词

所谓分词即是将文本序列按完整的意思切分成一个一个的词儿,方便进行下一步的分析(词频统计,情感分析等)。

由于英文词与词自带空格作为分隔符,相比于中文分词要简单的多。我们在做中文分词时,需要把词语从一整段话中筛出来,困难之处在于,汉语表达博大精深,一段话往往有不同的切分方法。

所幸这不是我们需要担心的,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. 切分之后一些特殊的符号会单独成词,这些词会影响我们之后的分析。
  2. 对于“了”,“的”这样长度为一的词,显然对我们分析文本没有任何帮助。处理的方法为将长度为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:
        mytext_list.append(seg.replace(" ",""))
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对象
wc = WordCloud(background_color="white", 
    mask=cloud_mask,
    max_words=200,
    font_path="./font/wb.ttf",
    min_font_size=15,
    max_font_size=50, 
    width=400, 
    stopwords=st)
wc.generate(cloud_text)
wc.to_file("pic.png")

在这里插入图片描述

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值