以文本方式查看主题

-  中文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=84364)


--  作者:gflzx6506
--  发布时间:4/19/2010 10:54:00 AM

--  [求助]求教真正做过本体jena推理的高手!
阐述下问题: 我做一个本体和推理知识在医疗系统中的应用,现在我已经建立好了一个本体,其中也有实例,实例也是我在protege中添加进去的,本体我建立的是电子病历的本体,现在目前想法是,能不能根据病历上的症状 来推理出得什么病,这种推理方法可行吗?具体怎么实现,望高手解答下 不甚感激
--  作者:gflzx6506
--  发布时间:4/19/2010 10:40:00 PM

--  
没有高手能给解答下吗?
--  作者:skyingcat
--  发布时间:4/20/2010 3:57:00 AM

--  
这个应该是能的,不过我没有用过jena,用的是Protege owl api,但我觉得用什么都无所谓,原理一样。
你可以通过将症状 与 疾病之间添加一个属性,来表达他们的关系,然后根据具体的症状,就可以对应的得到疾病了。若是你的需求比较简单,这个几乎都不用到推理的
--  作者:gflzx6506
--  发布时间:4/20/2010 10:15:00 AM

--  
以下是引用skyingcat在2010-4-20 3:57:00的发言:
这个应该是能的,不过我没有用过jena,用的是Protege owl api,但我觉得用什么都无所谓,原理一样。
你可以通过将症状 与 疾病之间添加一个属性,来表达他们的关系,然后根据具体的症状,就可以对应的得到疾病了。若是你的需求比较简单,这个几乎都不用到推理的

我明白您的意思了,添加一个属性,就是说如果输入症状 就能得出疾病,这有点像仅仅是查询的味道了。。。呵呵, 但是毕业要求是要有推理功能。。。我也再想到底能推理出什么来


--  作者:peter-yin
--  发布时间:4/20/2010 2:25:00 PM

--  
帮楼主顶一下,我现在也希望有相关方面的参考资料。
我是用Protege建立好,如何通过相似度计算实现自动答疑系统。
这点可能跟楼主的要求差不多。
但是如何通过推理实现,这方面的资料太少了。
--  作者:skyingcat
--  发布时间:4/20/2010 4:54:00 PM

--  
以下是引用gflzx6506在2010-4-20 10:15:00的发言:
[quote]以下是引用skyingcat在2010-4-20 3:57:00的发言:
这个应该是能的,不过我没有用过jena,用的是Protege owl api,但我觉得用什么都无所谓,原理一样。
  你可以通过将症状 与 疾病之间添加一个属性,来表达他们的关系,然后根据具体的症状,就可以对应的得到疾病了。若是你的需求比较简单,这个几乎都不用到推理的
[/quote]

我明白您的意思了,添加一个属性,就是说如果输入症状 就能得出疾病,这有点像仅仅是查询的味道了。。。呵呵, 但是毕业要求是要有推理功能。。。我也再想到底能推理出什么来



类似这个我做过一个很简单的推理,用推理机实现,以你这个举例,给疾病添加一个充分必要条件的 restriction,例如为A疾病的充分必要条件为 症状表现为 C症状。
这时候,出现假如你查询C症状对应的疾病,那就建立一个对应的类他的必要条件是 症状表现为 C症状,这时候只要通过推理机,就可以推出这个对应的类是A疾病的子类。
不知道这样说,楼主明白不。。

应该满足不了楼主的需求,不过只是提供个何处可以推理的思路。。
具体的还得楼主自己好好研究啦,祝福楼主~


--  作者:gflzx6506
--  发布时间:4/21/2010 7:54:00 PM

--  
以下是引用skyingcat在2010-4-20 16:54:00的发言:
类似这个我做过一个很简单的推理,用推理机实现,以你这个举例,给疾病添加一个充分必要条件的 restriction,例如为A疾病的充分必要条件为 症状表现为 C症状。
这时候,出现假如你查询C症状对应的疾病,那就建立一个对应的类他的必要条件是 症状表现为 C症状,这时候只要通过推理机,就可以推出这个对应的类是A疾病的子类。
不知道这样说,楼主明白不。。

应该满足不了楼主的需求,不过只是提供个何处可以推理的思路。。
具体的还得楼主自己好好研究啦,祝福楼主~


首先感谢您对我的回答。。谢谢!
您这个推理思路我大概明白了,因为我这几天也再想这个思路问题,
我现在做到这个地步,就是本体中有个疾病的类,里面2个子类,比如A疾病和B疾病,然后我添加了实例,然后是这个2个疾病的症状,
并且在病人类中,也添加了2个病人 A病人拥有A疾病的症状,B病人拥有B疾病的症状

试着构造了下Rules,
String rules="[rule:(?y http://www.owl-ontologies.com/Ontology1271230855.owl#ownsed ?z)"+
  "(?x http://www.owl-ontologies.com/Ontology1271230855.owl#owns ?y)->"+
  "(?x http://www.owl-ontologies.com/Ontology1271230855.owl#owns ?z)]";

但是输出结果把所有的信息都输出了,就是有很多无关的信息,您知道怎么解决吗?
还有 如果加入您说的那个 充分必要条件,是不是对这个rules有一定得帮助呢?
谢谢



--  作者:skyingcat
--  发布时间:4/22/2010 1:08:00 PM

--  
以下是引用gflzx6506在2010-4-21 19:54:00的发言:
首先感谢您对我的回答。。谢谢!
您这个推理思路我大概明白了,因为我这几天也再想这个思路问题,
我现在做到这个地步,就是本体中有个疾病的类,里面2个子类,比如A疾病和B疾病,然后我添加了实例,然后是这个2个疾病的症状,
并且在病人类中,也添加了2个病人 A病人拥有A疾病的症状,B病人拥有B疾病的症状

试着构造了下Rules,
String rules="[rule:(?y http://www.owl-ontologies.com/Ontology1271230855.owl#ownsed ?z)"+
   "(?x http://www.owl-ontologies.com/Ontology1271230855.owl#owns ?y)->"+
   "(?x http://www.owl-ontologies.com/Ontology1271230855.owl#owns ?z)]";

但是输出结果把所有的信息都输出了,就是有很多无关的信息,您知道怎么解决吗?
还有 如果加入您说的那个 充分必要条件,是不是对这个rules有一定得帮助呢?
谢谢




我对如何构建规则这块不懂的。所以不能给楼主这方面的帮助了。
不过只是看楼主构建的类和实例,觉得有些问题。。
疾病症状应该不可以作为疾病的实例吧?
最好分别建一个疾病类与一个症状类,再定义疾病类与症状类之间的关系,并再做查询或推理的


--  作者:gflzx6506
--  发布时间:4/22/2010 2:50:00 PM

--  
[/quote]

我对如何构建规则这块不懂的。所以不能给楼主这方面的帮助了。
不过只是看楼主构建的类和实例,觉得有些问题。。
疾病症状应该不可以作为疾病的实例吧?
最好分别建一个疾病类与一个症状类,再定义疾病类与症状类之间的关系,并再做查询或推理的
[/quote]

这个是我阐述的不清楚,我确实是建立一个疾病类 它的子类是症状类 只是在添加实例时候,添加了一个疾病的实例 和症状的实例


--  作者:thsszl
--  发布时间:4/22/2010 7:50:00 PM

--  
String rules="[rule:(?y http://www.owl-ontologies.com/Ontology1271230855.owl#ownsed ?z)"+
  "(?x http://www.owl-ontologies.com/Ontology1271230855.owl#owns ?y)->"+
  "(?x http://www.owl-ontologies.com/Ontology1271230855.owl#owns1 ?z)]";
把推理后的新属性改名叫owns1,否则结果会把owns的实例对输出
--  作者:gflzx6506
--  发布时间:4/25/2010 10:03:00 PM

--  
以下是引用thsszl在2010-4-22 19:50:00的发言:
String rules="[rule:(?y http://www.owl-ontologies.com/Ontology1271230855.owl#ownsed ?z)"+
   "(?x http://www.owl-ontologies.com/Ontology1271230855.owl#owns ?y)->"+
   "(?x http://www.owl-ontologies.com/Ontology1271230855.owl#owns1 ?z)]";
把推理后的新属性改名叫owns1,否则结果会把owns的实例对输出

哦 非常感谢您,我原来也在考虑过这个问题,但是不知道怎么解决。原来我的输出确实是把实例对也输出了。
但是结果感觉没有做出推理。可能是我本体的问题,我再修改试一下。


--  作者:yezhunan3h
--  发布时间:4/25/2010 10:40:00 PM

--  
专家系统做得很好,为什么要用本体?
--  作者:n0132424
--  发布时间:4/27/2010 9:50:00 PM

--  
1.推理的能力是区别本体和其他technology的重要方面
2.我感觉如果要做好你这个系统,本体还要和机器学习,数据挖掘结合,

我的msn:bravezyj@hotmail.com
有机会讨论一下,因为我不常登录,


--  作者:gflzx6506
--  发布时间:4/28/2010 2:57:00 PM

--  
以下是引用thsszl在2010-4-22 19:50:00的发言:
String rules="[rule:(?y http://www.owl-ontologies.com/Ontology1271230855.owl#ownsed ?z)"+
   "(?x http://www.owl-ontologies.com/Ontology1271230855.owl#owns ?y)->"+
   "(?x http://www.owl-ontologies.com/Ontology1271230855.owl#owns1 ?z)]";
把推理后的新属性改名叫owns1,否则结果会把owns的实例对输出


我还想请教您一下:
我把本体重新修改了一下, X(人)拥有Y(病症) +Y(病症)被Z(疾病)拥有
推出X(人)拥有Z(疾病)
可是我的查询结果只是显示了 人拥有了什么病症 以及 疾病拥有的病症 并没有推理 请问 是不是我查询那代码写错了,还是reason那写错了

String rule = "[rule1:(?x http://www.owl-ontologies.com/Ontology1271230855.owl#owns ?y) " +
      "(?y http://www.owl-ontologies.com/Ontology1271230855.owl#ownsed ?z) " +
      "->(?x http://www.owl-ontologies.com/Ontology1271230855.owl#owns1 ?z)]";

  /*查询语句*/
  String queryString = "PREFIX med:<http://www.owl-ontologies.com/Ontology1271230855.owl#> " +
  "SELECT ?Patient_Information ?Fever_heat " +
  "WHERE {?Patient_Information med:owns ?Fever_heat} ";

/*创建推理机*/
  Reasoner reasoner2 = new GenericRuleReasoner(Rule.parseRules(rule));

  InfModel inf = ModelFactory.createInfModel(reasoner2, newmodel);
  Query query = QueryFactory.create(queryString);

  QueryExecution qe = QueryExecutionFactory.create(query, inf);
  ResultSet results = qe.execSelect();
  /*打印结果*/
  ResultSetFormatter.out(System.out, results, query);
  qe.close();


--  作者:thsszl
--  发布时间:4/28/2010 3:08:00 PM

--  
查询语句里面owns改为owns1,要推的是新关系
--  作者:gflzx6506
--  发布时间:4/28/2010 4:04:00 PM

--  
-------------------------------------------
| Patient_Information | Diaease           |
===========================================
| med:Heart_disease   | med:Heart_disease |
| med:patient2        | med:Heart_disease |
| med:Fever_heat      | med:Fever_heat    |
| med:patient1        | med:Fever_heat    |
-------------------------------------------

恩 非常感谢 结果出来了 我还想问下| med:Heart_disease   | med:Heart_disease | 为什么会显示出来,还有med这个东西 是什么意思?


--  作者:gflzx6506
--  发布时间:4/28/2010 4:08:00 PM

--  
还有个问题: 您还知道有哪些的推理规则吗?网上大部分都是这种 x和y的关系 y和z的关系 推出x和y的关系,别的规则我也没看出来 我自己看了下规则的构建,由于没有例子,构建出来的都是错的。。您指点我下 谢谢
--  作者:spf3d1415926
--  发布时间:5/2/2010 11:13:00 AM

--  
用jena rules就可以实现推理
--  作者:gflzx6506
--  发布时间:5/5/2010 7:30:00 PM

--  
我主要想学习下如何构造出新的规则来
--  作者:spf3d1415926
--  发布时间:5/6/2010 12:18:00 AM

--  
你可以看一下jena的文档。里面有jena rules的语法和使用例子
--  作者:service365
--  发布时间:5/6/2010 12:07:00 PM

--  
以下是引用skyingcat在2010-4-20 3:57:00的发言:
这个应该是能的,不过我没有用过jena,用的是Protege owl api,但我觉得用什么都无所谓,原理一样。
你可以通过将症状 与 疾病之间添加一个属性,来表达他们的关系,然后根据具体的症状,就可以对应的得到疾病了。若是你的需求比较简单,这个几乎都不用到推理的


为什么不用jena,而是采用Protege?
--  作者:service365
--  发布时间:5/6/2010 12:08:00 PM

--  
以下是引用gflzx6506在2010-4-20 10:15:00的发言:
[quote]以下是引用skyingcat在2010-4-20 3:57:00的发言:
这个应该是能的,不过我没有用过jena,用的是Protege owl api,但我觉得用什么都无所谓,原理一样。
  你可以通过将症状 与 疾病之间添加一个属性,来表达他们的关系,然后根据具体的症状,就可以对应的得到疾病了。若是你的需求比较简单,这个几乎都不用到推理的
[/quote]

我明白您的意思了,添加一个属性,就是说如果输入症状 就能得出疾病,这有点像仅仅是查询的味道了。。。呵呵, 但是毕业要求是要有推理功能。。。我也再想到底能推理出什么来



推理的过程本身就是查询吧,呵呵
不知道这么说是否有人同意
--  作者:service365
--  发布时间:5/6/2010 12:46:00 PM

--  
以下是引用gflzx6506在2010-4-28 16:08:00的发言:
还有个问题: 您还知道有哪些的推理规则吗?网上大部分都是这种 x和y的关系 y和z的关系 推出x和y的关系,别的规则我也没看出来 我自己看了下规则的构建,由于没有例子,构建出来的都是错的。。您指点我下 谢谢


这规则也太弱了吧,呵呵
--  作者:gflzx6506
--  发布时间:5/16/2010 10:42:00 PM

--  
呵呵。。我的确就会构造这个规则,别的也没什么例子,不知道怎么构造。。
你有什么规则例子 我拿来 学习下
--  作者:yahua8023
--  发布时间:6/2/2010 10:23:00 AM

--  owl api
请问有OWL api 方面的资料吗?我现在在学owl语言,谢谢。邮箱是:wangyahuaxxy8023@163。com
还想问一下,owl语言的执行需要什么环境呀?
W 3 C h i n a ( since 2003 ) 旗 下 站 点
苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
140.625ms