一、功能描述
        Python 已成为当前最热门的编程工具之一,在数据分析、爬虫、机器学习、Web 开发等领域
有着广泛的应用。LDA 也称为隐狄利克雷分布,LDA 目的是识别主题,即把文档—词汇矩阵变成
文档—主题矩阵(分布)和主题—词汇矩阵(分布)。本设计具体功能如下:
1.Selenium 爬取知网“Python”主题、类别为“核心期刊”论文,下载到 Excel 文件。
2. LDA 模型分别对 5 个时间区间的文献进行分析,对比分析得出 Python 论文主题(应用领
域)趋势,预测未来发文热点。
由于知网 PC 端有很强的反爬虫机制,选择爬取手机端。
二、关键技术
1.Python+Selenium库的使用。
2. Python 处理 Excel 数据。
3. jieba,gensim, pyLDAvis 等库的使用。
三、运行环境
1.安装与配置 Selenium
(1)打开 cmd,输入如下命令:
pip install -i https://pypi.douban.com/simple selenium
安装完成后,输入如下命令验证,可见,4.0.0 版本的 selenium 已经安装完成。
pip show selenium

(2)配置 chrome 驱动。首先查看自己电脑使用的 chrome 版本。安装对应版本的驱动。
安装完成后,将 exe 文件放到 chrome 安装目录下。此电脑>>右键属性>高级系统设置>>高
级>>环境变量>>系统变量>>Path,添加驱动目录到 Path。操作流程如下:

对于文本分析还需要安装好jieba,gensim,pyLDAvis模块,过程略。

四、核心代码

1.Selenium_Reptile.py

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
import time
import xlwt#写入excel的扩展工具#驱动所在路径
chrome_driver = 'C:\Program Files\Google\Chrome\Application\chromedriver.exe'
browser = webdriver.Chrome(executable_path=chrome_driver)
browser.get('http://wap.cnki.net/touch/web/guide')#打开指定页面
time.sleep(0.3)#强制暂停0.3s便于看清爬虫步骤# 搜索主题
topic = "Python"
browser.find_element_by_id('btnSearch').click()
browser.find_element_by_id('keyword_ordinary').send_keys(topic)
browser.find_element_by_class_name('btn-search').click()
time.sleep(0.3)# 筛选类型
browser.find_element_by_id("articletype_a").click()
time.sleep(0.3)
browser.find_element_by_css_selector("a[data-value=\"11\"]").click()# 获取论文数量
num = browser.find_element_by_class_name('search-number').text
num = int(num[:-1])#从位置0到位置-1的个数即所有数量
# 加载所有页面,若加载5页,改为for i in range(5):
for i in range(int(num/10)):#num/10根据文献数量锁定所有页面的数量browser.find_element_by_class_name('c-company__body-item-more').click()time.sleep(0.3)# 获取文献信息
title = browser.find_elements_by_class_name('c-company__body-title')#标题
author = browser.find_elements_by_class_name('c-company__body-author')#作者
content = browser.find_elements_by_class_name('c-company__body-content')#摘要
source = browser.find_elements_by_class_name('color-green')#来源
cite = browser.find_elements_by_class_name('c-company__body-info')#引用# 保存为xls文件
worksheet = xlwt.Workbook()#定义workbook
sheet = worksheet.add_sheet(topic)#添加sheet,以之前搜索的主题命名
head = ['标题', '作者', '摘要', '来源', '引用']#标题
for h in range(len(head)):sheet.write(0, h, head[h])#把表头写到Excel里面去
i = 1#定义Excel表格的行数,从第二行开始写入,第一行已经写了标题
#依次写入每行记录
for n in range(len(title)):#文章标题的数量表示文献sheet.write(i, 0, title[n].text)sheet.write(i, 1, author[n].text)sheet.write(i, 2, content[n].text)sheet.write(i, 3, source[n].text)sheet.write(i, 4, cite[n].text)  i += 1
worksheet.save('C:/Users/86184/Desktop/知网Python主题核心期刊论文.xls')#保存到桌面# 关闭浏览器
browser.quit()

2.对导入表格的数据整理,txtAnalysis.py,在该过程中要运用stopwords.txt作停用词处理,构造词典,进一步运用LDA找到每个主题(词袋)下对应的多个词语。

import xlrd
import re
import jieba
import jieba.posseg as jp
import pyLDAvis.gensim_models
from gensim.models.coherencemodel import CoherenceModel
from gensim.models.ldamodel import LdaModel
from gensim.corpora.dictionary import Dictionaryclass txtAnalysis:def __init__(self,sheet_id,name_id):self.sheet_id=sheet_id#表号self.name_id=name_id#名称def txthandle(self):#读取表,行table=xl.sheets()[self.sheet_id]texts=[]for i in range(1,table.nrows):row=table.row_values(i)txt=f"{row}"#去除标点,字母,数字txt=re.sub('[\W_]+','',txt)txt=re.sub('[a-zA-Z]','',txt)txt=re.sub('[\d]','',txt)texts.append(txt)#分词,构造词典flags = ('n')#挖掘主题,限定词性为名词stopwords = open("stopwords.txt","r",encoding='utf-8').read()# 停用词表words_lst = []for txt in texts:# jieba分词,词性识别,去停用词words = [i.word for i in jp.cut(txt) if i.flag in flags and i.word not in stopwords]words_lst.append(words)dictionary = Dictionary(words_lst)corpus = [dictionary.doc2bow(words) for words in words_lst]# lda模型计算#设置主题个数为5,训练10次,种子数200,迭代100次lda = LdaModel(corpus=corpus, id2word=dictionary, num_topics=5,passes=10,random_state=200,iterations=100)# U_Mass Coherence可通过指标得合理主题数ldaCM = CoherenceModel(model=lda, corpus=corpus, dictionary=dictionary, coherence='u_mass')# 打印主题,每个主题显示8个词for topic in lda.print_topics(num_words=8):print("{0}".format(self.name_id),topic)# LDA可视化plot =pyLDAvis.gensim_models.prepare(lda,corpus,dictionary)# 保存到本地htmlpyLDAvis.save_html(plot, 'Python{0}论文LDA可视化结果.html'.format(self.name_id))if __name__=='__main__':#读取表格文件xl= xlrd.open_workbook("处理.xlsx")txtAnalysis1=txtAnalysis(1,"2019-2021")txtAnalysis1.txthandle()txtAnalysis2=txtAnalysis(2,"2016-2018")txtAnalysis2.txthandle()txtAnalysis3=txtAnalysis(3,"2013-2015")txtAnalysis3.txthandle()txtAnalysis4=txtAnalysis(4,"2010-2012")txtAnalysis4.txthandle()txtAnalysis5=txtAnalysis(5,"2010以前")txtAnalysis5.txthandle()

3.结果

结果有两种形式:

2019-2021 (0, '0.056*"数据" + 0.013*"语言" + 0.013*"平台" + 0.013*"机器人" + 0.012*"电商" + 0.011*"系统" + 0.010*"有限元" + 0.009*"软件"')
2019-2021 (1, '0.017*"模型" + 0.017*"隧道" + 0.015*"公路" + 0.015*"建模" + 0.015*"自由基" + 0.013*"文本" + 0.013*"语言" + 0.012*"信息"')
2019-2021 (2, '0.026*"算法" + 0.025*"结构" + 0.021*"模型" + 0.019*"参数" + 0.015*"人口" + 0.014*"信息" + 0.012*"数据" + 0.012*"寄存器"')
2019-2021 (3, '0.019*"计算机" + 0.016*"模型" + 0.013*"框架" + 0.012*"爬虫" + 0.012*"参数" + 0.012*"系统" + 0.012*"数据" + 0.010*"科学"')
2019-2021 (4, '0.026*"语言" + 0.024*"系统" + 0.011*"外语" + 0.010*"建模" + 0.008*"水文" + 0.008*"平台" + 0.007*"程序设计" + 0.007*"人员"')
2016-2018 (0, '0.038*"数据" + 0.028*"螺栓" + 0.024*"质量" + 0.018*"软件" + 0.016*"结构" + 0.016*"动态" + 0.014*"蟒" + 0.014*"分类"')
2016-2018 (1, '0.045*"软件" + 0.026*"动态" + 0.023*"语料库" + 0.023*"牲畜" + 0.023*"主镜" + 0.023*"模块" + 0.020*"脚本" + 0.017*"系统"')
2016-2018 (2, '0.033*"系统" + 0.028*"花纹" + 0.024*"语言" + 0.023*"数据" + 0.021*"边坡" + 0.021*"沟" + 0.021*"轮胎" + 0.014*"布局"')
2016-2018 (3, '0.033*"流域" + 0.029*"数据" + 0.029*"水系" + 0.022*"语言" + 0.019*"水文" + 0.019*"特征" + 0.015*"信息" + 0.015*"制图"')
2016-2018 (4, '0.042*"数据" + 0.030*"智能" + 0.030*"高校" + 0.024*"工程" + 0.022*"语言" + 0.018*"公众" + 0.018*"主题" + 0.018*"图书馆"')
2013-2015 (0, '0.057*"数据" + 0.036*"平台" + 0.032*"模型" + 0.032*"地名" + 0.028*"语言" + 0.028*"结构" + 0.024*"数控系统" + 0.024*"电路"')
2013-2015 (1, '0.065*"系统" + 0.039*"软件" + 0.027*"极地" + 0.027*"自动测试" + 0.027*"物理层" + 0.027*"矿山" + 0.027*"信关" + 0.020*"平台"')
2013-2015 (2, '0.053*"结构" + 0.025*"软件" + 0.025*"语言" + 0.025*"参数" + 0.020*"工程" + 0.020*"模型" + 0.020*"机器人" + 0.020*"群"')
2013-2015 (3, '0.052*"结构" + 0.045*"系统" + 0.031*"模型" + 0.031*"规则" + 0.023*"平台" + 0.016*"有限元" + 0.016*"脚本语言" + 0.016*"价值"')
2013-2015 (4, '0.046*"网络" + 0.043*"数据" + 0.027*"语言" + 0.021*"资源" + 0.021*"隧道" + 0.021*"评价" + 0.021*"网格" + 0.021*"机身"')
2010-2012 (0, '0.071*"有限元" + 0.060*"壳" + 0.047*"软件" + 0.042*"参数" + 0.030*"数据" + 0.025*"模型" + 0.025*"汽车" + 0.025*"通风"')
2010-2012 (1, '0.034*"文件" + 0.026*"工程" + 0.026*"数据" + 0.026*"含量" + 0.026*"交叉" + 0.026*"柔性" + 0.026*"系统" + 0.018*"蟒蛇"')
2010-2012 (2, '0.047*"系统" + 0.021*"管理系统" + 0.021*"电子" + 0.021*"动态" + 0.016*"性别" + 0.016*"内容" + 0.016*"场景" + 0.016*"对象"')
2010-2012 (3, '0.069*"速度" + 0.040*"制图" + 0.021*"平台" + 0.021*"科学技术" + 0.021*"网络" + 0.021*"工程" + 0.021*"框架" + 0.021*"地壳"')
2010-2012 (4, '0.068*"景观" + 0.035*"算法" + 0.028*"专业" + 0.028*"复合材料" + 0.028*"可靠性" + 0.028*"定向" + 0.028*"信息系统" + 0.028*"开源"')
2010以前 (0, '0.052*"系统" + 0.044*"语言" + 0.031*"软件" + 0.027*"计算机" + 0.025*"工程" + 0.020*"编程" + 0.020*"内容" + 0.020*"场景"')
2010以前 (1, '0.038*"容器" + 0.034*"静态" + 0.029*"速度" + 0.029*"系统" + 0.020*"模块" + 0.020*"裂纹" + 0.020*"制图" + 0.020*"工程"')
2010以前 (2, '0.068*"语言" + 0.041*"动态" + 0.041*"并行程序" + 0.034*"脚本" + 0.028*"模块" + 0.021*"场景" + 0.021*"机器人" + 0.015*"模型"')
2010以前 (3, '0.036*"景观" + 0.024*"有限元" + 0.022*"软件" + 0.018*"脂肪酸" + 0.015*"模型" + 0.015*"专业" + 0.015*"开源" + 0.015*"信息系统"')
2010以前 (4, '0.039*"网络" + 0.025*"语言" + 0.024*"著者" + 0.024*"材料" + 0.022*"数据" + 0.016*"后处理" + 0.016*"规律" + 0.016*"论坛"')

WEB界面:

可以通过以上结果对比分析python研究主题的差异。

五、总结

本文有一定的不足。如果需要更精确的时间序列分析,可以通过构建JS距离进行研究。

此外,对以下文章表示致谢,创作过程中有所参考和借鉴:

Python爬虫:用selenium爬取知网文献基本信息_洋阳酱的博客-CSDN博客_selenium爬取知网

python 基于LDA算法的长文本主题提取分类并预测类别

基于LDA模型的知网Python论文主题挖掘相关推荐

  1. Web of science以及中国知网学术论文爬取教程(附代码)

    我是目录 Web of Science 中国知网 最近又做了爬取知网以及web of science的工作,因此记录在这里.(话说这几天简直是要类吐血,之前看的论文累得全忘光光了,还得捡一下) 本期教 ...

  2. 知网学术论文下载caj格式转换 caj转pdf

    文章目录 前言 一.海外版知网 二.Zotero用户,使用Zotero Connector便可以直接在非海外版知网下载PDF格式,不论文期刊论文还是硕博论文 三.知网油猴脚本 前言 知网学术论文,特别 ...

  3. 关于知网学位论文检测系统的说明及修改指导意见

    来源:http://www.myxidian.cn/School/Infor/XiDian?inforId=214 第一.知网学位论文检测为整篇上传,上传论文后,系统会自动检测该论文的章节信息,如果你 ...

  4. 知网查论文时怎么筛选核心期刊?

    在知网检索论文时不知道如何筛选出核心期刊进行查看?解决方法如下图

  5. 知网博士论文校外查找下载方法

    校外查找下载知网博士论文的方法如下: 1.首先使用文献党下载器(wxdown.org)进入知网,在文献党下载器资源库双击"知网"名称即可进入知网 2.进入知网,输入关键词.篇名.作 ...

  6. NLP之TM之LDA:利用LDA算法瞬时掌握文档的主题内容—利用希拉里邮件数据集训练LDA模型并对新文本进行主题分类

    NLP之TM之LDA:利用LDA算法瞬时掌握文档的主题内容-利用希拉里邮件数据集训练LDA模型并对新文本进行主题分类 目录 输出结果 设计思路 核心代码 训练数据集 LDA模型应用 输出结果 设计思路 ...

  7. python 批量下载知网(CNKI)论文

    1.目的: 朋友找我去知网帮他下载点相关论文,发现老是要去点击文章.点击下载,显得很麻烦,百度一下,别人的方法太复杂,所以自己写了一个python脚本自动下载知网论文. 2.前期准备 1)安装pyth ...

  8. selenium自动登录知网下载论文

    自动登录知网下载期刊论文 我想下载知网上所有关于深度学习推荐系统的论文期刊,脚本实现了,写这篇博客记录自己遇到的坑 2自动打开网页 我们通过python selenium库可以实现浏览器自动控制,首先 ...

  9. 计算代码重复率_了解了知网大学生论文查重原理,重复率想高于6%都难!

    大家好,我是毕业之家小毕同学.后续会持续为大家更新毕业论文写作.修改.降重,记得关注哟. 每年的毕业季,相信大家面临论文查重都会头疼.想到这,作者真想拉最初设计查重系统的人聊一聊:就算长得帅,也不能这 ...

  10. 知网搜论文没有服务器响应,CNKI知网论文检测使用中的十四个常见问题

    原标题:CNKI知网论文检测使用中的十四个常见问题 1.初检段落A未发现抄袭,复检的时候A段怎么又发现抄袭了? 这是因为系统设置的阈值有关,大概3%左右的阀值:也就说每次大概3%左右重复内容不能检测出 ...

最新文章

  1. 英特尔90亿美元卖掉「起家业务」,SK海力士接盘
  2. 深度解析KGDB调试Linux模块和内核
  3. Android架构师教你如何突破瓶颈,快来收藏!
  4. python内置数字类型转换函数_Python学习 Day2-2 Python3的基本数据类型、数据内置类型转换函数...
  5. jQuery EasyUI动态添加控件或者ajax加载页面后不能自动渲染问题的解决方法
  6. [解决]Win7+Tomcat5.5 只能通过localhost或计算机名访问
  7. 为什么我的论文没人引用?
  8. Xamarin.Forms: 无限滚动的ListView(懒加载方式)
  9. Vscode使用npm安装babel
  10. mysql 插入前查重_插入新数据是直接查重,如果有重复则不插入数据
  11. win10电脑显示无法自动修复此计算机,win10系统无法自动修复此计算机的操作步骤...
  12. 飞思卡尔智能车准备篇
  13. 企业级自动化运维工具-ansible
  14. AD9的pcb 里面怎样才能从TOP层视图换成从BOTTOM层网上面看,相当于把板子翻过来看
  15. LeetCode热题100中使用辅助栈方法的题目的整理(待更)
  16. Mathon广告过滤规则发现
  17. 2022-2028全球及中国NTC热敏电阻电缆行业研究及十四五规划分析报告
  18. Servlet[jsp]的Servlet.service()引发了具有根本原因的异常 (这个是什么情况?求解答)
  19. 费舍尔算法(文字描述,过于繁琐,其实实现很简单)
  20. 07.nodejs文件操作

热门文章

  1. Ubuntu安装OpenCV4记录
  2. lmdb数据库的读取与转换(一) —— 基本操作
  3. 【每日新闻】三星折叠手机媒体试用出故障:屏幕失灵 铰链处凸起
  4. 网络调试助手连接mysql_网络调试助手模拟MQTT协议连接百度物联网并操作时序数据库...
  5. CFA 2020 notes的PDF版本,热乎乎的百度网盘分享
  6. 华为认证报名费是多少?如何准备华为HCIP网络工程师考试?
  7. VBA学习笔记五---如何将宏代码进行共享(加载宏)
  8. 解决 Eclipse不支持tomcat9
  9. ps使用仿制图章工具,图案图章工具
  10. 通达OA2017恢复数据库Access denied for user 'root'@'localhost' (using password: YES)报错的解决办法