赞
踩
精确模式, 试图将句子最精确地切开,适合文本分析
全模式,把句子中所有的可以成词的词语都扫描出来,速度非常快,但是不能解决歧义
搜索引擎模式,在精确模式的基础上,对长词再词切分,提高召回率,适合用于搜索引擎分词
jiaba分词还支持繁体分词和支持自定义分词
在python2.x和python3.x均兼容,有以下三种:
全自动安装:easy_install jieba 或者 pip install jieba / pip3 install jieba
半自动安装: 先下载,网址为: http://pypi.python.org/pypi/jieba, 解压后运行: python setup.py install
手动安装: 将jieba目录放置于当前目录或者site-packages目录
jieba.cut:该方法接受三个输入参数:需要分词的字符串; cut_all 参数用来控制是否采用全模式;HMM参数用来控制是否适用HMM模型
jieba.cut_for_search:该方法接受两个参数:需要分词的字符串;是否使用HMM模型,该方法适用于搜索引擎构建倒排索引的分词,粒度比较细。
待分词的字符串可以是unicode或者UTF-8字符串,GBK字符串。注意不建议直接输入GBK字符串,可能无法预料的误解码成UTF-8,
jieba.cut 以及jieba.cut_for_search返回的结构都是可以得到的generator(生成器), 可以使用for循环来获取分词后得到的每一个词语或者使用
jieb.lcut 以及 jieba.lcut_for_search 直接返回list
jieba.Tokenizer(dictionary=DEFUALT_DICT) 新建自定义分词器,可用于同时使用不同字典,jieba.dt为默认分词器,所有全局分词相关函数都是该分词器的映射
jieba.posseg.cut进行词性标注
import jieba import jieba.posseg sentence = '如果你浪费了自己的年龄,那是挺可悲的。因为你的青春只能持续一点儿时间,很短的一点儿时间。——王尔德' # .cut(分词内容,分词模式(全模式,精模式,搜索引擎模式)) # True表示全模式,默认是精准模式 vocabulary = jieba.cut(sentence, cut_all=False) # 精准模式 # 对象是一个生成器,需要迭代输出 print('/'.join(vocabulary)) for i in vocabulary: print(i) vocabulary1 = jieba.cut(sentence, cut_all=True) # 全模式 # 对象是一个生成器,需要迭代输出 print('/'.join(vocabulary1)) for i in vocabulary1: print(i) vocabulary2 = jieba.cut_for_search(sentence) # 搜索引擎模式 print('/'.join(vocabulary2)) for j in vocabulary2: print(j) vocabulary3 = jieba.lcut(sentence) # 返回一个列表 print(vocabulary3) vocabulary4 = jieba.lcut_for_search(sentence) # 返回一个列表 print(vocabulary4) # 词性标注 vocabulary5 = jieba.posseg.cut(sentence) # .word词语 # .flag词性 for item in vocabulary5: print(item.word+'------'+item.flag) ''' a: 形容词 c:连词 d:副词 e:叹词 f:方位词 i:成语 m:数词 n:名词 nr:人名 ns:地名 nz:其它专有名词 p:介词 r:代词 t:时间 u:助词 w:标点符号 un:未知词语 ''' # 输出 ''' 如果/你/浪费/了/自己/的/年龄/,/那/是/挺/可悲/的/。/因为/你/的/青春/只能/持续/一点儿/时间/,/很/短/的/一点儿/时间/。/—/—/王尔德 如果/你/浪费/了/自己/的/年龄///那/是/挺/可悲/的///因为/你/的/青春/只能/持续/一点/一点儿/点儿/儿时/时间///很/短/的/一点/一点儿/点儿/儿时/时间/王尔德/尔德 如果/你/浪费/了/自己/的/年龄/,/那/是/挺/可悲/的/。/因为/你/的/青春/只能/持续/一点/点儿/一点儿/时间/,/很/短/的/一点/点儿/一点儿/时间/。/—/—/尔德/王尔德 ['如果', '你', '浪费', '了', '自己', '的', '年龄', ',', '那', '是', '挺', '可悲', '的', '。', '因为', '你', '的', '青春', '只能', '持续', '一点儿', '时间', ',', '很', '短', '的', '一点儿', '时间', '。', '—', '—', '王尔德'] ['如果', '你', '浪费', '了', '自己', '的', '年龄', ',', '那', '是', '挺', '可悲', '的', '。', '因为', '你', '的', '青春', '只能', '持续', '一点', '点儿', '一点儿', '时间', ',', '很', '短', '的', '一点', '点儿', '一点儿', '时间', '。', '—', '—', '尔德', '王尔德'] 如果------c 你------r 浪费------n 了------ul 自己------r 的------uj 年龄------n ,------x 那------r 是------v 挺------d 可悲------a 的------uj '''
jieba分词器还有一个方便的地方是开发者可以指定自己的自定义词典,以便包含词库中没有的词,虽然jieba分词有新词识别能力,但是自行添加新词可以保证更高的正确率。
使用命令:
jieba.load_userdict(filename) # filename为自定义词典的路径
在使用的时候,词典的格式和jieba分词器本身的分词器中的词典格式必须保持一致,一个词占一行,每一行分成三部分,一部分为词语,一部分为词频,最后为词性(可以省略),用空格隔开。下面其中userdict.txt中的内容为小修添加的词典,而第二部分为没有添加字典之后对text文档进行分词得到的结果,第三部分为添加字典之后分词的效果
import jieba import jieba.posseg sentence = '如果你浪费了自己的年龄,那是挺可悲的。因为你的青春只能持续一点儿时间,很短的一点儿时间。——王尔德' # 手动添加自己的词典 with open('E:/新建文件夹/lib/site-packages/jieba/dict2.txt', encoding='utf-8') as f: print(f.read()) vocabulary6 = jieba.cut(sentence) print('/'.join(vocabulary6)) # 加载自己添加的词典 jieba.load_userdict("E:/新建文件夹/lib/site-packages/jieba/dict2.txt") vocabulary7 = jieba.cut(sentence) print('/'.join(vocabulary7)) # 输出 ''' 如果你 3 nt 自己的年龄 3 nt 可悲 2 n 如果/你/浪费/了/自己/的/年龄/,/那/是/挺/可悲/的/。/因为/你/的/青春/只能/持续/一点儿/时间/,/很/短/的/一点儿/时间/。/—/—/王尔德 如果/你/浪费/了/自己的年龄/,/那/是/挺/可悲/的/。/因为/你/的/青春/只能/持续/一点儿/时间/,/很/短/的/一点儿/时间/。/—/—/王尔德 '''
import jieba.analyse
jieba.analyse.extract_tags(sentence, topK=20, withWeight=False, allowPOS=())
#sentence为待提取的文本
#topK 为返回几个TF/IDF权值最大的词语, 默认值是20
#withWeight 为是否一起返回关键词的权重
#allowPOS 指仅包含指定词性的词语,默认值是空,既不筛选
import jieba.analyse data = open("D:/数据/圣女的救济.txt", 'r', encoding='utf-8').read() tag1 = jieba.analyse.extract_tags(data, 10) print(tag1) # 返回权重 for x, w in jieba.analyse.extract_tags(data, topK=10, withWeight=True): print("{} {}".format(x, w)) print() for x, w in jieba.analyse.textrank(data, topK=10, withWeight=True): print("{} {}".format(x, w)) ''' ['草薙', '绫音', '汤川', '宏美', '内海', '什么', '说道', '真柴', '太太', '咖啡'] 草薙 0.19677998625949678 绫音 0.10912344692572094 汤川 0.0723230339109579 宏美 0.0516228015901537 内海 0.04378835073257231 什么 0.032482532382338225 说道 0.030569084245059747 真柴 0.03041145242192223 太太 0.02962055696282584 咖啡 0.02644520953954082 草薙 1.0 绫音 0.8646603726750798 没有 0.44726461324817374 时候 0.3555402733408261 真柴 0.3545518779670063 说道 0.33229614465002283 太太 0.31255398187524175 先生 0.27649125274590153 内海 0.25320046866148554 咖啡 0.20036714256737032 '''
pip install wordcloud / pip3 install wordcloud
使用whl文件安装
wordcloud 类的定义如下所示:
class WordCloud(object):
def __init__(self, font_path=None, width=400, height=200, margin=2,
ranks_only=None, prefer_horizontal=.9, mask=None, scale=1,
color_func=None, max_words=200, min_font_size=4,
stopwords=None, random_state=None, background_color='black',
max_font_size=None, font_step=1, mode="RGB",
relative_scaling=.5, regexp=None, collocations=True,
colormap=None, normalize_plurals=True):
pass
常用的参数含义:
font_path : string //字体路径,需要展现什么字体就把该字体路径+后缀名写上,如:font_path = '黑体.ttf' width : int (default=400) //输出的画布宽度,默认为400像素 height : int (default=200) //输出的画布高度,默认为200像素 prefer_horizontal : float (default=0.90) //词语水平方向排版出现的频率,默认 0.9 (所以词语垂直方向排版出现频率为 0.1 ) mask : nd-array or None (default=None) //如果参数为空,则使用二维遮罩绘制词云。如果 mask 非空,设置的宽高值将被忽略,遮罩形状被 mask 取代。除全白(#FFFFFF)的部分将不会绘制,其余部分会用于绘制词云。如:bg_pic = imread('读取一张图片.png'),背景图片的画布一定要设置为白色(#FFFFFF),然后显示的形状为不是白色的其他颜色。可以用ps工具将自己要显示的形状复制到一个纯白色的画布上再保存,就ok了。 scale : float (default=1) //按照比例进行放大画布,如设置为1.5,则长和宽都是原来画布的1.5倍。 min_font_size : int (default=4) //显示的最小的字体大小 font_step : int (default=1) //字体步长,如果步长大于1,会加快运算但是可能导致结果出现较大的误差。 max_words : number (default=200) //要显示的词的最大个数 stopwords : set of strings or None //设置需要屏蔽的词,如果为空,则使用内置的STOPWORDS background_color : color value (default=”black”) //背景颜色,如 background_color='white',背景颜色为白色。 max_font_size : int or None (default=None) //显示的最大的字体大小 mode : string (default=”RGB”) //当参数为“RGBA”并且background_color不为空时,背景为透明。 relative_scaling : float (default=.5) //词频和字体大小的关联性 color_func : callable, default=None //生成新颜色的函数,如果为空,则使用 self.color_func regexp : string or None (optional) //使用正则表达式分隔输入的文本 collocations : bool, default=True //是否包括两个词的搭配 colormap : string or matplotlib colormap, default=”viridis” //给每个单词随机分配颜色,若指定color_func,则忽略该方法。 fit_words(frequencies) //根据词频生成词云 generate(text) //根据文本生成词云 generate_from_frequencies(frequencies[, ...]) //根据词频生成词云 generate_from_text(text) //根据文本生成词云 process_text(text) //将长文本分词并去除屏蔽词(此处指英语,中文分词还是需要自己用别的库先行实现,使用上面的 fit_words(frequencies) ) recolor([random_state, color_func, colormap]) //对现有输出重新着色。重新上色会比重新生成整个词云快很多。 to_array() //转化为 numpy array to_file(filename) //输出到文件
from wordcloud import WordCloud import matplotlib.pyplot as plt # 绘制图像的模块 import jieba # jieba分词 data = open("D:/数据/圣女的救济.txt", 'r', encoding='utf-8').read() # 结巴分词,生成字符串,wordcloud无法直接生成正确的中文词云 cut_text = " ".join(jieba.cut(data)) # 设置字体,不然会出现文字乱码,文字的路径是电脑的字体一般路径,可以换成别的 # 设置了背景,宽高 wordcloud = WordCloud(font_path="simhei.ttf", background_color="white", width=1000, height=880).generate(cut_text) # simhei.ttf黑体常规 plt.imshow(wordcloud, interpolation="bilinear") plt.axis("off") # 存储图像 wordcloud.to_file('圣女的救济.png') # 设置保存路径 plt.show()
给词云加上图片背景
from os import path from PIL import Image from wordcloud import WordCloud, ImageColorGenerator import matplotlib.pyplot as plt import numpy as np import jieba def GetWordCloud(): path_txt = 'D:/数据/圣女的救济.txt' path_img = "test.jpg" f = open(path_txt, 'r', encoding='utf-8').read() background_image = np.array(Image.open(path_img)) # join() 方法用于将序列中的元素以指定的字符连接生成一个新的字符串 cut_text = " ".join(jieba.cut(f)) # mask参数=图片背景,必须要写上,另外有mask参数再设定宽高是无效的 wordcloud = WordCloud(font_path="simhei.ttf", background_color="white", mask=background_image).generate(cut_text) # 生成颜色值 image_colors = ImageColorGenerator(background_image) # 下面代码表示显示图片 plt.imshow(wordcloud.recolor(color_func=image_colors), interpolation="bilinear") # 获得模块所在的路径的 d = path.dirname(__file__) # os.path.join(): 将多个路径组合后返回 wordcloud.to_file(path.join(d, "圣女的救济1.png")) plt.axis("off") plt.show() if __name__ == '__main__': GetWordCloud()
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。