python读取PDF、word文件及jieba分词,词云分析(Jupyter)
用pdf文件解析器读取文件
首先要安装pdfplumber库
代码如下:
!pip install pdfplumber -i https://pypi.tuna.tsinghua.edu.cn/simple
上面的代码安装可能会报错,这时我们需要输入以下代码:
#!pip --default-timeout=100 install --user pdfplumber -i https://pypi.tuna.tsinghua.edu.cn/simple
输入以上代码能解决大部分问题
import pdfplumber #导入库
#用pdf文件解析器读取文件
with pdfplumber.open(r'C:\Users\bai\Downloads\新时代内地高校港澳学生国情教育模式研究_张小欣.pdf') as f:
#用for循环读取文件中的每一页
for page in f.pages:
text = page.extract_text()
txt_f = open(r'港澳国情教育.txt',mode='a',encoding='utf-8') #创建txt文件
txt_f.write(text) #写入txt文件
执行完上面代码我们得到txt样式的文本了。
接下来读取word文件
同样我们需要安装python-docx第三方库
!pip install python-docx
接下来读取文件
import xlsxwriter as xw
f = docx.Document(r"C:\Users\bai\Downloads\新时代内地高校港澳学生国情教育模式研究_张小欣.docx")
for para in f.paragraphs: #用for循环读取文件每一段
txt_f = open(r'港澳国情教育.txt',mode='a',encoding='utf-8') #创建txt文件
txt_f.write(para.text) #写入txt文件
#print(para.text)
使用jieba分词库进行文本处理
import jieba
file = open('港澳国情教育.txt',encoding='utf-8')
file = file.read() #读取txt文件
txtlist = jieba.lcut(file) # 使用精确模式对文本进行分词
string = " ".join(txtlist) #列表转化为字符串,绘制词云要传入的对象是字符串
#string
统计词语及其出现的次数
stop_words = {} #通过键值对的形式存储要排除的词及出现次数
counts = {} # 通过键值对的形式存储词语及其出现的次数
for txt in txtlist:
if len(txt) == 1: # 单个词语应该排除
stop_words[txt] = stop_words.get(txt,0) + 1
else:
counts[txt] = counts.get(txt, 0) + 1 # 遍历所有词语,每出现一次其对应的值加 1
items = list(counts.items())
items.sort(key=lambda x: x[1], reverse=True) # 根据词语出现的次数进行从大到小排序
将统计好的词语及其出现的次数写入excel
import xlsxwriter as xw #导入第三方库
#根据词语出现的次数进行从大到小排序,并写入excel
workbook = xw.Workbook('词频.xlsx') # 创建工作簿
worksheet1 = workbook.add_worksheet("sheet1") # 创建子表
worksheet1.activate() # 激活表
title = ['词语', '词频', ] # 设置表头
worksheet1.write_row('A1', title) # 从A1单元格开始写入表头
i = 2 # 从第二行开始写入数据
for j in range(len(items)):
insertData = [items[j][0], items[j][1]] #获取items里面的每个元素,items每个元素为元组,[j][0]表示第j个元组中的第1个元素
row = 'A' + str(i)
worksheet1.write_row(row, insertData)
i += 1
workbook.close() # 关闭表
创建排除单个词的列表
stoplist=[] #创建排除单个词的列表
item = list(stop_words.items())
for i in range(len(item)): #遍历列表中所有的字典
txt,count = item[i]
stoplist.append(txt) #将key添加到要排除的列表
#print(stoplist)
setlist = set(stoplist) #将列表转化为集合,后面WordCloud()方法的stopwords传入的参数要求为集合
创建词云对象,进行词云分析
from wordcloud import WordCloud
wcd = WordCloud(width=1000,height=700,background_color='white',font_path='msyh.ttc',scale=15,stopwords=setlist)
#将string变量传入generate()方法,给词云输入文字
wcd.generate(string)
wcd.to_image() 查看词云图片
wcd.to_file('词云.png') #导出图片