Python 从数据行中的嵌套字典中获取项值,并去掉其余的项
我实现了,它提取嵌入嵌套字符串中的主语、谓语、宾语信息(以ARG0、V、ARG1等形式)。但是,我需要确保每个输出都链接到原始句子的给定Python 从数据行中的嵌套字典中获取项值,并去掉其余的项,python,pandas,triples,allennlp,Python,Pandas,Triples,Allennlp,我实现了,它提取嵌入嵌套字符串中的主语、谓语、宾语信息(以ARG0、V、ARG1等形式)。但是,我需要确保每个输出都链接到原始句子的给定ID 我生成了以下数据帧,其中OIE output包含allennlp算法的原始输出 电流输出: 句子 身份证件 OIE输出 “那个女孩去看电影了” “abcd” {'verbs':[{'verbs':'go','description':'[ARG0:The girl][V:go][ARG1:to The cinema]} “他是对的,他是一名工程师” “ef
ID
我生成了以下数据帧,其中OIE output
包含allennlp算法的原始输出
电流输出:
句子
身份证件
OIE输出
“那个女孩去看电影了”
“abcd”
{'verbs':[{'verbs':'go','description':'[ARG0:The girl][V:go][ARG1:to The cinema]}
“他是对的,他是一名工程师”
“efgh”
{'verbs':[{'verbs':'is','description':'[ARG0:He][V:is][ARG1:right]},{'verbs':'is','description':'[ARG0:He][V:is][ARG1:an engineer]}
你的第二个想法应该可以做到:
导入ast
df[“OIE三元组”]=df[“OIE输出”].apply(ast.literal\u eval)
df[“OIE三元组”]=df[“OIE三元组”]。应用(lambda val:[a_dict[“description”]
对于val[“动词”]]中的dict
df=df.分解(“OIE三元组”).下降(columns=“OIE output”)
如果“OIE输出”
值不是真正的dict
s而是str
ings,我们通过ast.literal\u eval
将其转换为dict
s。(因此,如果它们是dict
s,您可以跳过前两行)
然后,我们得到一个系列中每个val
ue的列表,该系列由最外层的dict键的“description”
组成,由“verbs”
最后,分解
此说明
列出并删除“OIE输出”
列,因为它不再需要
得到
sentence ID OIE Triples
0 'The girl went to the cinema' 'abcd' [ARG0: The girl] [V: went] [ARG1:to the cinema]
1 'He is right and he is an engineer' 'efgh' [ARG0: He] [V: is] [ARG1:right]
1 'He is right and he is an engineer' 'efgh' [ARG0: He] [V: is] [ARG1:an engineer]
不知道“ast”方法。干杯我还找到了另一种方法来解决这个问题,这更费时,但效果很好:用“to_dict”将初始df转换为dict;弹出不需要的嵌套项,并转换回新的df。