以文本方式查看主题

-  中文XML论坛 - 专业的XML技术讨论区  (http://bbs.xml.org.cn/index.asp)
--  『 Semantic Web(语义Web)/描述逻辑/本体 』  (http://bbs.xml.org.cn/list.asp?boardid=2)
----  [原创]Jena规则推理经验总结  (http://bbs.xml.org.cn/dispbbs.asp?boardid=2&rootid=&id=92755)


--  作者:kidleilei
--  发布时间:7/16/2011 7:07:00 PM

--  [原创]Jena规则推理经验总结
1.Reasoner:
   
之前写过壹佰多条推理规则,主要是基于人物关系的,推理机使用的是GenericRuleReasoner,加载解析rules文件很方便。

2.Model:

   
Model使用的是InfModel(Model的子接口)进行推理,而不是OntModel(InfModel的子接口),不使用OntModel的原因是因为其把整个数据集都加载入内存,资源占用厉害,这个我咨询过jena开发组。这次项目的owl文件粗略估计约1G以上,大概1000万Triples,索引一下也得3--4G,所以一开始就没有使用这个接口。不过OntModel是专为OWL设计的,可以支持很多内置的原语,也十分的方便,适用于小的数据集。InfModel使用的是RDFS++帮助推理,支持一部分推理语法,不过已经够用了。

3.problem:

     
如果本体库进行了索引,使用Model进行不带推理的检索,效率很高。5万Triples检索只需0.2秒。使用InfModel进行带推理的检索(我使用的是默认的hybrid
engine,包括了向前和向后chaining
engine),效率严重依赖于规则库的大小以及本体库内部类属结构,主要原因是InfModel在进行基于规则的推理之前(自动调用prepare())会逐条匹配规则前提,推理出的结论会加入数据集,下次匹配会在新的数据集中重新匹配,由于数据量大,规则多,逐条匹配效率很低,也会产生很多中间结果,内存吃紧。我现在就是这样的问题。经过测试5万Triples调用prepare()需要耗费2分钟,这让用户情何以堪!


4.solution:

     
开始想的是把本体库持久化在Mysql里面,当然是包含推理结果的Model啦,之后再索引,使用Model检索。估计俺没有找到法门,Mysql序列化时老报错,google的结果也不能解决我的问题,哥是相当郁闷!索性不搞了,仔细研究下,发现就算持久化了,也没有建立索引啊,检索效率同样低。

     
所以就有了现在的方法:使用InfModel的getDeductionsModel()方法,先获得推理结果Model并写出,当然会很耗时,之后再将写出的deductions
Model索引到原来的本体库,检索时使用Model代替InfModel。这样就能得到很好的效果。

原文:http://qing.sina.com.cn/1380391505/52471a51330000h2.html


--  作者:jiangong
--  发布时间:8/30/2011 3:27:00 PM

--  
楼主您好 我也在写语义的推理   能把您写的规则和本体文件及推理的代码给我发一下吗  
我现在有些理不清头绪   不胜感谢  我的邮箱726557157@qq.com
--  作者:wangtao534
--  发布时间:9/6/2011 4:50:00 PM

--  
正在做这方面的应用研究,求源码及规则文件,感激不尽!aiju0101@126.com
--  作者:jlgreen
--  发布时间:1/10/2013 6:09:00 PM

--  
求能运行的代码学习学习,jl_green@163.com,先谢哈
W 3 C h i n a ( since 2003 ) 旗 下 站 点
苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
9,046.875ms