我正在使用Jena运行Pellet,如下所示:
public void storeInferredModel(Data data) {
System.out.println("creating inferred dataset ");
Dataset dataset = TDBFactory.createDataset(data.getInferredResultsPath());
System.out.println("creating OntModel ");
OntModel Infmodel = ModelFactory.createOntologyModel(
PelletReasonerFactory.THE_SPEC,
dataset.getNamedModel(this.URL));
System.out.println("adding schema (OWL) to OntModel");
Infmodel.add(this.owl);
System.out.println("adding data (RDF) to OntModel ");
Infmodel.add(data.tdb);
System.out.println("creating ModelExtractor ");
ModelExtractor ext = new ModelExtractor(Infmodel);
System.out.println("replacing OntModel by the Extracted Model");
dataset.replaceNamedModel(this.URL, ext.extractModel());
System.out.println("saving inferred model");
Infmodel.close();
System.out.println("closing inferred dataset");
dataset.close();
}
我在Pellet Reasoner with Jena下发了上一篇文章。 我的TDB或原始数据是2.7G。我一直在运行推理器反对TDB,但我遇到了“PermGen spaces java”的问题,虽然我给程序提供了大约70G内存,而推理器只采用了30G然后崩溃了。换句话说,它没有达到计算机内存的最大值
我正在运行Linux和Java 64位,服务器中有83 G内存。我已经坚持了一个星期。
答案 0 :(得分:-1)
Pellet执行 in-memory 的推理。与TDB一起使用它不会像我怀疑你认为的那样工作; TDB只是存储,Pellet会将推理所需的任何内容提取到内存中。
此外,告诉我们您的数据是2.7G并不是非常有用。 TBox的表现力对推理性能的影响与大小相同或更多(磁盘上的大小无用,知道三元组的数量是一个更好的指标)。
因此,了解TBox中的内容对于更好的诊断至关重要。鉴于我们不知道任何关于你正在为Pellet提供什么,我只能猜测TBox非常具有表现力,或者非常大,或两者兼而有之。
Pellet可以使用大型本体,它可以很好地处理NCI词库,但是TBox是无法处理的。 DL推理很难,甚至比较难。
您可能还需要查看DL手册,以便对一些有用的背景材料进行详细审核。