• 利用推理机生成新的三元组

    普通类
    • 支持
    • 批判
    • 提问
    • 解释
    • 补充
    • 删除
    • 一、问题

    往语义数据库存入相关信息时,往往存在信息缺失的情况,如A的同音字是B,那么存在B的同音字是A,如果每次存入数据时都要进行这样的显式转换显然是不经济的。

    • 二、解决方案

    利用pellet推理机效验三元组,并找出相关对象属性,然后推理,最后重新生成信息。

    • 三、代码
    1. package chinese;  
    2.   
    3. import java.util.Iterator;  
    4.   
    5. import org.junit.Test;  
    6. import org.junit.runner.RunWith;  
    7. import org.mindswap.pellet.jena.PelletInfGraph;  
    8. import org.mindswap.pellet.jena.PelletReasonerFactory;  
    9. import org.springframework.test.context.ContextConfiguration;  
    10. import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;  
    11.   
    12. import bnu.edu.lcell.services.ITDBReadService;  
    13. import bnu.edu.lcell.utils.WebDirUtil;  
    14.   
    15. import com.hp.hpl.jena.ontology.ObjectProperty;  
    16. import com.hp.hpl.jena.ontology.OntModel;  
    17. import com.hp.hpl.jena.query.Dataset;  
    18. import com.hp.hpl.jena.query.ReadWrite;  
    19. import com.hp.hpl.jena.rdf.model.Model;  
    20. import com.hp.hpl.jena.rdf.model.ModelFactory;  
    21. import com.hp.hpl.jena.rdf.model.Property;  
    22. import com.hp.hpl.jena.rdf.model.RDFNode;  
    23. import com.hp.hpl.jena.rdf.model.Resource;  
    24. import com.hp.hpl.jena.rdf.model.Statement;  
    25. import com.hp.hpl.jena.rdf.model.StmtIterator;  
    26. import com.hp.hpl.jena.tdb.TDBFactory;  
    27. import com.hp.hpl.jena.tdb.base.file.Location;  
    28. import com.hp.hpl.jena.util.iterator.ExtendedIterator;  
    29. import com.hp.hpl.jena.vocabulary.OWL;  
    30. import com.hp.hpl.jena.vocabulary.RDF;  
    31.   
    32. /** 
    33.  * 推理生成新知识 
    34.  * @author : 丁国柱 
    35.  * @date : 2014-10-21 下午5:19:16 
    36.  */  
    37. @RunWith(SpringJUnit4ClassRunner.class)  
    38. @ContextConfiguration(locations = { "/applicationContext-resources.xml",  
    39.         "/applicationContext-security.xml" })  
    40. public class CreateNewStatement {  
    41.   
    42.     @javax.annotation.Resource  
    43.     private ITDBReadService tdbReadService;  
    44.   
    45.     @Test  
    46.     public void test() {  
    47.   
    48.         // System.out.println("开始记录数:" + this.tdbReadService.queryAllCount());  
    49.         WebDirUtil dirUtil = new WebDirUtil();  
    50.         Location location = new Location(dirUtil.getWebDir().replace(  
    51.                 "/WebRoot""")  
    52.                 + "/lcellDB/learningcell4");  
    53.         Dataset dataset = TDBFactory.createDataset(location);  
    54.         dataset.begin(ReadWrite.WRITE);  
    55.   
    56.           
    57.         Model model = dataset.getDefaultModel();  
    58.   
    59.         //加入测试数据  
    60.         Resource a = model.createResource("http://lcell.bnu.edu.cn#A");  
    61.   
    62.         Resource b = model.createResource("http://lcell.bnu.edu.cn#B");  
    63.   
    64.         Property p = model.createProperty("http://lcell.bnu.edu.cn#P");  
    65.   
    66.         //增加一个对称性属性  
    67.         model.add(p, RDF.type, OWL.SymmetricProperty);  
    68.   
    69.         model.add(a, p, b);  
    70.   
    71.         OntModel ontModel = ModelFactory.createOntologyModel(  
    72.                 PelletReasonerFactory.THE_SPEC, model);  
    73.         //如果数据有问题会报错  
    74.         ((PelletInfGraph) ontModel.getGraph()).classify(); // or prepare or  
    75.                                                             // whatever  
    76.         //取得所有的对象属性  
    77.         ExtendedIterator<ObjectProperty> extendedIterator = ontModel  
    78.                 .listObjectProperties();  
    79.         ObjectProperty objectProperty;  
    80.         for (; extendedIterator.hasNext();) {  
    81.             objectProperty = extendedIterator.next();  
    82.             StmtIterator iterator = ontModel.listStatements((Resource) null,  
    83.                     objectProperty, (RDFNode) null);  
    84.             //推理获取数据  
    85.             for (; iterator.hasNext();) {  
    86.                 Statement statement = iterator.next();  
    87.                 System.out.println(statement.getSubject() + "  "  
    88.                         + statement.getPredicate() + "  "  
    89.                         + statement.getObject());  
    90.             }  
    91.         }  
    92.   
    93.     }  
    94. }  
    • 标签:
    • model.createresource
    • 推理
    • 属性
    • 数据
    • null
    • 利用
    • objectproperty
    • 问题
    • http
    • model.add
    • 元组
    • 生成
  • 加入的知识群:
    学习元评论 (0条)

    评论为空
    聪明如你,不妨在这 发表你的看法与心得 ~



    登录之后可以发表学习元评论
      
暂无内容~~
顶部