一、论文集合层面: ① 不同的会议、年份形成不同的集合,平均被引用量(柱状图) ② 不同的会议、年份形成不同的集合,平均引用量(柱状图) ③ 不同的会议、年份形成不同的集合,摘要词云或关键词词云
二、单篇论文层面: ① 摘要在每个子空间上(0-4)的数量(柱状图) ② 论文引用了哪些论文(图的形式) ③ 论文被哪些论文所引用(图的形式)
思路:首先根据sentence_TextCNN.json构建一个list,list的元素类型是字典,每个元素对应一篇论文。字典格式: 其中,paper_id是论文的id,0-4对应五个子空间,分别是研究背景、研究问题、贡献、方法、实验。0-4对应的值表示该论文摘要中的句子在每个子空间上的个数。 具体实现: 我们的ACM数据集中论文(一共43433篇)的id不是从0开始的也不是连续的,不太方便索引。因此,想建立一个id_dic,表示id和索引的对应关系。
# 构建一个字典,id与list下标的对应关系 id_path = 'D:/大学资料/大三下/项目实训/code+data/ACM数据集/articles.log' id_file = open(id_path,'r') i = 0 id_dic = {} for line in id_file.readlines(): id = line.split()[1] id_dic[id] = i i +=1 print(len(id_dic))43433 接着,我们读取sentence_TextCNN.json中的数据,存入data中。
# 单篇论文摘要在每个子空间上的数量 柱状图展示 import json path = 'D:/大学资料/大三下/项目实训/code+data/子空间标记数据+模型/sentence_TextCNN.json' # 由于文件中有多行,直接读取会出现错误,因此一行一行读取 file = open(path, 'r') data = [] for line in file.readlines(): data0 = json.loads(line) data.append(data0) print(len(data))232125 然后,我们就来构建List。这里遇到了一个错误,就是在for循环中,我只对一个List元素进行了修改,但是结果却是整个列表元素都被修改了。百度之后,发现了问题是python列表字典赋值错误,改正方法是使用深拷贝。 参考博文: python列表字典赋值错误 修改后的代码如下:
# 构建一个初始化的list,每一个元素对应一篇论文,每一个元素是一个字典, init_dic = {'paper_id':0,'0':0,'1':0,'2':0,'3':0,'4':0} init_data = [] for i in range(len(id_dic)): init_data.append(init_dic) #print(len(init_data)) print('0:',init_data[5]) from copy import deepcopy a = 1 temp = {} #将json数据进行统计 for paper in data: paper_id = str(paper['paper_id']) index = id_dic[paper_id] #print('init_data的索引:',index) #print(type(index)) # temp是data中对应一篇论文的字典,我们要根据json数据对字典进行跟新 temp = deepcopy(init_data[index]) #print('初始字典:',temp) temp['paper_id'] = paper_id # 摘要中一个句子对应的子空间标记 label = paper['textcnn_label'] #print(type(label)) # 对应的子空间个数+1 temp[label] +=1 #print('更新一次后的字典:',temp) #print('init_data的索引:',index) # 对init_data进行一次更新 init_data[index] = temp print(init_data[0])最后,我们将init_data保存为json文件,注意:paper_id对应为0的论文中没有对应的子空间数据。(子空间模型跑出来的结果里确实有很多论文摘要没有加子空间标记)。
# 将init_data保存为json文件 # paper_id对应为0的论文中没有对应的子空间数据 subSpace = 'D:/大学资料/大三下/项目实训/code+data/ACM数据集/subSpace.json' # 写入 JSON 数据 fsub = open(subSpace, 'w') for item in init_data: json.dump(item, fsub) fsub.write('\n') fsub.close() print('数据写入完毕')json文件内容如下:
利用pyecahrts库,定义了可视化函数,参数为两篇论文的id,输出为柱状图。 柱状图标题:子空间标签展示 柱状图的两个y轴标题:论文题目 一共五列:研究背景、研究问题、贡献、方法、实验
# 可视化展示部分 # 获取两篇论文的paper_id,进行子空间柱状图展示 from pyecharts.charts import Bar from pyecharts import options as opts from pyecharts.globals import ThemeType def visSubspace(id1,id2): # 获取标题数据 filepath0 = 'D:/大学资料/大三下/项目实训/code+data/ACM数据集/nodes.txt' f0 = open(filepath0,'r') title = [] for line in f0: lines = line.strip('\n') title.append(lines) # 获取子空间数据 subSpace = 'D:/大学资料/大三下/项目实训/code+data/ACM数据集/subSpace.json' f = open(subSpace, 'r') all_data = [] for line in f.readlines(): data0 = json.loads(line) all_data.append(data0) # 注意:paper_id必须是str类型,然后获取对应数据 paper_id1=str(id1) paper_id2=str(id2) index1 = id_dic[paper_id1] index2 = id_dic[paper_id2] article1 = all_data[index1] article2 = all_data[index2] title1 = title[index1] title2 = title[index2] y_data1 = [article1['0'],article1['1'],article1['2'],article1['3'],article1['4']] y_data2 = [article2['0'],article2['1'],article2['2'],article2['3'],article2['4']] bar = Bar(init_opts=opts.InitOpts(theme=ThemeType.WESTEROS)) bar.add_xaxis(xaxis_data = ['研究背景','研究问题','贡献','方法','实验']).add_yaxis(series_name=title1,y_axis = y_data1)\ .add_yaxis(series_name=title2,y_axis = y_data2) bar.set_global_opts(title_opts=opts.TitleOpts(title='子空间标签展示')) return bar测试一下:
# 获取论文id,这里假设是263和436,注意:paper_id必须是str类型 id1 = 263 id2 = 436 bar = visSubspace(id1,id2) bar.render() # 获取论文id,这里假设是706和735,注意:paper_id必须是str类型 id1 = 706 id2 = 735 bar = visSubspace(id1,id2) bar.render()可视化效果如下:
上述内容详见:
https://blog.csdn.net/WX1204/article/details/106770982