gpt4 book ai didi

java - 使用 OWLAPI 和 JFact 推理器获取特定类别的所有个体

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:09:21 29 4
gpt4 key购买 nike

有没有办法让特定类别的所有个体都使用 reasoner?Reasoner 因为我想得到该类的所有推断和断言的个体。我正在使用 JFact reasoner,我正在尝试循环和 if 语句。我想找到类(class)的个人,例如“人”。但是我看不到个人。对以下代码有任何想法或是否有任何方法可用于此目的?

for (OWLClass c : myPizza.getClassesInSignature()) {
NodeSet<OWLNamedIndividual> instances = reasoner.getInstances(c, true);
System.out.println(c.getIRI().getFragment());
if (c.getIRI().getFragment().equals("Person")){

for (OWLNamedIndividual i : instances.getFlattened()) {
System.out.println(i.getIRI().getFragment());

}
}
else {
continue;
}
break;

}

谢谢

最佳答案

调用 reasoner.getInstances(c, true); 只会给你 c 的/direct/实例;如果你之后的个体是 c 的子类的实例,它们将被跳过。切换到 reasoner.getInstances(c, false); 以包含子类的实例。

您还在第一次迭代后调用了 break;。如果 person 不是签名中的第一类,您将永远不会查找 person 的实例。

您可以稍微更改您的代码以减少推理工作:

for (OWLClass c : myPizza.getClassesInSignature()) {
if (c.getIRI().getFragment().equals("Person")){
NodeSet<OWLNamedIndividual> instances = reasoner.getInstances(c, false);
System.out.println(c.getIRI().getFragment());
for (OWLNamedIndividual i : instances.getFlattened()) {
System.out.println(i.getIRI().getFragment());
}
}
}

编辑:来自评论的注释,如果您希望看到 SWRL 推断的个人,您需要使用支持 SWRL 的推理器,例如 Pellet 或 HermiT。 JFact 不支持 SWRL 规则。

关于java - 使用 OWLAPI 和 JFact 推理器获取特定类别的所有个体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28072721/

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