gpt4 book ai didi

semantics - 切换耶拿推理机

转载 作者:行者123 更新时间:2023-12-03 06:59:56 25 4
gpt4 key购买 nike

我有一个 Jena 本体模型 ( OntModel ),我正在以编程方式修改它。该模型最初是使用 default ModelFactory method to create an Ontology model (with no parameters) 创建的。问题是,随着程序运行和模型更改,默认的 Jena Reasoner 将会运行(并且运行、运行、运行)。这个过程对于我的需要来说太慢了,并且在大型数据集上会耗尽内存。

我将程序更改为使用 a different ontology model factory method创建一个没有推理机的模型。它运行得非常快,并且没有出现我之前看到的任何内存问题(即使对于非常大的数据集)。这种方法的问题是我只能通过直接使用它的直接类类型来访问数据(我无法使用它的父类来访问对象)。

例如,假设我有两个类资源,“花”和“种子”。它们继承自共同的亲本“植物 Material ”。我的程序获取所有“种子”,运行一个名为“grow”的方法,该方法将“种子”对象转换为“花”对象。使用 Reasoner(甚至是微型 Reasoner)时,“grow”方法运行速度太慢并且会耗尽内存。如果我关闭 Reasoner,那么我将无法使用“植物 Material ”类访问所有“花”和“种子”。

是否有一种首选方法(一种快乐的媒介)来做到这一点...允许使用其父类(super class)访问对象,同时又快速且不占用内存?

我一直在寻找一种在运行“grow”方法时“关闭推理器”的方法,然后在该方法完成后将其恢复原状。这有可能吗?

最佳答案

我有一些help and suggestions ,那么这就是我解决这个问题的方法。

基本上,我在没有 Reasoner 的情况下访问了另一个模型,将我对基本模型的所有更改批量化,然后使用 Reasoner 反弹完整模型以获取更新。

这是一些伪代码。它并不完全符合我的“真实”场景,但你明白了。

// Create a model with a reasoner and load the full model from owl files or
// whatever
OntModel fullModel = ModelFactory.createOntologyModel();
fullModel.read(...);

// create a model without a reasoner and load it from the full model with
// reified statements
OntModel basicModel = ModelFactory.createOntologyModel(OntModelSpec.OWL_MEM);
basicModel.add(fullModel);

// batch modifications to the basic model programatically
//(**** RUNS REALLY QUICK *****)

// rebind the full model
fullModel.rebind();

// continue on....

关于semantics - 切换耶拿推理机,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/654189/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com