Python编程读取至少一篇pdf文档。并编程实现以下功能:
①实现其中的热词统计分析。
②绘制热词统计分析的词云
一、PDF文档的选择
我选择的PDF中文字内容如下:
二、效果展示
三、完整代码
1. import pdfplumber # 导入库 2. import jieba 3. from wordcloud import WordCloud 4. import numpy as np 5. import matplotlib.pyplot as plt 6. plt.rcParams['font.sans-serif']=['SimHei'] 7. plt.rcParams['axes.unicode_minus']=False 8. # 用pdf文件解析器读取文件 9. with pdfplumber.open('中华文化.pdf') as f: 10. # 用for循环读取文件中的每一页 11. for page in f.pages: 12. text = page.extract_text() 13. txt_f = open(r'中华文化.txt', mode='a', encoding='utf-8') # 创建txt文件 14. txt_f.write(text) # 写入txt文件 15. 16. file = open('中华文化.txt',encoding='utf-8') 17. file = file.read() #读取txt文件 18. txtlist = jieba.lcut(file) 19. string = " ".join(txtlist) 20. stop_words = {} 21. counts = {} 22. for txt in txtlist: 23. if len(txt) == 1: 24. stop_words[txt] = stop_words.get(txt, 0) + 1 25. else: 26. counts[txt] = counts.get(txt, 0) + 1 27. items = list(counts.items()) 28. items.sort(key=lambda x: x[1], reverse=True) 29. y1 = [] 30. labels = [] 31. for i in range(1,10): 32. y1.append(items[i][1]) 33. labels.append(items[i][0]) 34. # plt.figure(figsize=(8,4)) 35. width = 0.3 36. x = np.arange(len(y1)) 37. a = [i for i in range(0,9)] 38. plt.xticks(a,labels,rotation = 30) 39. plt.bar(x=x,height=y1,width=width) 40. plt.title('PDF文件中热词统计分析') 41. plt.savefig("热词统计分析.png") 42. plt.show() 43. print("-------热词统计分析完成!-------") 44. stoplist=[] 45. item = list(stop_words.items()) 46. for i in range(len(item)): 47. txt,count = item[i] 48. stoplist.append(txt) 49. #print(stoplist) 50. setlist = set(stoplist) 51. wcd = WordCloud(width=1000, height=700, background_color='white', font_path='msyh.ttc', scale=15, stopwords=setlist) 52. wcd.generate(string) 53. wcd.to_image() 54. print("-------热词词云生成完成!-------") 55. wcd.to_file('词云.png') # 导出图片
四、总结
- 题目要求读取至少一篇pdf文档,那么需要用到pdfplumber库,用with pdfplumber.open('中华文化.pdf') as f:这条语句将文件打开,之后用for循环读取文件的每一页,并将读取到的内容存到txt文件中。
- 再利用jieba分词库对文本处理,使用精确模式对文本进行分词,列表转化为字符串,绘制词云要传入的对象是字符串.
- 接着统计词语及其出现的次数,通过键值对的形式存储要排除的词及出现次数,通过键值对的形式存储词语及其出现的次数,注意将当个词语删除,遍历所有词语,每出现一次其对应的值加 1,根据词语出现的次数进行从大到小排序。
- 根据上面的处理结果画热词统计分析图,用for循环向label和y1中添加排名前十的词汇和它对应出现的次数,用plt画出,横坐标为对应词汇,纵坐标为出现次数,可以看出,出现最多的词是“父母”和“我们”、其次是“弟子规”和“朋友”。
- 创建排除单个词的列表,遍历列表中所有的字典,将key添加到要排除的列表,将列表转化为集合,后面WordCloud()方法的stopwords传入的参数要求为集合,将string变量传入generate()方法,给词云输入文字,利用WordCloud生成词云照片。