大鹏一日同风起,扶摇直上九万里。这篇文章主要讲述# yyds干货盘点 # 手把手教你对抓取的文本进行分词词频统计词云可视化和情感分析相关的知识,希望能为你提供帮助。
大家好,我是python进阶者。前言前几天星耀群有个叫【小明】的粉丝在问了一道关于Python处理文本可视化+语义分析的问题,如下图所示。
关于词云的文章,历史文章已经写了十几篇了,感兴趣的话可以在公众号历史文章搜索关键字“词云”前往,但是关于分词和语义分析的文章,就分享过一篇,这个我在读研的时候写的,虽然有些时日,但是内容依旧精彩,欢迎前往查探:??Python大佬分析了15万歌词,告诉你民谣歌手们到底在唱什么??。
一、思路内容稍微有点多,大体思路如下,先将csv中的文本取出,之后使用停用词做分词处理,再做词云图,之后做情感分析。
1、将csv文件中的文本逐行取出,存新的txt文件,这里运行代码《读取csv文件中文本并存txt文档.py》进行实现,得到文件《职位表述文本.txt》
2、运行代码《使用停用词获取最后的文本内容.py》,得到使用停用词获取最后的文本内容,生成文件《职位表述文本分词后_outputs.txt》
3、运行代码《指定txt词云图.py》,可以得到词云图;
4、运行代码《jieba分词并统计词频后输出结果到Excel和txt文档.py》,得到《wordCount_all_lyrics.xls》和《分词结果.txt》文件,将《分词结果.txt》中的统计值可以去除,生成《情感分析用词.txt》,给第五步情感分析做准备
5、运行代码《情感分析.py》,得到情感分析的统计值,取平均值可以大致确认情感是正还是负。
关于本文的源码和数据我都已经打包好上传到git了,在公众号后台回复关键词??小明的数据?
?即可获取。
二、实现过程1.将csv文件中的文本逐行取出,存新的txt文件这里运行代码《读取csv文件中文本并存txt文档.py》进行实现,得到文件《职位表述文本.txt》,代码如下。
# coding: utf-8
import pandas as pd
df = pd.read_csv(./职位描述.csv, encoding=gbk)
# print(df.head())
for text in df[Job_Description]:
# print(text)
if text is not None:
with open(职位表述文本.txt, mode=a, encoding=utf-8) as file:
file.write(str(text))
print(写入完成)
2.使用停用词获取最后的文本内容运行代码《使用停用词获取最后的文本内容.py》,得到使用停用词获取最后的文本内容,生成文件《职位表述文本分词后_outputs.txt》,代码如下:
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import jieba
# jieba.load_userdict(userdict.txt)
# 创建停用词list
def stopwordslist(filepath):
stopwords = [line.strip() for line in open(filepath, r, encoding=utf-8).readlines()]
return stopwords
# 对句子进行分词
def seg_sentence(sentence):
sentence_seged = jieba.cut(sentence.strip())
stopwords = stopwordslist(stop_word.txt)# 这里加载停用词的路径
outstr =
for word in sentence_seged:
if word not in stopwords:
if word != \\t:
outstr += word
outstr += " "
return outstr
inputs = open(职位表述文本.txt, r, encoding=utf-8)
outputs = open(职位表述文本分词后_outputs.txt, w, encoding=utf-8)
for line in inputs:
line_seg = seg_sentence(line)# 这里的返回值是字符串
outputs.write(line_seg + \\n)
outputs.close()
inputs.close()
关键节点,都有相应的注释,你只需要替换对应的txt文件即可,如果有遇到编码问题,将utf-8改为gbk即可解决。
3.制作词云图运行代码《指定txt词云图.py》,可以得到词云图,代码如下:
from wordcloud import WordCloud
import jieba
import numpy
import PIL.Image as Image
def cut(text):
wordlist_jieba=jieba.cut(text)
space_wordlist=" ".join(wordlist_jieba)
return space_wordlist
with open(r"C:\\Users\\pdcfi\\Desktop\\xiaoming\\职位表述文本.txt" ,encoding="utf-8")as file:
text=file.read()
text=cut(text)
mask_pic=numpy.array(Image.open(r"C:\\Users\\pdcfi\\Desktop\\xiaoming\\python.png"))
wordcloud = WordCloud(font_path=r"C:/Windows/Fonts/simfang.ttf",
collocations=False,
max_words= 100,
min_font_size=10,
max_font_size=500,
mask=mask_pic).generate(text)
image=wordcloud.to_image()
# image.show()
wordcloud.to_file(词云图.png)# 把词云保存下来
如果想用你自己的图片,只需要替换原始图片即可。这里使用Python底图做演示,得到的效果如下:
4.分词统计运行代码《jieba分词并统计词频后输出结果到Excel和txt文档.py》,得到《wordCount_all_lyrics.xls》和《分词结果.txt》文件,将《分词结果.txt》中的统计值可以去除,生成《情感分析用词.txt》,给第五步情感分析做准备,代码如下:
#!/usr/bin/env python3
# -*- coding:utf-8 -*-
import sys
import jieba
import jieba.analyse
import xlwt# 写入Excel表的库
# reload(sys)
# sys.setdefaultencoding(utf-8)
if __name__ == "__main__":
wbk = xlwt.Workbook(encoding=ascii)
sheet = wbk.add_sheet("wordCount")# Excel单元格名字
word_lst = []
key_list = []
for line in open(职位表述文本.txt, encoding=utf-8):# 需要分词统计的原始目标文档
item = line.strip(\\n\\r).split(\\t)# 制表格切分
# print item
tags = jieba.analyse.extract_tags(item[0])# jieba分词
for t in tags:
word_lst.append(t)
word_dict =
with open("分词结果.txt", w) as wf2:# 指定生成文件的名称
for item in word_lst:
if item not in word_dict:# 统计数量
word_dict[item] = 1
else:
word_dict[item] += 1
orderList = list(word_dict.values())
orderList.sort(reverse=True)
# print orderList
for i in range(len(orderList)):
for key in word_dict:
if word_dict[key] == orderList[i]:
wf2.write(key ++ str(word_dict[key]) + \\n)# 写入txt文档
key_list.append(key)
word_dict[key] = 0
for i in range(len(key_list)):
sheet.write(i, 1, label=orderList[i])
sheet.write(i, 0, label=key_list[i])
wbk.save(wordCount_all_lyrics.xls)# 保存为 wordCount.xls文件
得到的txt和excel文件如下所示:
5.情感分析的统计值运行代码《情感分析.py》,得到情感分析的统计值,取平均值可以大致确认情感是正还是负,代码如下:
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
from snownlp import SnowNLP
# 积极/消极
# print(s.sentiments)# 0.9769551298267365positive的概率
def get_word():
with open("情感分析用词.txt", encoding=utf-8) as f:
line = f.readline()
word_list = []
while line:
line = f.readline()
word_list.append(line.strip(\\r\\n))
f.close()
return word_list
def get_sentiment(word):
text = u.format(word)
s = SnowNLP(text)
print(s.sentiments)
if __name__ == __main__:
words = get_word()
for word in words:
get_sentiment(word)
# text = u
# 也许
#
# s = SnowNLP(text)
# print(s.sentiments)
#with open(lyric_sentiments.txt, a, encoding=utf-8) as fp:
#fp.write(str(s.sentiments)+\\n)
# print(happy end)
基于NLP语义分析,程序运行之后,得到的情感得分值如下图所示:
四、总结我是Python进阶者。本文基于粉丝提问,针对一次文本处理,手把手教你对抓取的文本进行分词、词频统计、词云可视化和情感分析,算是完成了一个小项目了。下次再遇到类似这种问题或者小的课堂作业,不妨拿本项目练练手,说不定有妙用噢,拿个高分不在话下!
【# yyds干货盘点 # 手把手教你对抓取的文本进行分词词频统计词云可视化和情感分析】最后感谢粉丝【小明】提问,感谢【
推荐阅读
- Flutter组件ValueListenableBuilder使用#yyds干货盘点#
- #yyds干货盘点# Linux 通过 Maven 安装 Dubbo-admin
- ClickHouse 在 UBA 系统中的字典编码优化实践
- #yyds干货盘点# 大数据技术栈之Hadoop-HDFS
- 源码编译并二进制安装MySQL5.7 3二进制安装mariadb10.4
- #yyds干货盘点#C#中的数据字典Dictionary
- #yyds干货盘点#Flowable最新版6.7.0入门篇之基于SpringBoot的例子
- 圆通物流轨迹推送服务接口Java文档
- mysql 学习笔记