结合数据处理部分获取的主题词,在实体-关系-实体三元组中,我们称第一个实体为触发者、第二个为受事者。只有触发者和受试者都为主题词时,才确定为图数据的三元组。
# triple
import pandas as pd
import numpy as np
try:
tri=pd.read_csv("excel/三元组.csv")
node=pd.read_excel("excel/node_centrality_pro.xlsx",sheet_name="topic").iloc[:,0].values
l=len(node)
f1= lambda a,b:[i in j for i,j in zip(a,b)]
f2= lambda a,b:[i and j for i,j in zip(a,b)]
lst=[]
for i in tri.index.values:
node1 = pd.Series([tri.loc[i].to_dict()['0']]*l).fillna('').values
node2 = pd.Series([tri.loc[i].to_dict()['2']] * l).fillna('').values
out=f2(f1(node,node1),f1(node,node2))
if np.sum(out)!=0:
lst.append(tri.loc[i].to_dict().values())
df=pd.DataFrame(lst)
df.to_excel("excel/图谱and三元组.xlsx")
except Exception as e:
print(e)
尽管做了这样一个简单的筛选,最后留下的三元组质量不是很高。且三元组谓词几乎不能精确表达出三元组内容,用主题词虽然把实体分得更准确,但谓词的信息不足时,没有其他较长实体中包含的上下文信息很难人工补全三元组(注意问题的关键在谓词)。最后人工筛查以及补全过程非常依赖于对历史知识的熟悉程度。累得慌。
处理的工作见图谱三元组.xlsx
本文还借助了文章目录将内容组织得更有逻辑(一类关系),但这样仍旧增加了人工工作量。共词分析在虽然减少了很多无用的三元组,但要真正将选出的三元组构建知识图谱,它发挥的作用还不够显著。
Interactive Graph渲染
没想到我最初会觉得最难的部分,竟然是花时间最少最简单部分,这个就是直接套用现有的代码了
白乔原创:图数据在线交互框架InteractiveGraph
附上本文的代码
链接:https://pan.baidu.com/s/1vgaiisZoHAUnaI_qMiLLag
提取码:huaf