【科学文献计量】关于使用metaknowledge读取文献后转化字典结构报错PD问题的解决方式

在使用metaknowledge进行文献计量时,遇到将文献转换为字典结构过程中出现的PD报错问题。经过排查,发现是月份解析函数无法处理包含年份的字段。通过调试源代码,针对“年 月 日”格式进行特殊处理,成功解决了解析问题,现在可以正常解析330条数据,并且代码修改后具有通用性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

关于使用metaknowledge读取文献后转化字典结构报错PD问题的解决方式

1 问题说明

在进行文献下载完毕后,使用metaknowledge读入文献时候是正常的,但是要通过RC.makeDict()方法转化为字典结构,却发生了PD报错问题(KeyError: 'PD'),如下
在这里插入图片描述

2 问题探索

顺着报错的提示,后面提示出现了其它的异常,如下。显示最终是helpFuns.py文件汇总的月份解析函数无法解析文献中的字段信息。
在这里插入图片描述
因此可以打开源文件进行调试。第一步,找到metaknowledge安装包在本地计算机的位置,输入代码mk.__path__,执行结果如下(也可以按照上面的的报错提示文件路径找到)
在这里插入图片描述
然后再上述路径指示,找到helpFuns.py文件并打开。在getMonth()函数的首行添加print(s)代码,查看要解析的数据。
在这里插入图片描述

第二步,修改保存代码后重新运行转化字典结构的代码。再次运行转化的代码,如下。结果输出中发现程序是可以正常解析部分月份,但是当文献字段中存在年份的时候,解析失败,从而出现报错。
在这里插入图片描述
第三步,找出程序无法进行解析的数据信息。进一步找到前一个文件中调用getMonth()函数的程序位置,即tagFunction.py文件中的Month()函数中(依据前面的报错信息),然后再插入调试代码print(val),注释掉调用getMonth()函数的代码,如下
在这里插入图片描述
第四步,保存修改的代码文件后重新运行字典格式转化的代码。执行完成后,输出结果如下。可以发现程序是没有办法对“年 月 日”的格式进行解析。(由于metaknowledge每次读入的数据都是乱序的,因此此处的输出结果顺序和上一次的输出不一致)
在这里插入图片描述

3 问题解决

找到了程序无法解析的字段信息后,只需要针对于无法解析的格式单独处理,即可。首先在tagFunction.py文件中修改传入的参数,修改为val[0]),并注释掉调试代码,如下
在这里插入图片描述
然后回到getMonth()函数中针对于“年 月 日”格式进行处理。首先在jupyter上面针对不同的核实进行测试,如下

monthDict = {'SPR': 3, 'SUM': 6, 'FAL': 9, 'WIN': 12, 'JAN' : 1, 'FEB' : 2, 'MAR' : 3, 'APR' : 4, 'MAY' : 5, 'JUN' : 6 , 'JUL' : 7, 'AUG' : 8, 'SEP' : 9, 'OCT' : 10, 'NOV' : 11, 'DEC' : 12}
# s = '2022 JUN 23'
# s = 'MAR-APR'
# s = 'MAR 1'
s = 'MAR'
if s.split()[0].isdigit():
    print(monthDict[s.split()[1]])
elif '-' in s:
    print(monthDict[s.split('-')[0]])
elif ' ' in s:
    print(monthDict[s.split()[0]])
else:
    print(monthDict[s])

输出结果如下
在这里插入图片描述

可以正常解析后,再把代码复制粘贴到getMonth()函数中,并注释掉原来的代码,如下
在这里插入图片描述

保存修改文件后,重新运行字典转化代码,并尝试将数据变成DataFrame结构,输出结果如下。
在这里插入图片描述
此时可以正常解析,进一步查看PD字段的信息,并进行value_counts()计数,和有效数据计数,如下。
在这里插入图片描述

修改源文件代码后可以正常解析数据,并且最终识别的数据量为330条。

4 数据核实

有必要核实原始文献中包含的时间信息,确定是否所有的格式都考虑到,输出文献的全部数据量为330,与成功解析的数据量相同。
在这里插入图片描述
进一步更换数据集,测试修改的代码是够具有通用性,换一份文献数据集进行核实。比如加载书中的wos数据集,此时可以正常读取,且检验缺失值中发现PD字段中并未有缺失,说明修改的代码可以通用。

在这里插入图片描述
如果后续仍然遇到PD字段报错,可以采用本文的思路,将无法识别的数据信息进行单独处理,然后再把可以处理的代码粘贴到源代码中即可。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lys_828

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值