基于规则嵌入的论文比对系统——创新实训记录4

6-15 可视化形式思考+子空间标签数据展示实现

可视化形式思考

一、论文集合层面:
① 不同的会议、年份形成不同的集合,平均被引用量(柱状图)
② 不同的会议、年份形成不同的集合,平均引用量(柱状图)
③ 不同的会议、年份形成不同的集合,摘要词云或关键词词云

二、单篇论文层面:
① 摘要在每个子空间上(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()

可视化效果如下:
在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值