日记大全

日记大全 > 句子大全

“结巴”中文分词:做最好的 Python(中文分词组件)

句子大全 2023-07-10 02:29:01
相关推荐

jieba是一个在中文自然语言处理中用的最多的工具包之一,它以分词起家,目前已经能够实现包括分词、词性标注以及命名实体识别等多种功能。既然Jieba是以分词起家,我们自然要首先学习Jieba的中文分词功能。Jieba提供了三种分词模式:

精确模式 : 在该模式下,Jieba会将句子进行最精确的切分全模式 : 把句子中所有可以成词的词语都扫描出来,优点在于该模式非常快,缺点也很明显,就是不能有效解决歧义的问题搜索引擎模式 :在精确模式的基础上,对长词进行再次切分,该模式适合用于搜索引擎构建索引的分词

import jieba

seg_list = jieba.cut("我来到北京清华大学", cut_all=True)

print("全模式: " + "/ ".join(seg_list)) # 全模式

seg_list = jieba.cut("我来到北京清华大学", cut_all=False)

print("精确模式: " + "/ ".join(seg_list)) # 精确模式

seg_list = jieba.cut("我来到北京清华大学") # 默认是精确模式

print(", ".join(seg_list))

str = "我是一个中国人"

word1 = jieba.cut_for_search(str) # 搜索引擎模式

for item in word1:

print(item)

OUT:

全模式: 我/ 来到/ 北京/ 清华/ 清华大学/ 华大/ 大学

精确模式: 我/ 来到/ 北京/ 清华大学

我, 来到, 北京, 清华大学

一个

中国

有些结巴词库并没有该词,所以有时需要添加自定义词典 添加自定义词典

# mydict.txt 内容

# 乾清宫 1 n # 词 分成1个 词性

# 黄琉璃瓦 1 n

jieba.load_userdict("./data/mydict.txt") #需UTF-8,可以在另存为里面设置

#也可以用jieba.add_word("乾清宫")

text = "故宫的著名景点包括乾清宫、太和殿和黄琉璃瓦等"

# 全模式

seg_list = jieba.cut(text, cut_all=True)

print(u"[全模式]: ", "/ ".join(seg_list))

# 精确模式

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

print(u"[精确模式]: ", "/ ".join(seg_list))

OUT:

[全模式]: 故宫/ 的/ 著名/ 著名景点/ 景点/ 包括/ 乾清宫/ 清宫/ / / 太和/ 太和殿/ 和/ 黄琉璃瓦/ 琉璃/ 琉璃瓦/ 等

[精确模式]: 故宫/ 的/ 著名景点/ 包括/ 乾清宫/ 、/ 太和殿/ 和/ 黄琉璃瓦/ 等

关键词抽取

import jieba.analyse

# 用于analyse这个包

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

print (u"分词结果:")

print ("/".join(seg_list))

text = "故宫的著名景点包括乾清宫、太和殿和黄琉璃瓦等"

#获取关键词

tags = jieba.analyse.extract_tags(text, topK=5) #前5 个

print (u"关键词:")

print (" ".join(tags))

OUT:

分词结果:

故宫/的/著名景点/包括/乾清宫/、/太和殿/和/黄琉璃瓦/等

关键词:

著名景点 乾清宫 黄琉璃瓦 太和殿 故宫

打印关键词

tags = jieba.analyse.extract_tags(text, topK=5, withWeight=True) #显示比重

for word, weight in tags:

print(word, weight)

OUT:

著名景点 2.3167796086666668

乾清宫 1.9924612504833332

黄琉璃瓦 1.9924612504833332

太和殿 1.6938346722833335

故宫 1.5411195503033335

词性标注

import jieba.posseg as pseg

words = pseg.cut("我爱北京天安门")

for word, flag in words:

print("%s %s" % (word, flag))

OUTL

我 r

爱 v

北京 ns

天安门 ns

词云展示

import jieba

from wordcloud import WordCloud

from scipy.misc import imread

from collections import Counter

import matplotlib.pyplot as plt

data={}

text_file = open("./data/19Congress.txt","r",encoding="utf-8")

text = text_file.read()

with open("./data/stopwords.txt",encoding="utf-8") as file:

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

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

for word in seg_list:

if len(word)>=2:

if not data.__contains__(word):

data[word]=0

data[word]+=1

#print(data)

my_wordcloud = WordCloud(

background_color="white", #设置背景颜色

max_words=400, #设置最大实现的字数

font_path=r"./data/SimHei.ttf", #设置字体格式,如不设置显示不了中文

mask=imread("./data/mapofChina.jpg"), #指定在什么图片上画

width=1000,

height=1000,

stopwords = stopwords

).generate_from_frequencies(data)

plt.figure(figsize=(18,16))

plt.imshow(my_wordcloud)

plt.axis("off")

plt.show() # 展示词云

my_wordcloud.to_file("result.jpg")

text_file.close()

阅读剩余内容
网友评论
相关内容
拓展阅读
最近更新