基于jieba分词的新闻文本词云生成

目录

(1)实验背景

(2)实验简介

(3)实验素材

(4)实验步骤

(1)实验背景

jieba是一个用于中文文本处理的Python库,特别擅长分词;分词是将连续的文本分割成一个个独立的词语的过程,这是许多自然语言处理任务的预处理步骤。

词云是一种可视化工具,用于显示文本数据中出现的词频。在词云中,出现频率更高的词会显示得更大,这使得用户可以一眼看出文本中的主要主题和关键词。

(2)实验简介

本实验使用Python的jieba库对指定文本进行分词和停用词过滤,然后统计每个词语的出现频率,筛选出关键词,并利用WordCloud库生成词云图,以直观地展示文本中的主题和关键词。

(3)实验素材

a. xinwen.txt(新闻文本,可自行查找文章)

b. heart1.jpg

c.stopword.txt(停用词表链接:https://github.com/goto456/stopwords

(4)实验步骤

1、导入实验所需的库。其中,jieba库用于进行中文分词和词云的生成,WordCloud库用于生成词云,matplotlib库用于读取图片。同时读取一张名为"heart1.jpg"的图片,并将其存储在变量mask中,该图片将被用作生成词云的形状模板。

from wordcloud import WordCloud
from matplotlib.pyplot import imread
import jieba
mask = imread(r"heart1.jpg", 0) # 读取图片

2、定义一个名为stopwordslist的函数,其作用是从指定的文件中读取停用词并创建一个停用词列表。停用词通常是在文本中频繁出现但并不包含实质性信息的词,例如"的"、"和"、"是"等。在进行文本分析时,我们通常会将这些词从文本中过滤掉,以便更好地关注那些包含有用信息的词。

# 创建停用词list
def stopwordslist(filepath):
    stopwords = [line.strip () for line in open ( filepath, 'r' , encoding='UTF-8').readlines ()]
    return stopwords

3、定义seg_sentence函数,它的作用是对输入的句子进行分词,并去除停用词。

# 对句子进行分词
def seg_sentence(sentence):
    sentence_seged = jieba.cut ( sentence.strip () )
    stopwords = stopwordslist ( r"stopword.txt" )  # 这里加载停用词的路径
    outstr = ''
    for word in sentence_seged:
        if word not in stopwords:
            if word != '\t':
                outstr += word
                outstr += " "
    return outstr

4、读取名为"xinwen.txt"的输入文件,对文件中的每一行进行分词和停用词过滤处理,然后将处理后的结果写入名为"ai_after.txt"的输出文件。具体来说,它首先打开输入文件和输出文件,然后对输入文件中的每一行调用前面定义的seg_sentence函数进行处理,再将处理后的结果写入输出文件。最后,关闭输入文件和输出文件。

inputs = open ( r"xinwen.txt", 'r' , encoding='UTF-8')  # 加载要处理的文件的路径
outputs = open ( r"ai_after.txt", 'w' , encoding='UTF-8')  # 加载处理后的文件路径
for line in inputs:
    line_seg = seg_sentence ( line )  # 这里的返回值是字符串
    outputs.write ( line_seg )
outputs.close ()
inputs.close ()

5、将经过分词和停用词过滤处理后的文本中的所有词语存入一个列表。这里首先创建一个空列表,然后打开名为"ai_after.txt"的文件,对文件内容进行分词处理,最后将分词后的每一个词语添加到列表中。这样,我们就得到了一个包含所有词语的列表,可以用于后续的词频统计和词云生成等操作。

# 对分词进行列表存放
list = []
with open ( r"ai_after.txt", 'r' , encoding='UTF-8') as fr:  # 读入已经去除停用词的文件
    data = jieba.cut ( fr.read () )
    for i in data:
        list.append(i)

6、统计分词后的每个词语的出现次数,并将结果写入ai_count文件。

# 统计分词的个数
new_list = []
for i in list:
    if i not in new_list:
        new_list.append(i)
with open ( r"ai_count.txt", 'w' , encoding='UTF-8') as fw:  # 读入存储wordcount的文件路径
    for k in new_list:
        fw.write ( '%s,%d\n'% (k,list.count(k))) # 提取关键词

7、筛选出关键词并将其写入一个新的文件。这里的关键词定义为:长度至少为2并且在文本中出现至少两次的词。

# 去除一些非关键字
for i in list:
    with open ( r"ai_yun.txt", 'w' , encoding='UTF-8') as fw:  # 读入存储wordcount的文件路径
        for k in list:
            if len(k)>=2 and list.count(k)>=2 :
                fw.write ( '%s\n'% (k)) # 将符合条件的关键字写入txt

8、使用WordCloud库生成新闻文本词云。这里首先创建一个WordCloud对象,并设置了一些参数,包括字体路径、背景颜色、最大词语数量和词云形状等。最后,我们读取了文件中的所有内容,并生成了词云。

# 绘制词云图
file=open(r'ai_yun.txt','r',encoding='UTF-8')
my_wordcloud = WordCloud(font_path=r"simsun.ttf",  # 兼容中文字体,不然中文会显示乱码
                         background_color="white",  # 设置背景颜色
                         max_words=50,
                         mask=mask  # 设置背景图
                         ).generate(file.read())

9、将生成的词云保存为一个名为"my_wordcloud.png"的图片文件,代码运行完毕后可在代码同一目录下查找文本统计文件及词云图。

# 生成词云图片
my_wordcloud.to_file("my_wordcloud.png")

10、程序输出效果如下:

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值