一、各库功能说明
pdfminer----用于读取pdf文件的内容,python3安装pdfminer3k
jieba----用于中文分词
wordcloud----用于生成词云
matplotlib----用于将词云可视化
这几个库的顺序也对应程序的顺序:
生使用pdfminer读取pdf文件的内容,然后使用jieba对内容进行中文分词,再然后使用wordcloud基于分词生成词云,最后使用matplotlib将词云可视化
二、程序源码
from urllib.request import urlopen from pdfminer.converter import TextConverter from pdfminer.layout import LAParams from pdfminer.pdfinterp import process_pdf, PDFResourceManager from wordcloud import WordCloud import matplotlib.pyplot as plt import jieba from io import StringIO class MyWordCloud(): def __init__(self): pass #此函数用于读取和返回pdf文件的内容 def getPdfText(self,pdf_url): pdf_file_obj = urlopen(pdf_url) pdf_rm = PDFResourceManager() ret_str = StringIO() lap = LAParams() tc = TextConverter(pdf_rm, ret_str, laparams=lap) process_pdf(pdf_rm, tc, pdf_file_obj) tc.close() pdf_text = ret_str.getvalue() ret_str.close() return pdf_text def genWordCloud(self,pdf_url): pdf_text = self.getPdfText(pdf_url) # WordCloud(按英文习惯)以空格分词,中文不用空格所以WordCloud不能正确对中文进行分词 # 为了使用WordCloud我们就需要先自己自己想办法完成分词,并将所有分词以空格隔开 # 我们的方法是先用结巴生成中文序列,然后使用join方法使用空格拼接所有序列 jieba_cut_seq = jieba.cut(pdf_text) pdf_cut_text = " ".join(jieba_cut_seq) # 默认字体不支中文,需要指定要使用的中文字体路径;可从自己电脑已安装的字体中选,目录C:WindowsFonts font_path = "C:\Windows\Fonts\simfang.ttf" wc = WordCloud(font_path,width=1000, height=880).generate(pdf_cut_text) plt.imshow(wc, interpolation="bilinear") plt.axis("off") plt.show() def __del__(self): pass if __name__ == '__main__': # 深圳十三五规划纲要文件的URL链接,要生成其他pdf文件的词云修改成该文件的URL即可 pdf_url = 'http://www.sz.gov.cn/fzggj/home/zwgk/ghjh/fzgh/201604/P020160412518770846515.pdf' mwc = MyWordCloud() mwc.genWordCloud(pdf_url)
运行程序,生成词云如下:
参考:
https://www.cnblogs.com/gooseeker/p/5527519.html
http://www.unixuser.org/~euske/python/pdfminer/programming.html
https://www.cnblogs.com/delav/p/7845539.html