当前位置: 首页 > 知识库问答 >
问题:

OWLAPI慢速计算不相交公理

盖夕
2023-03-14
for (OWLClass clazz1 : ontology.getClassesInSignature()) {
    for (OWLClass clazz2 : ontology.getClassesInSignature()) {
        OWLAxiom axiom = MyModel.factory.getOWLDisjointClassesAxiom(clazz2, clazz1);
            if(  !(ontology.containsAxiom(axiom)) && reasoner.isEntailed(axiom))
            {
                System.out.println(clazz2.toString() + " disjoint with " + clazz1.toString());
            }

问题是:执行时间非常慢,我会说是永恒的。即使我减少了一些if语句的比较数,情况还是一样的。

Protege似乎非常快地计算出这些推断的公理,并且它基于我正在使用的相同API(OWLAPI)。那么,我是不是走错了路?

共有1个答案

阎辰钊
2023-03-14

分析代码很可能会发现慢的部分是

reasoner.isEntailed(axiom)

此表单要求推理器重新计算每个类对的蕴涵,包括Clazz1Clazz2相等的对(您可能想跳过它)。

或者,您可以对signature中的类进行一次迭代,并使用reasoner获取所有不相交的类:

Set<OWLClass> visited=new HashSet<>();
for (OWLClass c: ontology.getClassesInSignature()) {
  if (visited.add(c)) {
    NodeSet set = reasoner.getDisjointClasses(c);
    for (Node node: set.getNodes()) {
        System.out.println("Disjoint with "+c+": "+node);
        visited.addAll(node.getEntities());
    }
  }
}
 类似资料:
  • 正如您所看到的,瓶颈是由3个循环给出的,这些循环使应用程序变慢;此外,对本体的每一类都执行计算分离过程。 是否有更有效的方法来获得不交点,并检查公理是否被断言或派生?

  • 我遇到了java在SSL上使用时速度较慢的问题。解决方案是添加 现在,java.security文件已经包含 “/dev/urandom”与“/dev/./urandom”不同的原因和方式。为什么java不接受“/dev/urandom” 对于我正在运行的JVM,如何判断它们是否使用了正确的urandmon设备(vs random)

  • 我有一张大表,上面有很多公式,它们之间有一个依赖层次结构。它以具有日期值的单元格开始。然后,单元格x:y(和其他单元格)有依赖于该日期的公式。那么单元格w:z(和其他单元格)有一个依赖于单元格x:y的公式。诸如此类... 这个带有日期值的主单元格使用apache POI填充。 现在我的问题是:当我打开生成的excel文件时,日期在那里,但没有一个公式被计算出来。它们都存在错误“”。似乎当公式试图自

  • 本文向大家介绍AUC的计算公式相关面试题,主要包含被问及AUC的计算公式时的应答技巧和注意事项,需要的朋友参考一下 参考回答: M为正样本数,N为负样本数。Rank的值代表能够产生前大后小这样的组合数,但是其中包含了(正,正)的情况,所以要减去正例的个数所以可得上述公式。

  • 本文向大家介绍Python计算公交发车时间的完整代码,包括了Python计算公交发车时间的完整代码的使用技巧和注意事项,需要的朋友参考一下 问题描述 公交车每天会按照一定间隔发车 , 由于不同时间段经过拥堵路段的用时不 - 样,所以给定路线下公交车每趟 ( 每车次 ) 行驶时间差异也很大,现在给出某路线某天各车次公交车离开始发站和到达终点站的时间,请求出该天耗时最长车次的行驶时间。输入说明 : 第

  • 问题内容: 我正在使用NLTK在语料库中搜索n- gram,但是在某些情况下会花费很长时间。我已经注意到,计算n元语法在其他软件包中并不罕见(显然,Haystack具有某些功能)。如果我放弃NLTK,这是​​否意味着可以以更快的方式在语料库中查找n- gram?如果是这样,我可以使用什么来加快速度? 问题答案: 由于您没有指明是想要单词级还是字符级的n-gram,因此我将假设前者,而不会失去一般性