首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件开发 >

OWL本体中pellet推理机跟HermiT推理机效率比较

2012-11-19 
OWL本体中pellet推理机和HermiT推理机效率比较本体推理引擎pellet和hermit都完成了OWLAPI的引擎接口的实现

OWL本体中pellet推理机和HermiT推理机效率比较

本体推理引擎pellet和hermit都完成了OWLAPI的引擎接口的实现,但是到底那个推理机速度快?pellet是传统的推理机,hermit是比较新的开源的推理机,为了做个比较,笔者做了个实验。分别用两个推理机遍历一个比较大的本体的所有类,运行在同一台电脑上,除了采用的推理机不同,其余代码都相同,这样的比较就能够说明问题的。结果显示:

Hermit更胜一筹。

Hermit:所耗时间:10552ms  

pellet:所耗时间:15083ms 

OWL本体中pellet推理机跟HermiT推理机效率比较

 

 

 

 

 

 

 

 

 

OWL本体中pellet推理机跟HermiT推理机效率比较

 

所测试代码如下:

package org.coode.owlapi.examples;

import org.semanticweb.HermiT.Reasoner;
import org.semanticweb.owlapi.apibinding.OWLManager;
import org.semanticweb.owlapi.model.IRI;
import org.semanticweb.owlapi.model.OWLClass;
import org.semanticweb.owlapi.model.OWLOntology;
import org.semanticweb.owlapi.model.OWLOntologyManager;
import org.semanticweb.owlapi.reasoner.Node;
import org.semanticweb.owlapi.reasoner.NodeSet;
import org.semanticweb.owlapi.reasoner.OWLReasoner;
import com.clarkparsia.pellet.owlapiv3.PelletReasonerFactory;

public class Tr {
 public static OWLOntologyManager manager;
 public static OWLOntology ontology;
 public static OWLReasoner reasoner;

 public final static void main(String[] args) throws Exception {
  long t1 = System.currentTimeMillis();//开始计时
  manager = OWLManager.createOWLOntologyManager();
  ontology = manager.loadOntology(IRI.create("file:/d:/ontology.owl"));
  
  //reasoner = PelletReasonerFactory.getInstance().createReasoner(ontology);// pellet推理机
   reasoner=new Reasoner(ontology);//hermit推理机
  
  Node<OWLClass> topNode = reasoner.getTopClassNode();
  printnode(topNode);
  long t2 = System.currentTimeMillis();//结束计时
  System.out.println("所耗时间:"+(t2 - t1)+"ms");
 }

 public static void printnode(Node<OWLClass> nc) {
  if (nc.isBottomNode()) {
   return;
  } else {
   NodeSet<OWLClass> child = reasoner.getSubClasses(nc
     .getRepresentativeElement(), true);
   for (Node<OWLClass> c : child) {
    if (!c.isBottomNode()) {
     String ss = c.getEntities().toString();
     System.out.println(ss.substring(ss.indexOf("#") + 1, ss
       .length() - 2));
     printnode(c);
    }
   }
  }
 }
}

测试所用的本体为10M多的大本体,这样可以增加说服力,当然随便一个OWL文件也可以用来测试推理机的速度。

 

 

 

 

 

 

 

 

热点排行