neo4j - 如何在知识图中对条件三元组进行建模
问题描述
我正在尝试基于文本文档(非结构化数据)构建知识图谱。因此,我目前的方法是从数据中提取三元组并将它们发送到图形数据库,例如 neo4j 以进行进一步分析。然而我注意到的是,在三元组的构造中有很多,让我们称它们为“条件三元组”。一个例子:
text = "Donald Trump was president-elect for the republican party since July 2016"
提供以下“有趣”的三元组:
(Donald Trump, was, president-elect)
(Donald Trump, was president-elect for, republican party)
(Donald Trump, was president-elect for republican party since, July 2016)
We thus need three 4 nodes:
1. Donald Trump
2. president-elect
2. republican party
2. July 2016
这些是可能与图中其他实体有有趣关系的 4 个节点。然而,我的困难(或怀疑)在于关系,这些似乎非常具体和漫长。
我不确定这是否真的是一个问题,或者包含如此长的关系是否是最佳实践,例如was president-elect for republican party since
.
我考虑过创建遍历,例如:
(Donald Trump)-[was]->(president-elect)-[for]->(republican party)-[since]->(July 2016)
这提供了更“简单”的关系,但是这是独特的遍历,因此其他遍历president-elects
与该特定节点无关,for
或since
关系不再可以唯一地跟踪到Donald Trump
.
因此,我现在倾向于应用更长的关系。因此,我的问题是:这是一种最佳实践方法,还是我错过了替代解决方案?
解决方案
这是一个可能的数据模型:
(:Person {name:"Donald Trump"})-[:ACHIEVED {date:'2016-07-01'}]->(pos:Position)
(pos)-[:HAS_TITLE]->(:Title {name:"President Elect"})
(pos)-[:FOR_PARTY]->(:Party {name:"Republican"})
、Person
和节点是唯一的Title
。Party
推荐阅读
- android - 如何使用应用程序中的意图打开谷歌地图并自动导航以显示两点之间的路线和距离
- python - 如何在python中将kml文件解析为树结构?
- vba - 如何拆分包含“硬回报”的单元格
- c# - N-layered Web Api 使用 automapper 在控制器和服务层之间传递 DTO 错误
- android - 如何在 Ubuntu 和 Android 上使用英特尔 SGX 服务提供商证书?
- python - matlab 函数 strel("line") 到 python
- maven - Jenkins 无法识别 pom.xml 的文件路径
- guacamole - 鳄梨酱 - 服务器响应时间过长
- mysql - “在不存在的地方插入” - 在本地 (5.6.35) 上工作,但不在服务器 (5.7.22) 上工作 - 不显示错误
- ios - 带有整页单元格的 UICollectionView VS 带有子视图控制器的 UIScrollView