目标:
通过对提取的文件中的文本进行词频分析及可视化处理(词云图)来了解文本大致的主题及内容,为后续的文本分析做准备。
思路分析:
- 针对不同的文件类型(csv、excel、docx、pdf等)采用不同的package的方法来打开文件,提取文本。
- 提取到的文本要进行大致观察,看文本数据是否干净(即是否存在很多无关紧要的符号),如果要单纯进行中文文本分析,那么就需要用到re库,对数据进行处理,剔除掉其中的符号、英文等,得到包含剩余中文的列表。
- 将列表转换为字符串文本。
- 用jieba库对剩余文本进行分词,这个过程中要考虑到最终保留多长的字符串,一般要删除长度为1的字符串,因为这种字符串大多无意义。同时要提前导入自定义词典避免相关专业名词被分开。
- 进行词频统计、词频排序。
- 导入pyecharts库,进行词云图的制作。
具体代码:
#导入库
import re
import jieba
import csv
from pyecharts import options as opts
from pyecharts.charts import Page, WordCloud
from pyecharts.globals import SymbolType
#读取文件中的文本
text = open(r'文件路径').read()
#去掉非中文部分,保留中文
text = re.findall('[\u4e00-\u9fa5]',text)
#将列表转换为字符串
text = ''.join(text)
# 导入自定义词典
jieba.load_userdict('自定义词典的路径名称')
#对文本进行分词
cut_text = jieba.lcut(text)
#删除掉长度为1的字符
cut1_text = [
w
for w in set(cut_text)
if len(w) > 1
]
#词频统计
wordfreq = []
for word in cut1_text:
freq = cut_text.count(word)
wordfreq.append((word, freq))
# 词频排序
wordfreq = sorted(wordfreq, key=lambda k:k[1], reverse=True)
wordfreq
#词云图制作
#初始化,设置
wordcloud =WordCloud()
wordcloud.add("",
wordfreq,
word_size_range=[20,100])
wordcloud.set_global_opts(title_opts=opts.TitleOpts(title="基本示例"))
#渲染结果
wordcloud.render_notebook()
代码分析及易错点:
-
在读取文件中的文本部分,文件路径前要加r,主要是因为\在python中经常作为转义符使用,因此机器可能无法正确识别。
-
在去掉非中文部分中,[\u4e00-\u9fa5]是中文字符的编码,可以通过百度查询得到。
-
在删除掉长度为1的字符这一部分,for循环后并没有加冒号,主要原因是因为这是python中的列表解析,在列表解析中for循环后不同加冒号,只用空格继续写,甚至不用分行,如:
cut1_text = [w for w in set(cut_text) if len(w) > 1],另一种传统复杂写法如下:
cut1_text = []
for w in set(cut_text):
if len(w) > 1:
cut1_text.append(w)
-
在删除掉长度为1的字符这一部分,for循环中用了set()把列表变成了集合,这一步至关重要,如果没有变成集合,那么后期的词频统计部分,for循环的结果会出现很多重复现象。
-
在词频统计部分
for word in cut1_text:主要是提取word,因此主要是选择cut1_text(已去重)作为对象,而后要计算每个词出现的频次freq = cut_text.count(word),则应该选择为cut_text(未去重)