目录
(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、程序输出效果如下: