2014-07-22 6 views
1

OpenIE4.1 jar 파일에서 생성 한 출력을 변환 할 API (Jena, OpenRDF 또는 Protege) 중 하나를 사용하는 것이 좋습니다 (http://knowitall.github.io/openie/에서 다운로드 가능).). 다음은 샘플 OpenIE4.1 출력 형식 : 자신감은 내가 출력 위에서이 패턴을 따라 트리플 생산 계획RDF API (Jena, OpenRDF 또는 Protege)를 사용하여 OpenIE 출력 변환

The rail launchers are conceptually similar to the underslung SM-1 
    0.93 (The rail launchers; are; conceptually similar to the underslung SM-1) 

주제, 술어, 객체 삼중 다음 점수 (사실, 위의 출력 수백왔다 무료 텍스트 문서의 집합을 처리하여 생성 만 신뢰는) 특정 값보다 큰이 처리됩니다 점수 :

subject: The rail launchers 
    predicate: are 
    object: conceptually similar to the underslung SM-1 

(신뢰 점수는 무시됩니다

을 감안할 때)

  1. 각각 별개의 빈 노드 식별자 만들기 : 파일의 제목을 각각 별개의 빈 노드 식별자 생성
  2. 을 (의 그것을 bnode_s 부르 자) : 파일의 객체를 정의
  3. 을 (의이 bnode_o를 부르 자) 각각 별개의 술어 BTW

에 대한 URI, 나는 예를 요한이 마리아에게 생일 선물 (요한 준위한 세 쌍둥이 이상을 생산 출력을해야합니까; 준; 메리; 생일 선물) 이것은 제품 RDF 트리플렛에 더 복잡합니다.

그러나 위에서 언급 한 API에 익숙하지 않고 API에서 사용할 수있는 입력 형식을 알지 못합니다.

+0

을 나는 당신의 이전의 질문을 보았지만, 여기에는 자급 자족 할만한 것이 충분하지 않습니다. 예를 들어, "파일의 각 개별 항목 : 제목에 빈 노드 식별자 만들기"를 원하지만 "파일의 별개 : 제목"이 무엇인지는 말하지 않았습니다. 이러한 라이브러리 중 하나를 사용하여 특정 출력을 생성하는 방법을 묻는 것이므로 먼저 샘플 출력을 생성하십시오. 예를 들어, 우리에게 보여준 문장에 대해 생성되어야하는 RDF는 무엇입니까? 트리플 (..., ...; ...)이 트리플에 매핑되어야합니까, 아니면이 특정 데이터에 대해 단지 운 좋은 사고입니까? –

+0

출력을 http://pastebin.com/sFwfqLFM과 비슷하게 만들지시겠습니까? –

+0

위의 예에서 문장에 대해 생성해야하는 RDF를 의미했습니다. –

답변

1
import org.apache.jena.riot.Lang; 
import org.apache.jena.riot.RDFDataMgr; 

import com.hp.hpl.jena.rdf.model.Model; 
import com.hp.hpl.jena.rdf.model.ModelFactory; 
import com.hp.hpl.jena.rdf.model.Property; 
import com.hp.hpl.jena.rdf.model.Resource; 
import com.hp.hpl.jena.util.URIref; 
import com.hp.hpl.jena.vocabulary.RDF; 
import com.hp.hpl.jena.vocabulary.RDFS; 
import com.hp.hpl.jena.vocabulary.XSD; 

public class OpenIETripletConversionExample { 
    public static void main(String[] args) { 
     // Create the model and define some prefixes (for nice serialization in RDF/XML and TTL) 
     Model model = ModelFactory.createDefaultModel(); 
     String NS = "http://stackoverflow.com/q/24897405/1281433/"; 
     model.setNsPrefix("", NS); 
     model.setNsPrefix("rdf", RDF.getURI()); 
     model.setNsPrefix("xsd", XSD.getURI()); 
     model.setNsPrefix("rdfs", RDFS.getURI()); 

     // Preserve the confidence level (optional). 
     Property confidence = model.createProperty(NS+"confidence"); 

     // Define some triplets to convert. 
     Object[][] triplets = { 
       { 0.57, "The quick brown fox", "jumped", "over the lazy dog." }, 
       { 0.93, "The rail launchers", "are", "conceptually similar to the underslung SM-1." } 
     }; 

     // For each triplet, create a resource representing the sentence, as well as the subject, 
     // predicate, and object, and then add the triples to the model. 
     for (Object[] triplet : triplets) { 
      Resource statement = model.createResource(); 
      Resource subject = model.createResource().addProperty(RDFS.label, (String) triplet[1]); 
      Property predicate = model.createProperty(NS+URIref.encode((String) triplet[2])); 
      Resource object = model.createResource().addProperty(RDFS.label, (String) triplet[3]); 

      statement.addLiteral(confidence, triplet[0]); 
      statement.addProperty(RDF.subject, subject); 
      statement.addProperty(RDF.predicate, predicate); 
      statement.addProperty(RDF.object, object); 
     } 

     // Show the model in a few different formats. 
     RDFDataMgr.write(System.out, model, Lang.TTL); 
     RDFDataMgr.write(System.out, model, Lang.RDFXML); 
     RDFDataMgr.write(System.out, model, Lang.NTRIPLES); 
    } 
} 
@prefix :  <http://stackoverflow.com/q/24897405/1281433/> . 
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> . 
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> . 
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> . 

[ rdf:object  [ rdfs:label "conceptually similar to the underslung SM-1." ] ; 
    rdf:predicate :are ; 
    rdf:subject [ rdfs:label "The rail launchers" ] ; 
    :confidence "0.93"^^xsd:double 
] . 

[ rdf:object  [ rdfs:label "over the lazy dog." ] ; 
    rdf:predicate :jumped ; 
    rdf:subject [ rdfs:label "The quick brown fox" ] ; 
    :confidence "0.57"^^xsd:double 
] . 
완성도를 들어
<rdf:RDF 
    xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" 
    xmlns="http://stackoverflow.com/q/24897405/1281433/" 
    xmlns:xsd="http://www.w3.org/2001/XMLSchema#" 
    xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"> 
    <rdf:Description> 
    <rdf:object rdf:parseType="Resource"> 
     <rdfs:label>conceptually similar to the underslung SM-1.</rdfs:label> 
    </rdf:object> 
    <rdf:predicate rdf:resource="http://stackoverflow.com/q/24897405/1281433/are"/> 
    <rdf:subject rdf:parseType="Resource"> 
     <rdfs:label>The rail launchers</rdfs:label> 
    </rdf:subject> 
    <confidence rdf:datatype="http://www.w3.org/2001/XMLSchema#double" 
    >0.93</confidence> 
    </rdf:Description> 
    <rdf:Description> 
    <rdf:object rdf:parseType="Resource"> 
     <rdfs:label>over the lazy dog.</rdfs:label> 
    </rdf:object> 
    <rdf:predicate rdf:resource="http://stackoverflow.com/q/24897405/1281433/jumped"/> 
    <rdf:subject rdf:parseType="Resource"> 
     <rdfs:label>The quick brown fox</rdfs:label> 
    </rdf:subject> 
    <confidence rdf:datatype="http://www.w3.org/2001/XMLSchema#double" 
    >0.57</confidence> 
    </rdf:Description> 
</rdf:RDF> 
_:BX2D492663e1X3A1475ff7864cX3AX2D7ffe <http://www.w3.org/2000/01/rdf-schema#label> "The quick brown fox" . 
_:BX2D492663e1X3A1475ff7864cX3AX2D7ffc <http://www.w3.org/1999/02/22-rdf-syntax-ns#object> _:BX2D492663e1X3A1475ff7864cX3AX2D7ffa . 
_:BX2D492663e1X3A1475ff7864cX3AX2D7ffc <http://www.w3.org/1999/02/22-rdf-syntax-ns#predicate> <http://stackoverflow.com/q/24897405/1281433/are> . 
_:BX2D492663e1X3A1475ff7864cX3AX2D7ffc <http://www.w3.org/1999/02/22-rdf-syntax-ns#subject> _:BX2D492663e1X3A1475ff7864cX3AX2D7ffb . 
_:BX2D492663e1X3A1475ff7864cX3AX2D7ffc <http://stackoverflow.com/q/24897405/1281433/confidence> "0.93"^^<http://www.w3.org/2001/XMLSchema#double> . 
_:BX2D492663e1X3A1475ff7864cX3AX2D7ffa <http://www.w3.org/2000/01/rdf-schema#label> "conceptually similar to the underslung SM-1." . 
_:BX2D492663e1X3A1475ff7864cX3AX2D7fff <http://www.w3.org/1999/02/22-rdf-syntax-ns#object> _:BX2D492663e1X3A1475ff7864cX3AX2D7ffd . 
_:BX2D492663e1X3A1475ff7864cX3AX2D7fff <http://www.w3.org/1999/02/22-rdf-syntax-ns#predicate> <http://stackoverflow.com/q/24897405/1281433/jumped> . 
_:BX2D492663e1X3A1475ff7864cX3AX2D7fff <http://www.w3.org/1999/02/22-rdf-syntax-ns#subject> _:BX2D492663e1X3A1475ff7864cX3AX2D7ffe . 
_:BX2D492663e1X3A1475ff7864cX3AX2D7fff <http://stackoverflow.com/q/24897405/1281433/confidence> "0.57"^^<http://www.w3.org/2001/XMLSchema#double> . 
_:BX2D492663e1X3A1475ff7864cX3AX2D7ffd <http://www.w3.org/2000/01/rdf-schema#label> "over the lazy dog." . 
_:BX2D492663e1X3A1475ff7864cX3AX2D7ffb <http://www.w3.org/2000/01/rdf-schema#label> "The rail launchers" . 
+0

예를 들어 주셔서 감사합니다. 사용중인 Jena API 버전은 무엇입니까? 2.11.2? –

+0

잘 모르겠지만 최신 버전에서 작동 할 것으로 예상됩니다. –

+0

@HappyJubilee 왜 정확한 버전이 중요합니까? 이 코드를 시도했는데 작동하지 않았습니까? 그렇다면 어떤 오류가 있습니까? –

0

(영업 여러 API에 대한 질문 때문에) 내가 @Joshua 테일러의 솔루션을 반복하는 대신 예나의 OpenRDF 참깨 API 사용하고 있습니다 :

import java.io.UnsupportedEncodingException; 
import java.net.URLEncoder; 

import org.openrdf.model.Model; 
import org.openrdf.model.Resource; 
import org.openrdf.model.URI; 
import org.openrdf.model.ValueFactory; 
import org.openrdf.model.impl.LinkedHashModel; 
import org.openrdf.model.impl.ValueFactoryImpl; 
import org.openrdf.model.util.Literals; 
import org.openrdf.model.vocabulary.RDF; 
import org.openrdf.model.vocabulary.RDFS; 
import org.openrdf.model.vocabulary.XMLSchema; 
import org.openrdf.rio.RDFFormat; 
import org.openrdf.rio.RDFHandlerException; 
import org.openrdf.rio.Rio; 

public class OpenIETripletConversionExample { 
     public static void main(String[] args) throws UnsupportedEncodingException, RDFHandlerException { 
      // Create the model and define some prefixes (for nice serialization in RDF/XML and TTL) 
      Model model = new LinkedHashModel(); 
      String NS = "http://stackoverflow.com/q/24897405/1281433/"; 
      model.setNamespace("rdf", RDF.NAMESPACE); 
      model.setNamespace("rdfs", RDFS.NAMESPACE); 
      model.setNamespace("xsd", XMLSchema.NAMESPACE); 
      model.setNamespace("", NS); 

      // Create a ValueFactory we can use to create resources and statements 
      ValueFactory vf = ValueFactoryImpl.getInstance(); 

      // Preserve the confidence level (optional). 
      URI confidence = vf.createURI(NS, "confidence"); 

      // Define some triplets to convert. 
      Object[][] triplets = { 
        { 0.57, "The quick brown fox", "jumped", "over the lazy dog." }, 
        { 0.93, "The rail launchers", "are", "conceptually similar to the underslung SM-1." } 
      }; 

      // For each triplet, create a resource representing the sentence, as well as the subject, 
      // predicate, and object, and then add the triples to the model. 
      for (Object[] triplet : triplets) { 
       Resource sentence = vf.createBNode(); 
       Resource subject = vf.createBNode(); 
       URI predicate = vf.createURI(NS, URLEncoder.encode((String) triplet[2], "utf-8")); 
       Resource object = vf.createBNode(); 

       model.add(subject, RDFS.LABEL, Literals.createLiteral(vf, triplet[1])); 
       model.add(object, RDFS.LABEL, Literals.createLiteral(vf, (String)triplet[3])); 

       model.add(sentence, confidence, Literals.createLiteral(vf, triplet[0])); 
       model.add(sentence, RDF.SUBJECT, subject); 
       model.add(sentence, RDF.PREDICATE, predicate); 
       model.add(sentence, RDF.OBJECT, object); 
      } 

      // Show the model in a few different formats. 
      Rio.write(model, System.out, RDFFormat.TURTLE); 
      Rio.write(model, System.out, RDFFormat.RDFXML); 
      Rio.write(model, System.out, RDFFormat.NTRIPLES); 

     } 
}