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:\Windows\Fonts
- 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)
运行程序,生成词云如下: