【概念】如何在Neo4j中推理?

文章目录

  • 问题1:如何在neo4j中进行推理?
    • 回答1.1
    • 回答1.2
    • 回答1.3
  • 问题2:如何在neo4j中使用Jena推理?
    • 回答2.1
    • 回答2.2
    • 回答2.3

问题1:如何在neo4j中进行推理?

问题在stack overflow中的出处。

问题总结:

  1. 在neo4j中创建了语义图(只有存储),但怎么进行推理?
  2. 在neo4j中能否使用OWL推理机,或其他的推理引擎。
  3. 最好有解决方案和API可用。
  4. 这个post中(见问题2)也提到了。

回答1.1

推荐TypeDB。

  • 有内置的推理引擎。
  • 使用TypeQL中的规则,定义自己的推理逻辑。
  • 我在TypeDB的公司Vaticle工作。

回答1.2

我正研究这方面,请看这里最新的文章草稿,有专门的章节对图进行推理。

我正在研究neo4j->Prolog->neo4j方法:

  • (a)-[b]->(c)图形可以表示为b(a,c)
  • 将你的.db文件导出为.pl文件,在SWI Prolog中进行查询。
  • 但难点在于:推理后如何导入回neo4j。

我正在考虑使用BOLT 协议在neo4j db上直接遍历YieldProlog。
我计划为Yield方法添加专门的mods,以专门处理图形元素的标签和属性,因此我将要描述的知识库是neo4j数据库。

个人总结:

  • 没咋看懂,应该也是从neo4j中获取别的推理模型所需要的数据。

回答1.3

推荐看问题2,里面说了如何在neo4j中使用推理器:

  • 从neo4j中提取数据,并将其格式化为一组RDF三元组。
  • 将RDF三元组放入Jena模型中。
  • 此时,内存中有jena模型,可以使用现有jena API对模型进行推理。

个人总结:

  • neo4j不直接推理,而是提供推理所需要的数据。

问题2:如何在neo4j中使用Jena推理?

问题在SO中的链接。

问题描述:

  • neo4j之类的no sql 数据库,如何使用Jena推理机?
  • 我有一个neo4j的图,有很多三元组,我想基于它们使用Jean的API进行推理。
  • 我曾考虑过使用Jena的SDB/TDB组件,但我不知道如何将数据实际加载到我的模型中,因为SDB组件似乎只处理SQL数据库,而整个TDB javadoc的遍历似乎有点太多。我是否也应该为TDB模型定义某种配置文件?

评论:

  • 需要对你的三元组数据进行更多描述。

回答2.1

neo4j的官方说明:关于数据导出为三元组并加载到Jena模型中。

回答2.2

  1. 我正在创建jena API的neo4j实现。
    为此,我将ObjectProperty、Individual和OntClass子类化,并实现对neo4j端点的查询。

  2. 主要问题是,为了进行推理,必须将整个数据库加载到内存中,以便使用Jena的inmemory推理。

  3. 目前我的解决方案是使用一个“推理”服务器来处理这个问题,并将新结果写入主持久性层。当然,这只适用于长期推荐系统,而不适用于UI交互。

  4. 开源项目地址。

  5. 路径:能力数据库\src\main\scala\uzuzjmd\competency\persistence\neo4j。

回答2.3

  1. 您应该看看这个链接(链接失效,变成了neo4j的官网),它描述了neo4j和triplestores之间的连接。或者至少是可能的联系。
  2. neo4j模型与Jena使用的RDF模型非常不同。RDF由三元组组成,表示主语、谓词和对象。
  3. 下面是一个由三元组组成的图的示例。请注意URI用于标识资源,并注意节点通常是原子数据值。它们是URI、简单数字、字符串等等。
  4. 在Neo4j中,节点是“属性容器”。这意味着它们不仅是URI,而且实际上是信息包。关系连接节点。所以RDF“谓词”有点像Neo4j关系,但Neo4j节点不像RDF资源和文本。
  5. 如果您想在neo4j数据库上使用推理器,您的主要任务是从neo4j中提取数据,并将其格式化为一组RDF三元组。然后可以将这些RDF三元组放入Jena模型中。当内存中有该jena模型时,可以使用现有jena API将推理器用于该模型。

评论:
我将尝试通过Neo4J进一步研究RDF triple的表现形式,看看是否能想出一些办法,否则我将尝试手动从Neo4J数据库中提取数据。

你可能感兴趣的:(概念,知识图谱,neo4j,推理机)