繁体   English   中英

方法 listIndividual() 使用“DBPedia_2014.owl”(2MB 大小的文件)需要超过 15 分钟

[英]Method listIndividual() takes more than 15 mins with “DBPedia_2014.owl” (2MB-size file)

“dbpedia_2014.owl”是一个组织不同概念的owl文件,不包含个体。 可以通过http://data.dws.informatik.uni-mannheim.de/dbpedia/2014/dbpedia_2014.owl.bz2下载

问题是当我在 Jena 中使用 listIndividual() 方法时,处理这么小的 (2MB) 文件需要超过 15 分钟。 代码如下:

import com.hp.hpl.jena.ontology.OntModel;
import com.hp.hpl.jena.rdf.model.ModelFactory;

public class OntModelTest
{
    public static void main(String[] args)
    {
        String fileName1 = new String("owl_qiwang_test/vc-db-1.rdf");
        String fileName2 = new String("owl_qiwang_test/dbpedia_2014.owl");

        OntModel ontModel = ModelFactory.createOntologyModel();

        ontModel.read(fileName2);

        long startMil = System.currentTimeMillis();
        System.out.println("Start: " + startMil);

        ontModel.listIndividuals();

        long endMil = System.currentTimeMillis();
        System.out.println("Duration: " + (endMil - startMil));

    }
}

我想知道为什么要花这么长时间才能做到这一点。 有任何想法吗?

您正在使用的方法的 javadoc 说它提供了一些推理功能。 这可能是性能问题的根源,因为推理的复杂性与大小没有密切联系:较大的本体通常比较小的本体更难推理,但是小本体可能真的很难推理。

https://jena.apache.org/documentation/javadoc/jena/org/apache/jena/rdf/model/ModelFactory.html#createOntologyModel--

 public static OntModel createOntologyModel()

回答一个新的本体模型,该模型将处理表示默认本体语言 (OWL) 的本体的内存模型。 默认文档管理器将用于加载本体的包含文档。

注意:为 OWL 和 RDFS 选择的默认模型包括一个弱推理器,其中包含一些蕴涵(例如子类和子属性层次结构上的传递闭包)。 想要根本不进行推理,或者想要更完整的推理的用户,应该使用允许声明首选 OntModel 规范的其他 createOntologyModel 方法之一。

我在这里有一个类似的问题

如果你想在不使用推理器的情况下使用listIndividuals()方法,你可以这样做:

  Model _model = model.getRawModel();
  OntModel newModel = new OntModelImpl(OntModelSpec.OWL_MEM, _model);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM