结巴(jieba)分词器入门

安装jieba

# pip install jieba

分词工具

import jieba
input="我来到北京大学"
seg_list=jieba.cut(input)
print("默认精确模式:"+"/".join(seg_list))
seg_list=jieba.cut(input,cut_all=True)
print("全模式:"+"/".join(seg_list))
默认精确模式:我/来到/北京大学
全模式:我/来到/北京/北京大学/大学

导入自定义的字典

# 不导入自定义的字典,有可能会导致分词结果不是自己想要的
input="故宫的著名景点包括乾清宫、太和殿和黄琉璃瓦等"
seg_list=jieba.cut(input)
print("精确模式:"+"/".join(seg_list))
seg_list=jieba.cut(input,cut_all=True)
print("全模式:"+"/".join(input))
精确模式:故宫/的/著名景点/包括/乾/清宫/、/太和殿/和/黄/琉璃瓦/等
全模式:故/宫/的/著/名/景/点/包/括/乾/清/宫/、/太/和/殿/和/黄/琉/璃/瓦/等

乾/清宫 被拆开了,我们想要的是乾清宫

导入自定义的字典

jieba.load_userdict("./data/mydict.txt")
#如果词比较少那么也可以用
#jieba.add_word("乾清宫")
seg_list=jieba.cut(input)
print("精确模式:"+"/ ".join(seg_list))
seg_list=jieba.cut(input,cut_all=True)
print("全模式"+" / ".join(seg_list))
精确模式:故宫/ 的/ 著名景点/ 包括/ 乾清宫/ 、/ 太和殿/ 和/ 黄琉璃瓦/ 等
全模式故宫 / 的 / 著名 / 著名景点 / 景点 / 包括 / 乾清宫 / 清宫 / 、 / 太和 / 太和殿 / 和 / 黄琉璃瓦 / 琉璃 / 琉璃瓦 / 等

乾清宫精确模式和全模式都被顺利拆分出来了

提取关键词

import jieba.analyse
tags=jieba.analyse.extract_tags(input,topK=5)
print("关键词"+" / ".join(tags))
# 打印出关键词的权重
tags=jieba.analyse.extract_tags(input,topK=5,withWeight=True)
for tag,weight in tags:
    print('{}-{}'.format(tag,weight))
关键词著名景点 / 乾清宫 / 黄琉璃瓦 / 太和殿 / 故宫
著名景点-2.3167796086666668
乾清宫-1.9924612504833332
黄琉璃瓦-1.9924612504833332
太和殿-1.6938346722833335
故宫-1.5411195503033335

词性标注

import jieba.posseg as pseg
words=pseg.cut(input)
for word,flag in words:
    print('{}-{}'.format(word,flag))
故宫-n
的-uj
著名景点-n
包括-v
乾清宫-n
、-x
太和殿-nr
和-c
黄琉璃瓦-n
等-u

词云展示

import jieba
from wordcloud import WordCloud
import imageio
from collections import Counter
import matplotlib.pyplot as plt

def getFileContent(path):
    with open(path,'r',encoding='utf-8') as f:
        return f.read()

input=getFileContent('./data/19Congress.txt')
# 停止词
stop_text=getFileContent('./data/stopwords.txt')

stopwords={line.strip() for line in stop_text}


data={}

seg_list=jieba.cut(input,cut_all=False)

for word in seg_list:
    if len(word)>=2:
        if not data.__contains__(word):
            data[word]=0
        data[word]+=1
word_clouds=WordCloud(
    background_color='white',#背景
    max_words=400,
    width=600,
    height=400,
    mask=imageio.imread('./data/mapofChina.jpg'), #背景图
    stopwords=stopwords,
    font_path=r'./data/SimHei.ttf', # 字体
).generate_from_frequencies(data)
    
plt.figure(figsize=(18,16))
plt.imshow(word_clouds)
plt.axis(False)
plt.show()
word_clouds.to_file("test.jpg") # 输出到文件

image-20200923221335693

posted @ 2020-09-23 22:31  入门小站  阅读(655)  评论(0编辑  收藏  举报