需要使用python的jieba模块,安装可以使用pip install jieba
关于jieba,支持三种分词模式:
精确模式,试图将句子最精确地切开,适合文本分析;
全模式,把句子中所有的可以成词的词语都扫描出来, 速度非常快,但是不能解决歧义;
搜索引擎模式,在精确模式的基础上,对长词再次切分,提高召回率,适合用于搜索引擎分词。
支持繁体分词
支持自定义词典
1。三种模式
import jieba
sen = '今天来到了北京天安门看追风筝的人'
words1 = jieba.cut_for_search(sen)#搜索引擎模式,false为精准模式,默认为全模式
words2 = jieba.cut(sen,cut_all=False)#精准模式
words3 = jieba.cut(sen,cut_all=True)#默认模式,全模式
words4 = jieba.cut(sen)#默认模式
for i in words1:
print(i)
print('........')
for i in words2:
print(i)
print('........')
for i in words3:
print(i)
print('........')
for i in words4:
print(i)
输出结果如下,对比分析,默认模式是全模式,全模式将所有可能成为的词均拆分,搜索引擎模式在精准模式的基础上再对词进行细化。:
今天
来到
了
北京
天安
天安门
看
追
风筝
的
人
........
今天
来到
了
北京
天安门
看
追
风筝
的
人
........
今天
来到
了
北京
天安
天安门
看
追风
风筝
的
人
........
今天
来到
了
北京
天安门
看
追
风筝
的
人
2。词性
import jieba.posseg
sen = '今天来到了北京天安门看追风筝的人'
words4 = jieba.posseg.cut(sen)#默认模式
for i in words4:
print(i.word+' '+i.flag)#获得词+词性
结果:
今天 t
来到 v
了 ul
北京 ns
天安门 ns
看 v
追 v
风筝 n
的 uj
人 n
各个词性字母的含义可以参考:jieba词性表
可以使用jieba.load_userdict('[文件词目录]')
加载字典
使用jieba.analyse.extract_tags()
获取词频,如:
爬取丰乳肥臀这本书,进行分析其词频
text_path = open('/Users/wangxingfan/Desktop/1.txt').read()
tag = jieba.analyse.extract_tags(text_path,20)
print(tag)
结果:
['上官', '母亲', '司马', '金童', '来弟', '一样', '哑巴', '地说', '一个', '女人', '乳房', '鸟儿', '我们', '吕氏', '大姐', '起来', '看到', '娜塔莎', '他们', '身体']
3。词云
使用urllib库爬取莫言老师作品《丰乳肥臀》并制作词云。
#-*- coding:utf-8 -*-
#author:M10
import urllib.request
import re
import time
import random
from wordcloud import WordCloud
import matplotlib.pyplot as plt
import jieba.analyse
header = {
'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.186 Safari/537.36'
}
path = open('/Users/wangxingfan/Desktop/1.txt', 'wb')
for j in range(1,84):
url = 'http://t.icesmall.cn/book/3/424/'+str(j)+'.html'
request = urllib.request.Request(url,headers=header)
data = urllib.request.urlopen(request).read().decode('utf-8','ignore')
pat = '<p><p>(.*?)</p> </div>'
text = re.findall(pat,data)
try:
zi = text[0].split('</p><p></p><p>')
except:
pass
for i in range(0,len(zi)):
path.write(zi[i].encode('utf-8'))
time.sleep(random.randint(1,3))
path.close()
#词云
text_path = open('/Users/wangxingfan/Desktop/1.txt').read()
wordlist_after_jieba = jieba.cut(text_path)#使用默认的精准模式
wl_space_split = " ".join(wordlist_after_jieba)
cloud = WordCloud(
#设置字体,不指定就会出现乱码
font_path=r'/Library/Fonts/Songti.ttf',
#允许最大词汇
max_words=2000,
#最大号字体
max_font_size=40
)
my_wordcloud = WordCloud().generate(wl_space_split)
plt.imshow(my_wordcloud)
plt.axis("off")
plt.show()
结果出现中文不能显示,查找问题得知:使用中文词库作为参数添加到font_path即可。