基于PDF的词云图

news/2024/7/19 11:33:41 标签: python, 爬虫, 数据挖掘

最近在疯狂找与研究方向相关的paper,全部下载下来后发现一篇篇看太费时间了,但又想知道这篇文章paper主要内容是什么,用到了哪些关键的方法,对我是否有帮助,于是想到了词云。

“词云”就是对文本中出现频率较高的“关键词”予以视觉上的突出,形成“关键词云层”或“关键词渲染”,从而过滤掉大量的文本信息,使用户只要一眼扫过文本就可以领略文本的主旨。

网上搜了一下,很少有基于PDF生成词云的代码,于是参考了一些博客,自己动手实现基于PDF的词云图,顺带网站爬虫生成词云图,源代码如下(如果对你有用记得偷偷点赞或评论 ):

import requests
from bs4 import BeautifulSoup
import time
import random

from wordcloud import WordCloud
from PIL import Image
import numpy as np
import matplotlib.pyplot as plt
import jieba

from io import StringIO
from io import open
from pdfminer.converter import TextConverter
from pdfminer.layout import LAParams
from pdfminer.pdfinterp import PDFResourceManager, process_pdf


def wangye(url):
    urls = [url.format(str(i))
            for i in range(0, 200, 20)]  # 通过观察的url翻页的规律,使用for循环得到10个链接,保存到urls列表中
    print(urls)
    dic_h = {
        "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36"}
    comments_list = []  # 初始化用于保存短评的列表

    for url in urls:  # 使用for循环分别获取每个页面的数据,保存到comments_list列表
        r = requests.get(url=url, headers=dic_h).text

        soup = BeautifulSoup(r, 'lxml')
        ul = soup.find('div', id="comments")
        lis = ul.find_all('p')

        list2 = []
        for li in lis:
            list2.append(li.find('span').string)
        # print(list2)
        comments_list.extend(list2)
        time.sleep(random.randint(0, 3))  # 暂停0~3秒

    with open('ciyun_word.txt', 'w', encoding='utf-8') as f:  # 使用with open()新建对象f
        # 将列表中的数据循环写入到文本文件中
        for i in comments_list:
            f.write(i + "\n")  # 写入数据

def word():
    # 打开文本
    with open("ciyun_word.txt",encoding="utf-8") as f:
        s = f.read()

    # 中文分词
    text = ' '.join(jieba.cut(s))

    # 生成对象
    img = Image.open("changjinglu.jpg") # 打开遮罩图片
    mask = np.array(img) #将图片转换为数组

    stopwords = ["我","你","她","的","是","了","在","也","和","就","都","这","a","we","that","and","for","this","the","of","to","are","in",
                 "as","our","is","but","with","by","on","it","which","all","an","each","not","from","data","here","model","method","based",
                 "these","their","where","be"]
    wc = WordCloud(font_path="msyh.ttc",
                   mask=mask,
                   width=1000,
                   height=700,
                   background_color='white',
                   max_words=200,
                   stopwords=stopwords).generate(text)

    # 显示词云
    plt.imshow(wc, interpolation='bilinear')# 用plt显示图片
    plt.axis("off")  # 不显示坐标轴
    plt.show() # 显示图片

    # 保存到文件
    wc.to_file("ciyun.png")

def read_pdf(pdf):

    rsrcmgr = PDFResourceManager()
    retstr = StringIO()
    laparams = LAParams()
    device = TextConverter(rsrcmgr, retstr, laparams=laparams)
    process_pdf(rsrcmgr, device, pdf)
    device.close()
    content = retstr.getvalue()
    retstr.close()
    # 获取所有行
    lines = str(content).split("\n")
    with open('ciyun_word.txt', 'w', encoding='utf-8') as f:  # 使用with open()新建对象f
        # 将列表中的数据循环写入到文本文件中
        for i in lines:
            f.write(i + "\n")  # 写入数据





if __name__ == '__main__':
    #url = '你要爬取的网站地址'
    #wangye(url)
    pdf_url = 'C:/Users/ASUS/Desktop/21-two stage GAN.pdf'
    with open(pdf_url, "rb") as my_pdf:
        read_pdf(my_pdf)
    word()

生成的词云图
在这里插入图片描述
我这里用的是长颈鹿的图片,大家可以根据下载自己喜欢的图片进行替换就可以了,考虑到可能有一些人和我一样懒,不想找图片,我就直接把可可爱爱的长颈鹿放上来
在这里插入图片描述


http://www.niftyadmin.cn/n/965826.html

相关文章

百合网“免费”革命 一场饮鸩止渴的大戏

在线婚恋市场一直以来都是有风乍起,吹乱一池春水的同时,也往往会带来自身的迷茫。刚宣布融了15亿资的百合网计划下一步登陆A股, 于是推出了免费沟通的杀手锏,更是号称要彻底颠覆婚恋行业——果然是腰包鼓了,说话都财大…

sqlite在android中的应用,Android中sqlite数据库应用

1、特点和其他数据相比是无类型的。可以存放任意类型,但是主键除外。如果主键为:INTEGER PRIMARY KEY,则只能存储64位整数。1) Create Table可以用下面的语句:CREATE TABLE person(personid integer primary key autocrement, name varchar(2…

树莓派智能语音提醒

前段时间的某一天突然发现先前做的树莓派提醒功能太智障了,先前的功能是告诉依米你需要提醒的内容,她收到命令后直接把需要提醒的内容以文字的形式发送到邮箱,随后你便能收到一封“提醒”的邮件。 这个功能显然没有起到提醒的作用&#xff0c…

杭电1257(最少拦截系统)

最少拦截系统 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 24667 Accepted Submission(s): 9670 Problem Description某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统.但是这种导弹拦截系统有一个缺陷:虽…

mix2 android 公测,小米 6/MIX 2/Note 3 等正式停止 MIUI 12 开发版内测公测

IT之家6月21日消息 小米社区MIUI近期发布公告,为小米6、红米Note5、小米6X、小米Note3、小米MIX2等机型带来了最后的一次开发版更新,6月20日起,小米6、红米Note5、小米6X、小米Note3、小米MIX2 正式停止开发版内测公测。另外,IT之…

不同类型变量的数据预处理

所有变量可以分为两种: 一、类型变量。 例如:天气情况可以从1-4中取值,可以用1表示晴天,2表示多云,3表示雨天,4可以表示雪天,诸如此类,我们统称为类型变量,这里需要注意…

SSH实例(6)

在WebContent文件夹下新建query.jsp和save.jsp文件。 query.jsp&#xff1a; <% page language"java" import"java.util.*" pageEncoding"UTF-8"%> <% taglib prefix"s" uri"/struts-tags" %> <!DOCTYPE HTM…

android sdk setup,Android SDK Setup 安装Android SDK

There are some steps you must follow before you can build and run any code on your Android device. This is true regardless of whether you use Unity or write Android applications from scratch.想要你的代码能够运行在Android设备上&#xff0c;以下这些步骤是必须…