You can subscribe to this list here.
2007 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
(120) |
Sep
(36) |
Oct
(116) |
Nov
(17) |
Dec
(44) |
---|---|---|---|---|---|---|---|---|---|---|---|---|
2008 |
Jan
(143) |
Feb
(192) |
Mar
(74) |
Apr
(84) |
May
(105) |
Jun
(64) |
Jul
(49) |
Aug
(120) |
Sep
(159) |
Oct
(156) |
Nov
(51) |
Dec
(28) |
2009 |
Jan
(17) |
Feb
(55) |
Mar
(33) |
Apr
(57) |
May
(54) |
Jun
(28) |
Jul
(6) |
Aug
(16) |
Sep
(38) |
Oct
(30) |
Nov
(26) |
Dec
(52) |
2010 |
Jan
(7) |
Feb
(91) |
Mar
(65) |
Apr
(2) |
May
(14) |
Jun
(25) |
Jul
(38) |
Aug
(48) |
Sep
(80) |
Oct
(70) |
Nov
(75) |
Dec
(77) |
2011 |
Jan
(68) |
Feb
(53) |
Mar
(51) |
Apr
(35) |
May
(65) |
Jun
(101) |
Jul
(29) |
Aug
(230) |
Sep
(95) |
Oct
(49) |
Nov
(110) |
Dec
(63) |
2012 |
Jan
(41) |
Feb
(42) |
Mar
(25) |
Apr
(46) |
May
(51) |
Jun
(44) |
Jul
(45) |
Aug
(29) |
Sep
(12) |
Oct
(9) |
Nov
(17) |
Dec
(2) |
2013 |
Jan
(12) |
Feb
(14) |
Mar
(7) |
Apr
(16) |
May
(54) |
Jun
(27) |
Jul
(11) |
Aug
(5) |
Sep
(85) |
Oct
(27) |
Nov
(37) |
Dec
(32) |
2014 |
Jan
(8) |
Feb
(29) |
Mar
(5) |
Apr
(3) |
May
(22) |
Jun
(3) |
Jul
(4) |
Aug
(3) |
Sep
|
Oct
|
Nov
|
Dec
|
From: <dfl...@us...> - 2013-09-04 14:26:52
|
Revision: 4060 http://sourceforge.net/p/dl-learner/code/4060 Author: dfleischhacker Date: 2013-09-04 14:26:47 +0000 (Wed, 04 Sep 2013) Log Message: ----------- TextDocument cleans up text at initialization Modified Paths: -------------- trunk/components-core/src/main/java/org/dllearner/algorithms/isle/index/TextDocument.java Modified: trunk/components-core/src/main/java/org/dllearner/algorithms/isle/index/TextDocument.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/algorithms/isle/index/TextDocument.java 2013-09-04 14:15:30 UTC (rev 4059) +++ trunk/components-core/src/main/java/org/dllearner/algorithms/isle/index/TextDocument.java 2013-09-04 14:26:47 UTC (rev 4060) @@ -7,15 +7,19 @@ */ public class TextDocument implements Document { private String content; + private String rawContent; /** - * Initializes a text document with the given content. + * Initializes a text document with the given raw content. Internally, the content is cleaned up so that it only + * contains letters adhering to the regular expression pattern [A-Za-z]. * - * @param content content of this text document + * @param content the raw content of this text document */ public TextDocument(String content) { - this.content = content; + this.rawContent = content; + this.content = content.replaceAll("[^A-Za-z ]", " "); + this.content = this.content.replaceAll("\\s{2,}", " "); } @Override @@ -30,7 +34,7 @@ */ @Override public String getRawContent() { - return content; + return rawContent; } @Override This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jen...@us...> - 2013-09-04 14:15:35
|
Revision: 4059 http://sourceforge.net/p/dl-learner/code/4059 Author: jenslehmann Date: 2013-09-04 14:15:30 +0000 (Wed, 04 Sep 2013) Log Message: ----------- SWORE test Modified Paths: -------------- trunk/components-core/src/main/java/org/dllearner/algorithms/celoe/CELOE.java trunk/components-core/src/main/java/org/dllearner/algorithms/isle/index/semantic/SemanticIndex.java trunk/components-core/src/test/java/org/dllearner/algorithms/isle/ISLETest.java Added Paths: ----------- trunk/test/isle/swore/ trunk/test/isle/swore/corpus/ trunk/test/isle/swore/corpus/requirements_elicitation.txt trunk/test/isle/swore/corpus/requirements_management.txt trunk/test/isle/swore/ontology.owl Modified: trunk/components-core/src/main/java/org/dllearner/algorithms/celoe/CELOE.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/algorithms/celoe/CELOE.java 2013-09-04 13:58:43 UTC (rev 4058) +++ trunk/components-core/src/main/java/org/dllearner/algorithms/celoe/CELOE.java 2013-09-04 14:15:30 UTC (rev 4059) @@ -149,7 +149,7 @@ private int expressionTests = 0; private int minHorizExp = 0; private int maxHorizExp = 0; - private long totalRuntimeNs; + private long totalRuntimeNs = 0; // TODO: turn those into config options Modified: trunk/components-core/src/main/java/org/dllearner/algorithms/isle/index/semantic/SemanticIndex.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/algorithms/isle/index/semantic/SemanticIndex.java 2013-09-04 13:58:43 UTC (rev 4058) +++ trunk/components-core/src/main/java/org/dllearner/algorithms/isle/index/semantic/SemanticIndex.java 2013-09-04 14:15:30 UTC (rev 4059) @@ -111,6 +111,9 @@ } Set<AnnotatedDocument> annotatedDocuments = index.get(entity); + if(annotatedDocuments == null) { + annotatedDocuments = new HashSet<AnnotatedDocument>(); + } return annotatedDocuments; } Modified: trunk/components-core/src/test/java/org/dllearner/algorithms/isle/ISLETest.java =================================================================== --- trunk/components-core/src/test/java/org/dllearner/algorithms/isle/ISLETest.java 2013-09-04 13:58:43 UTC (rev 4058) +++ trunk/components-core/src/test/java/org/dllearner/algorithms/isle/ISLETest.java 2013-09-04 14:15:30 UTC (rev 4059) @@ -52,7 +52,6 @@ private OWLOntologyManager manager; private OWLOntology ontology; private OWLDataFactory df = new OWLDataFactoryImpl(); - private NamedClass cls; private EntityTextRetriever textRetriever; private RelevanceMetric relevance; private String searchField = "label"; @@ -61,7 +60,9 @@ // we assume that the ontology is named "ontology.owl" and that all text files // are in a subdirectory called "corpus" - private String testFolder = "../test/isle/father/"; + private String testFolder = "../test/isle/swore/"; +// NamedClass cls = new NamedClass("http://example.com/father#father"); + NamedClass cls = new NamedClass("http://ns.softwiki.de/req/CustomerRequirement"); /** * @@ -69,7 +70,6 @@ public ISLETest() throws Exception{ manager = OWLManager.createOWLOntologyManager(); ontology = manager.loadOntologyFromOntologyDocument(new File(testFolder + "ontology.owl")); - cls = new NamedClass("http://example.com/father#father"); textRetriever = new RDFSLabelEntityTextRetriever(ontology); syntacticIndex = new OWLOntologyLuceneSyntacticIndexCreator(ontology, df.getRDFSLabel(), searchField).buildIndex(); @@ -117,22 +117,17 @@ @Test public void testSemanticIndexAnnotationProperty(){ semanticIndex = new SimpleSemanticIndex(ontology, syntacticIndex); - semanticIndex.buildIndex(df.getRDFSLabel(), null); - - NamedClass nc = new NamedClass("http://example.com/father#father"); - Set<AnnotatedDocument> documents = semanticIndex.getDocuments(nc); - System.out.println("Documents for " + nc + ":\n" + documents); - - nc = new NamedClass("http://example.com/father#person"); - documents = semanticIndex.getDocuments(nc); - System.out.println("Documents for " + nc + ":\n" + documents); + semanticIndex.buildIndex(df.getRDFSLabel(), null); +// NamedClass nc = new NamedClass("http://example.com/father#father"); + Set<AnnotatedDocument> documents = semanticIndex.getDocuments(cls); + System.out.println("Documents for " + cls + ":\n" + documents); } @Test public void testSemanticIndexCorpus(){ semanticIndex = new SimpleSemanticIndex(ontology, syntacticIndex); semanticIndex.buildIndex(createDocuments()); - Set<AnnotatedDocument> documents = semanticIndex.getDocuments(new NamedClass("http://example.com/father#father")); + Set<AnnotatedDocument> documents = semanticIndex.getDocuments(cls); System.out.println(documents); } @@ -199,13 +194,13 @@ celoe.start(); System.out.println(); - DecimalFormat df = new DecimalFormat("000.00"); + DecimalFormat df = new DecimalFormat("#00.00"); System.out.println("Summary ISLE vs. CELOE"); System.out.println("======================"); System.out.println("accuracy: " + df.format(100*isle.getCurrentlyBestAccuracy())+"% vs. " + df.format(100*celoe.getCurrentlyBestAccuracy())+"%"); System.out.println("expressions tested: " + isle.getClassExpressionTests() + " vs. " + celoe.getClassExpressionTests()); System.out.println("search tree nodes: " + isle.getNodes().size() + " vs. " + celoe.getNodes().size()); - System.out.println("runtime: " + Helper.prettyPrintMilliSeconds(isle.getTotalRuntimeNs()) + " vs. " + Helper.prettyPrintMilliSeconds(celoe.getTotalRuntimeNs())); + System.out.println("runtime: " + Helper.prettyPrintNanoSeconds(isle.getTotalRuntimeNs()) + " vs. " + Helper.prettyPrintNanoSeconds(celoe.getTotalRuntimeNs())); } Added: trunk/test/isle/swore/corpus/requirements_elicitation.txt =================================================================== --- trunk/test/isle/swore/corpus/requirements_elicitation.txt (rev 0) +++ trunk/test/isle/swore/corpus/requirements_elicitation.txt 2013-09-04 14:15:30 UTC (rev 4059) @@ -0,0 +1 @@ +In requirements engineering, requirements elicitation is the practice of obtaining the requirements of a system from users, customers and other stakeholders. The practice is also sometimes referred to as requirements gathering. The term elicitation is used in books and research to raise the fact that good requirements can not just be collected from the customer, as would be indicated by the name requirements gathering. Requirements elicitation is non-trivial because you can never be sure you get all requirements from the user and customer by just asking them what the system should do. Requirements elicitation practices include interviews, questionnaires, user observation, workshops, brain storming, use cases, role playing and prototyping. Before requirements can be analyzed, modeled, or specified they must be gathered through an elicitation process. Requirements elicitation is a part of the requirements engineering process, usually followed by analysis and specification of the requirements. Commonly used elicitation processes are the stakeholder meetings or interviews. For example, an important first meeting could be between software engineers and customers where they discuss their perspective of the requirements. Added: trunk/test/isle/swore/corpus/requirements_management.txt =================================================================== Added: trunk/test/isle/swore/ontology.owl =================================================================== --- trunk/test/isle/swore/ontology.owl (rev 0) +++ trunk/test/isle/swore/ontology.owl 2013-09-04 14:15:30 UTC (rev 4059) @@ -0,0 +1,2273 @@ +<?xml version="1.0"?> + + +<!DOCTYPE rdf:RDF [ + <!ENTITY req "http://ns.softwiki.de/req/" > + <!ENTITY foaf2 "http://xmlns.com/foaf/0.1/" > + <!ENTITY dcmitype "http://purl.org/dc/dcmitype/" > + <!ENTITY owl "http://www.w3.org/2002/07/owl#" > + <!ENTITY dc "http://purl.org/dc/elements/1.1/" > + <!ENTITY xsd "http://www.w3.org/2001/XMLSchema#" > + <!ENTITY owl2xml "http://www.w3.org/2006/12/owl2-xml#" > + <!ENTITY foaf "http://www.holygoat.co.uk/foaf.rdf#" > + <!ENTITY skos "http://www.w3.org/2004/02/skos/core#" > + <!ENTITY rdfs "http://www.w3.org/2000/01/rdf-schema#" > + <!ENTITY rdf "http://www.w3.org/1999/02/22-rdf-syntax-ns#" > + <!ENTITY tags "http://www.holygoat.co.uk/owl/redwood/0.1/tags/" > +]> + + +<rdf:RDF xmlns="http://ns.softwiki.de/req/" + xml:base="http://ns.softwiki.de/req/" + xmlns:tags="http://www.holygoat.co.uk/owl/redwood/0.1/tags/" + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:foaf2="http://xmlns.com/foaf/0.1/" + xmlns:foaf="http://www.holygoat.co.uk/foaf.rdf#" + xmlns:dcmitype="http://purl.org/dc/dcmitype/" + xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#" + xmlns:owl2xml="http://www.w3.org/2006/12/owl2-xml#" + xmlns:owl="http://www.w3.org/2002/07/owl#" + xmlns:xsd="http://www.w3.org/2001/XMLSchema#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:req="http://ns.softwiki.de/req/" + xmlns:skos="http://www.w3.org/2004/02/skos/core#"> + <owl:Ontology rdf:about="http://ns.softwiki.de/req/"> + <rdfs:label rdf:datatype="&xsd;string">SoftWiki Ontology for Requirements Engineering</rdfs:label> + <rdfs:comment rdf:datatype="&xsd;string">A requirements engineering ontology for the SoftWiki project.</rdfs:comment> + <dc:contributor rdf:datatype="&xsd;string">Jens Lehmann</dc:contributor> + <dc:contributor rdf:datatype="&xsd;string">Sebastian Dietzold</dc:contributor> + <owl:versionInfo rdf:datatype="&xsd;string">version 1.00 - Thomas Riechert, Steffen Lohmann, Kim Lauenroth, Philipp Heim - starting the next generation of SWORE on 8th of July 2008 in Duisburg +version 0.8 - Sebastian Dietzold - skos, tags and dc alignment (title now functional) +version 0.7 - Sebastian Dietzold - labels completed and namespace correction +version 0.6 - name space changed to ns.softwiki.de/req +version 0.5 - refined by Thomas according to ESWC Poster submission +version 0.4 - refined by Jens on the way home from Essen +version 0.3 - refined by Jens during discussion with Kim and Steffen on 13 March 2007 in Essen +version 0.2 - refined by Thomas and Jens in the evening of 12 March 2007 in Essen +version 0.1 - simple initial version by Thomas and Jens before meeting in Essen</owl:versionInfo> + </owl:Ontology> + + + + <!-- + /////////////////////////////////////////////////////////////////////////////////////// + // + // Annotation properties + // + /////////////////////////////////////////////////////////////////////////////////////// + --> + + <owl:AnnotationProperty rdf:about="&owl;versionInfo"/> + <owl:AnnotationProperty rdf:about="&dc;contributor"/> + <owl:AnnotationProperty rdf:about="&rdfs;label"/> + <owl:AnnotationProperty rdf:about="&rdfs;comment"/> + + + + <!-- + /////////////////////////////////////////////////////////////////////////////////////// + // + // Object Properties + // + /////////////////////////////////////////////////////////////////////////////////////// + --> + + + + + <!-- http://ns.softwiki.de/req/broader --> + + <owl:ObjectProperty rdf:about="&req;broader"/> + + + + <!-- http://ns.softwiki.de/req/comments --> + + <owl:ObjectProperty rdf:about="&req;comments"> + <rdf:type rdf:resource="&owl;InverseFunctionalProperty"/> + <rdfs:domain rdf:resource="&req;AbstractComment"/> + <rdfs:range rdf:resource="&req;AbstractRequirement"/> + </owl:ObjectProperty> + + + + <!-- http://ns.softwiki.de/req/conflicts --> + + <owl:ObjectProperty rdf:about="&req;conflicts"> + <rdf:type rdf:resource="&owl;SymmetricProperty"/> + <owl:inverseOf rdf:resource="&req;conflicts"/> + <rdfs:subPropertyOf rdf:resource="&req;undirectedrelation"/> + </owl:ObjectProperty> + + + + <!-- http://ns.softwiki.de/req/cui --> + + <owl:ObjectProperty rdf:about="&req;cui"/> + + + + <!-- http://ns.softwiki.de/req/defines --> + + <owl:ObjectProperty rdf:about="&req;defines"> + <rdfs:label rdf:datatype="&xsd;string">defines</rdfs:label> + <rdfs:domain rdf:resource="&req;Author"/> + <rdfs:range> + <owl:Class> + <owl:unionOf rdf:parseType="Collection"> + <rdf:Description rdf:about="&req;AbstractComment"/> + <rdf:Description rdf:about="&req;AbstractRequirement"/> + <rdf:Description rdf:about="&req;Keyword"/> + </owl:unionOf> + </owl:Class> + </rdfs:range> + </owl:ObjectProperty> + + + + <!-- http://ns.softwiki.de/req/depentsOn --> + + <owl:ObjectProperty rdf:about="&req;depentsOn"> + <rdfs:range rdf:resource="&req;AbstractRequirement"/> + <rdfs:domain rdf:resource="&req;AbstractRequirement"/> + <owl:inverseOf rdf:resource="&req;entails"/> + </owl:ObjectProperty> + + + + <!-- http://ns.softwiki.de/req/details --> + + <owl:ObjectProperty rdf:about="&req;details"> + <rdfs:label rdf:datatype="&xsd;string">details</rdfs:label> + <rdfs:range rdf:resource="&req;AbstractRequirement"/> + <rdfs:domain rdf:resource="&req;AbstractRequirement"/> + </owl:ObjectProperty> + + + + <!-- http://ns.softwiki.de/req/documentation --> + + <owl:ObjectProperty rdf:about="&req;documentation"/> + + + + <!-- http://ns.softwiki.de/req/entails --> + + <owl:ObjectProperty rdf:about="&req;entails"> + <rdfs:domain rdf:resource="&req;AbstractRequirement"/> + <rdfs:range rdf:resource="&req;AbstractRequirement"/> + </owl:ObjectProperty> + + + + <!-- http://ns.softwiki.de/req/invalidates --> + + <owl:ObjectProperty rdf:about="&req;invalidates"> + <rdfs:domain rdf:resource="&req;AbstractRequirement"/> + <rdfs:range rdf:resource="&req;AbstractRequirement"/> + </owl:ObjectProperty> + + + + <!-- http://ns.softwiki.de/req/isCommentedBy --> + + <owl:ObjectProperty rdf:about="&req;isCommentedBy"> + <rdfs:range rdf:resource="&req;AbstractComment"/> + <rdfs:domain rdf:resource="&req;AbstractRequirement"/> + <owl:inverseOf rdf:resource="&req;comments"/> + </owl:ObjectProperty> + + + + <!-- http://ns.softwiki.de/req/isCreatedBy --> + + <owl:ObjectProperty rdf:about="&req;isCreatedBy"> + <rdf:type rdf:resource="&owl;FunctionalProperty"/> + <rdfs:label>is created by</rdfs:label> + <rdfs:comment>specifies the persons who created the requirement</rdfs:comment> + <rdfs:domain rdf:resource="&req;AbstractRequirement"/> + </owl:ObjectProperty> + + + + <!-- http://ns.softwiki.de/req/isDefinedBy --> + + <owl:ObjectProperty rdf:about="&req;isDefinedBy"> + <rdfs:label rdf:datatype="&xsd;string">defined by</rdfs:label> + <rdfs:range rdf:resource="&req;Author"/> + <owl:inverseOf rdf:resource="&req;defines"/> + <rdfs:domain> + <owl:Class> + <owl:unionOf rdf:parseType="Collection"> + <rdf:Description rdf:about="&req;AbstractComment"/> + <rdf:Description rdf:about="&req;AbstractRequirement"/> + <rdf:Description rdf:about="&req;Keyword"/> + </owl:unionOf> + </owl:Class> + </rdfs:domain> + </owl:ObjectProperty> + + + + <!-- http://ns.softwiki.de/req/isDetailedBy --> + + <owl:ObjectProperty rdf:about="&req;isDetailedBy"> + <rdfs:label rdf:datatype="&xsd;string">detailed by</rdfs:label> + <rdfs:domain rdf:resource="&req;AbstractRequirement"/> + <rdfs:range rdf:resource="&req;AbstractRequirement"/> + <owl:inverseOf rdf:resource="&req;details"/> + </owl:ObjectProperty> + + + + <!-- http://ns.softwiki.de/req/isInvalidFor --> + + <owl:ObjectProperty rdf:about="&req;isInvalidFor"> + <rdf:type rdf:resource="&owl;InverseFunctionalProperty"/> + <rdfs:range rdf:resource="&req;AbstractRequirement"/> + <rdfs:domain rdf:resource="&req;AbstractRequirement"/> + <owl:inverseOf rdf:resource="&req;invalidates"/> + </owl:ObjectProperty> + + + + <!-- http://ns.softwiki.de/req/isLeadingTo --> + + <owl:ObjectProperty rdf:about="&req;isLeadingTo"> + <rdfs:label rdf:datatype="&xsd;string">lead to</rdfs:label> + <rdfs:domain rdf:resource="&req;AbstractRequirement"/> + <rdfs:range rdf:resource="&req;AbstractSource"/> + </owl:ObjectProperty> + + + + <!-- http://ns.softwiki.de/req/isRedundant --> + + <owl:ObjectProperty rdf:about="&req;isRedundant"> + <rdf:type rdf:resource="&owl;SymmetricProperty"/> + <owl:inverseOf rdf:resource="&req;isRedundant"/> + <rdfs:subPropertyOf rdf:resource="&req;undirectedrelation"/> + </owl:ObjectProperty> + + + + <!-- http://ns.softwiki.de/req/isRelated --> + + <owl:ObjectProperty rdf:about="&req;isRelated"> + <rdf:type rdf:resource="&owl;SymmetricProperty"/> + <owl:inverseOf rdf:resource="&req;isRelated"/> + <rdfs:subPropertyOf rdf:resource="&req;undirectedrelation"/> + </owl:ObjectProperty> + + + + <!-- http://ns.softwiki.de/req/isReleatedTo --> + + <owl:ObjectProperty rdf:about="&req;isReleatedTo"> + <rdfs:range rdf:resource="&req;Customer"/> + <rdfs:domain rdf:resource="&req;CustomerRequirement"/> + </owl:ObjectProperty> + + + + <!-- http://ns.softwiki.de/req/isSimilarTo --> + + <owl:ObjectProperty rdf:about="&req;isSimilarTo"> + <rdf:type rdf:resource="&owl;SymmetricProperty"/> + <rdfs:domain rdf:resource="&req;AbstractRequirement"/> + <rdfs:range rdf:resource="&req;AbstractRequirement"/> + <owl:inverseOf rdf:resource="&req;isSimilarTo"/> + <rdfs:subPropertyOf rdf:resource="&req;undirectedrelation"/> + </owl:ObjectProperty> + + + + <!-- http://ns.softwiki.de/req/leadsTo --> + + <owl:ObjectProperty rdf:about="&req;leadsTo"> + <rdfs:label rdf:datatype="&xsd;string">leads to</rdfs:label> + <rdfs:range rdf:resource="&req;AbstractRequirement"/> + <rdfs:domain rdf:resource="&req;AbstractSource"/> + <owl:inverseOf rdf:resource="&req;isLeadingTo"/> + </owl:ObjectProperty> + + + + <!-- http://ns.softwiki.de/req/rates --> + + <owl:ObjectProperty rdf:about="&req;rates"> + <rdfs:range rdf:resource="&req;AbstractRequirement"/> + <rdfs:domain rdf:resource="&req;Rating"/> + </owl:ObjectProperty> + + + + <!-- http://ns.softwiki.de/req/refersTo --> + + <owl:ObjectProperty rdf:about="&req;refersTo"> + <rdfs:label rdf:datatype="&xsd;string">refers to</rdfs:label> + <rdfs:comment xml:lang="de">Relevanter Aspekt eines geplantes Systems (ähnlich zu Tagging).</rdfs:comment> + <rdfs:range rdf:resource="&req;AbstractReferencePoint"/> + <rdfs:domain rdf:resource="&req;AbstractRequirement"/> + <owl:inverseOf rdf:resource="&req;relevantRequirements"/> + </owl:ObjectProperty> + + + + <!-- http://ns.softwiki.de/req/relevantRequirements --> + + <owl:ObjectProperty rdf:about="&req;relevantRequirements"> + <rdfs:label rdf:datatype="&xsd;string">relevant requirements</rdfs:label> + <rdfs:domain rdf:resource="&req;AbstractReferencePoint"/> + <rdfs:range rdf:resource="&req;AbstractRequirement"/> + </owl:ObjectProperty> + + + + <!-- http://ns.softwiki.de/req/specifies --> + + <owl:ObjectProperty rdf:about="&req;specifies"> + <rdfs:range rdf:resource="&req;AbstractRequirement"/> + <rdfs:domain rdf:resource="&req;Topic"/> + </owl:ObjectProperty> + + + + <!-- http://ns.softwiki.de/req/undirectedrelation --> + + <owl:ObjectProperty rdf:about="&req;undirectedrelation"> + <rdf:type rdf:resource="&owl;FunctionalProperty"/> + <rdf:type rdf:resource="&owl;InverseFunctionalProperty"/> + <rdf:type rdf:resource="&owl;SymmetricProperty"/> + <rdfs:comment rdf:datatype="&xsd;string">Rule: only one ration between the same pair of two requirements allowed.</rdfs:comment> + <owl:inverseOf rdf:resource="&req;undirectedrelation"/> + </owl:ObjectProperty> + + + + <!-- http://ns.softwiki.de/req/votes --> + + <owl:ObjectProperty rdf:about="&req;votes"> + <rdfs:range rdf:resource="&req;AbstractRequirement"/> + <rdfs:domain rdf:resource="&req;Stakeholder"/> + </owl:ObjectProperty> + + + + <!-- http://ns.softwiki.de/req/willLeadTo --> + + <owl:ObjectProperty rdf:about="&req;willLeadTo"> + <rdfs:domain rdf:resource="&req;Requirement"/> + <rdfs:range rdf:resource="&req;SystemRequirement"/> + </owl:ObjectProperty> + + + + <!-- http://www.holygoat.co.uk/owl/redwood/0.1/tags/taggedWithTag --> + + <owl:ObjectProperty rdf:about="&tags;taggedWithTag"> + <rdfs:label xml:lang="de">Tags</rdfs:label> + </owl:ObjectProperty> + + + + <!-- + /////////////////////////////////////////////////////////////////////////////////////// + // + // Data properties + // + /////////////////////////////////////////////////////////////////////////////////////// + --> + + + + + <!-- http://ns.softwiki.de/req/averagePriorityRate --> + + <owl:DatatypeProperty rdf:about="&req;averagePriorityRate"> + <rdfs:subPropertyOf rdf:resource="&req;averageRate"/> + </owl:DatatypeProperty> + + + + <!-- http://ns.softwiki.de/req/averageQualityRate --> + + <owl:DatatypeProperty rdf:about="&req;averageQualityRate"> + <rdfs:subPropertyOf rdf:resource="&req;averageRate"/> + </owl:DatatypeProperty> + + + + <!-- http://ns.softwiki.de/req/averageRate --> + + <owl:DatatypeProperty rdf:about="&req;averageRate"> + <rdfs:comment rdf:datatype="&xsd;string">Is calculated by given rates.</rdfs:comment> + <rdfs:domain rdf:resource="&req;AbstractRequirement"/> + <rdfs:range rdf:resource="&xsd;float"/> + </owl:DatatypeProperty> + + + + <!-- http://ns.softwiki.de/req/changeDate --> + + <owl:DatatypeProperty rdf:about="&req;changeDate"> + <rdfs:domain rdf:resource="&req;AbstractRequirement"/> + <rdfs:range rdf:resource="&xsd;dateTime"/> + </owl:DatatypeProperty> + + + + <!-- http://ns.softwiki.de/req/creationDate --> + + <owl:DatatypeProperty rdf:about="&req;creationDate"> + <rdfs:domain rdf:resource="&req;AbstractRequirement"/> + <rdfs:range rdf:resource="&xsd;dateTime"/> + </owl:DatatypeProperty> + + + + <!-- http://ns.softwiki.de/req/definition --> + + <owl:DatatypeProperty rdf:about="&req;definition"> + <rdfs:domain rdf:resource="&req;DefinedKeyword"/> + <rdfs:range rdf:resource="&xsd;string"/> + </owl:DatatypeProperty> + + + + <!-- http://ns.softwiki.de/req/rate --> + + <owl:DatatypeProperty rdf:about="&req;rate"> + <rdfs:domain rdf:resource="&req;Rating"/> + <rdfs:range rdf:resource="&xsd;float"/> + </owl:DatatypeProperty> + + + + <!-- http://ns.softwiki.de/req/rational --> + + <owl:DatatypeProperty rdf:about="&req;rational"> + <rdf:type rdf:resource="&owl;FunctionalProperty"/> + <rdfs:label rdf:datatype="&xsd;string">rational</rdfs:label> + <rdfs:range rdf:resource="&xsd;string"/> + </owl:DatatypeProperty> + + + + <!-- http://ns.softwiki.de/req/result --> + + <owl:DatatypeProperty rdf:about="&req;result"> + <rdf:type rdf:resource="&owl;FunctionalProperty"/> + <rdfs:label rdf:datatype="&xsd;string">result</rdfs:label> + <rdfs:comment xml:lang="de">z.B. Veränderung von priority und agreement</rdfs:comment> + <rdfs:range rdf:resource="&xsd;string"/> + </owl:DatatypeProperty> + + + + <!-- http://ns.softwiki.de/req/role --> + + <owl:DatatypeProperty rdf:about="&req;role"> + <rdfs:domain rdf:resource="&req;Author"/> + </owl:DatatypeProperty> + + + + <!-- http://ns.softwiki.de/req/scenarioStep --> + + <owl:DatatypeProperty rdf:about="&req;scenarioStep"> + <rdfs:label rdf:datatype="&xsd;string">scenario step</rdfs:label> + <rdfs:comment rdf:datatype="&xsd;string"></rdfs:comment> + <owl:versionInfo rdf:datatype="&xsd;string">TODO: es muss eine konkrete Reihenfolge der Steps gegeben sein (Listenstruktur)</owl:versionInfo> + <rdfs:domain rdf:resource="&req;TextualScenario"/> + <rdfs:range rdf:resource="&xsd;string"/> + </owl:DatatypeProperty> + + + + <!-- http://ns.softwiki.de/req/state --> + + <owl:DatatypeProperty rdf:about="&req;state"> + <rdfs:domain rdf:resource="&req;AbstractRequirement"/> + <rdfs:range> + <rdfs:Datatype> + <owl:oneOf> + <rdf:Description> + <rdf:type rdf:resource="&rdf;List"/> + <rdf:first rdf:datatype="&xsd;string">isNegativDecided</rdf:first> + <rdf:rest> + <rdf:Description> + <rdf:type rdf:resource="&rdf;List"/> + <rdf:first rdf:datatype="&xsd;string">isPositvDecided</rdf:first> + <rdf:rest rdf:resource="&rdf;nil"/> + </rdf:Description> + </rdf:rest> + </rdf:Description> + </owl:oneOf> + </rdfs:Datatype> + </rdfs:range> + </owl:DatatypeProperty> + + + + <!-- http://ns.softwiki.de/req/voteTime --> + + <owl:DatatypeProperty rdf:about="&req;voteTime"> + <rdfs:label rdf:datatype="&xsd;string">vote time</rdfs:label> + <rdfs:domain rdf:resource="&req;Vote"/> + <rdfs:range rdf:resource="&xsd;dateTime"/> + </owl:DatatypeProperty> + + + + <!-- http://purl.org/dc/elements/1.1/description --> + + <owl:DatatypeProperty rdf:about="&dc;description"> + <rdf:type rdf:resource="&owl;FunctionalProperty"/> + <rdfs:label rdf:datatype="&xsd;string">description</rdfs:label> + <rdfs:label xml:lang="de">Beschreibung</rdfs:label> + <rdfs:range rdf:resource="&xsd;string"/> + <rdfs:domain> + <owl:Class> + <owl:unionOf rdf:parseType="Collection"> + <rdf:Description rdf:about="&req;Goal"/> + <rdf:Description rdf:about="&req;Requirement"/> + </owl:unionOf> + </owl:Class> + </rdfs:domain> + </owl:DatatypeProperty> + + + + <!-- http://purl.org/dc/elements/1.1/title --> + + <owl:DatatypeProperty rdf:about="&dc;title"/> + + + + <!-- + /////////////////////////////////////////////////////////////////////////////////////// + // + // Classes + // + /////////////////////////////////////////////////////////////////////////////////////// + --> + + + + + <!-- http://ns.softwiki.de/req/AbstractComment --> + + <owl:Class rdf:about="&req;AbstractComment"> + <rdfs:label>abstract comment</rdfs:label> + </owl:Class> + + + + <!-- http://ns.softwiki.de/req/AbstractReferencePoint --> + + <owl:Class rdf:about="&req;AbstractReferencePoint"> + <rdfs:label rdf:datatype="&xsd;string">reference point</rdfs:label> + <owl:disjointWith rdf:resource="&req;AbstractRequirement"/> + <owl:disjointWith rdf:resource="&req;AbstractSource"/> + <owl:disjointWith rdf:resource="&req;Author"/> + <owl:disjointWith rdf:resource="&req;Vote"/> + </owl:Class> + + + + <!-- http://ns.softwiki.de/req/AbstractRequirement --> + + <owl:Class rdf:about="&req;AbstractRequirement"> + <rdfs:label rdf:datatype="&xsd;string">abstract requirement</rdfs:label> + <rdfs:label xml:lang="de">abstraktes Requirement</rdfs:label> + <owl:disjointWith rdf:resource="&req;AbstractSource"/> + <owl:disjointWith rdf:resource="&req;Author"/> + <owl:disjointWith rdf:resource="&req;Vote"/> + <rdfs:comment rdf:datatype="&xsd;string">Es ist ungünstig, dass Requirement Subklasse von AbstractRequirement ist.</rdfs:comment> + </owl:Class> + + + + <!-- http://ns.softwiki.de/req/AbstractSource --> + + <owl:Class rdf:about="&req;AbstractSource"> + <rdfs:label rdf:datatype="&xsd;string">abstract source</rdfs:label> + <rdfs:subClassOf rdf:resource="&owl;Thing"/> + <owl:disjointWith rdf:resource="&req;Vote"/> + <rdfs:comment rdf:datatype="&xsd;string"></rdfs:comment> + </owl:Class> + + + + <!-- http://ns.softwiki.de/req/AllocatedRequirement --> + + <owl:Class rdf:about="&req;AllocatedRequirement"> + <rdfs:label>allocated requirement</rdfs:label> + <rdfs:subClassOf rdf:resource="&req;Requirement"/> + </owl:Class> + + + + <!-- http://ns.softwiki.de/req/ApplicationPointer --> + + <owl:Class rdf:about="&req;ApplicationPointer"> + <rdfs:label>application pointer</rdfs:label> + <rdfs:subClassOf rdf:resource="&req;AbstractReferencePoint"/> + </owl:Class> + + + + <!-- http://ns.softwiki.de/req/ApplicationState --> + + <owl:Class rdf:about="&req;ApplicationState"> + <rdfs:label>application state</rdfs:label> + <rdfs:subClassOf rdf:resource="&req;AbstractReferencePoint"/> + </owl:Class> + + + + <!-- http://ns.softwiki.de/req/Author --> + + <owl:Class rdf:about="&req;Author"> + <rdfs:label xml:lang="de">Autor</rdfs:label> + <rdfs:label xml:lang="en">author</rdfs:label> + <rdfs:subClassOf rdf:resource="&req;Stakeholder"/> + <owl:disjointWith rdf:resource="&req;Vote"/> + </owl:Class> + + + + <!-- http://ns.softwiki.de/req/Comment --> + + <owl:Class rdf:about="&req;Comment"> + <rdfs:label>comment</rdfs:label> + <rdfs:subClassOf rdf:resource="&req;AbstractComment"/> + </owl:Class> + + + + <!-- http://ns.softwiki.de/req/Creditor --> + + <owl:Class rdf:about="&req;Creditor"> + <rdfs:label>creditor</rdfs:label> + <rdfs:subClassOf rdf:resource="&req;Stakeholder"/> + </owl:Class> + + + + <!-- http://ns.softwiki.de/req/Customer --> + + <owl:Class rdf:about="&req;Customer"> + <rdfs:label>customer</rdfs:label> + <rdfs:subClassOf rdf:resource="&req;Stakeholder"/> + <owl:disjointWith rdf:resource="&req;Programmer"/> + </owl:Class> + + + + <!-- http://ns.softwiki.de/req/CustomerRequirement --> + + <owl:Class rdf:about="&req;CustomerRequirement"> + <rdfs:label>customer requirement</rdfs:label> + <owl:equivalentClass> + <owl:Class> + <owl:intersectionOf rdf:parseType="Collection"> + <rdf:Description rdf:about="&req;Requirement"/> + <owl:Restriction> + <owl:onProperty rdf:resource="&req;isCreatedBy"/> + <owl:someValuesFrom rdf:resource="&req;Customer"/> + </owl:Restriction> + </owl:intersectionOf> + </owl:Class> + </owl:equivalentClass> + <rdfs:subClassOf rdf:resource="&req;Requirement"/> + </owl:Class> + + + + <!-- http://ns.softwiki.de/req/DefinedKeyword --> + + <owl:Class rdf:about="&req;DefinedKeyword"> + <rdfs:label>defined keyword</rdfs:label> + <rdfs:subClassOf rdf:resource="&req;Keyword"/> + </owl:Class> + + + + <!-- http://ns.softwiki.de/req/DerivedRequirement --> + + <owl:Class rdf:about="&req;DerivedRequirement"> + <rdfs:label>derived requirement</rdfs:label> + <rdfs:subClassOf rdf:resource="&req;Requirement"/> + </owl:Class> + + + + <!-- http://ns.softwiki.de/req/DesignRequirement --> + + <owl:Class rdf:about="&req;DesignRequirement"> + <rdfs:label>design requirement</rdfs:label> + <rdfs:subClassOf rdf:resource="&req;Requirement"/> + </owl:Class> + + + + <!-- http://ns.softwiki.de/req/Document --> + + <owl:Class rdf:about="&req;Document"> + <rdfs:label>document</rdfs:label> + <owl:equivalentClass> + <owl:Class> + <owl:intersectionOf rdf:parseType="Collection"> + <rdf:Description rdf:about="&req;AbstractSource"/> + <owl:Restriction> + <owl:onProperty rdf:resource="&req;leadsTo"/> + <owl:someValuesFrom rdf:resource="&req;AbstractRequirement"/> + </owl:Restriction> + </owl:intersectionOf> + </owl:Class> + </owl:equivalentClass> + <rdfs:subClassOf rdf:resource="&req;AbstractSource"/> + </owl:Class> + + + + <!-- http://ns.softwiki.de/req/FunctionalRequirement --> + + <owl:Class rdf:about="&req;FunctionalRequirement"> + <rdfs:label rdf:datatype="&xsd;string">functional requirement</rdfs:label> + <rdfs:subClassOf rdf:resource="&req;Requirement"/> + <owl:disjointWith rdf:resource="&req;QualityRequirement"/> + <rdfs:comment rdf:datatype="&xsd;string">refers to functional reference point, for instance components of the system</rdfs:comment> + </owl:Class> + + + + <!-- http://ns.softwiki.de/req/Goal --> + + <owl:Class rdf:about="&req;Goal"> + <rdfs:label rdf:datatype="&xsd;string">goal</rdfs:label> + <rdfs:label xml:lang="de">Ziel</rdfs:label> + <rdfs:subClassOf rdf:resource="&req;AbstractRequirement"/> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&dc;description"/> + <owl:cardinality rdf:datatype="&xsd;nonNegativeInteger">1</owl:cardinality> + </owl:Restriction> + </rdfs:subClassOf> + <owl:disjointWith rdf:resource="&req;Requirement"/> + <owl:disjointWith rdf:resource="&req;Scenario"/> + </owl:Class> + + + + <!-- http://ns.softwiki.de/req/Government --> + + <owl:Class rdf:about="&req;Government"> + <rdfs:label>government</rdfs:label> + <rdfs:subClassOf rdf:resource="&req;Stakeholder"/> + </owl:Class> + + + + <!-- http://ns.softwiki.de/req/Keyword --> + + <owl:Class rdf:about="&req;Keyword"> + <rdfs:label>keyword</rdfs:label> + <rdfs:subClassOf rdf:resource="&req;AbstractReferencePoint"/> + </owl:Class> + + + + <!-- http://ns.softwiki.de/req/PerformanceRequirement --> + + <owl:Class rdf:about="&req;PerformanceRequirement"> + <rdfs:label>performance requirement</rdfs:label> + <owl:equivalentClass> + <owl:Class> + <owl:intersectionOf rdf:parseType="Collection"> + <rdf:Description rdf:about="&req;Requirement"/> + <owl:Restriction> + <owl:onProperty rdf:resource="&req;willLeadTo"/> + <owl:someValuesFrom rdf:resource="&req;SystemRequirement"/> + </owl:Restriction> + </owl:intersectionOf> + </owl:Class> + </owl:equivalentClass> + <rdfs:subClassOf rdf:resource="&req;Requirement"/> + <owl:disjointWith rdf:resource="&req;SystemRequirement"/> + </owl:Class> + + + + <!-- http://ns.softwiki.de/req/PriorityRating --> + + <owl:Class rdf:about="&req;PriorityRating"> + <rdfs:label>priority rating</rdfs:label> + <rdfs:subClassOf rdf:resource="&req;Rating"/> + <rdfs:comment rdf:datatype="&xsd;string">Rule: Every Author only defines at most one rating about the priority for each requirement.</rdfs:comment> + </owl:Class> + + + + <!-- http://ns.softwiki.de/req/Programmer --> + + <owl:Class rdf:about="&req;Programmer"> + <rdfs:label>programmer</rdfs:label> + <rdfs:subClassOf rdf:resource="&req;Stakeholder"/> + </owl:Class> + + + + <!-- http://ns.softwiki.de/req/QualityRating --> + + <owl:Class rdf:about="&req;QualityRating"> + <rdfs:label>quality rating</rdfs:label> + <rdfs:subClassOf rdf:resource="&req;Rating"/> + <rdfs:comment rdf:datatype="&xsd;string">Rule: Every Author only defines at most one rating about the quality for each requirement.</rdfs:comment> + </owl:Class> + + + + <!-- http://ns.softwiki.de/req/QualityRequirement --> + + <owl:Class rdf:about="&req;QualityRequirement"> + <rdfs:label rdf:datatype="&xsd;string">quality requirement</rdfs:label> + <rdfs:subClassOf rdf:resource="&req;Requirement"/> + <rdfs:comment rdf:datatype="&xsd;string">refers to quality reference point, e.g. reliability, performance, usability</rdfs:comment> + </owl:Class> + + + + <!-- http://ns.softwiki.de/req/Rating --> + + <owl:Class rdf:about="&req;Rating"> + <rdfs:label>rating</rdfs:label> + <rdfs:subClassOf rdf:resource="&req;AbstractComment"/> + </owl:Class> + + + + <!-- http://ns.softwiki.de/req/Requirement --> + + <owl:Class rdf:about="&req;Requirement"> + <rdfs:label rdf:datatype="&xsd;string">requirement</rdfs:label> + <rdfs:label xml:lang="de">Anforderung(en)</rdfs:label> + <rdfs:subClassOf rdf:resource="&req;AbstractRequirement"/> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&dc;description"/> + <owl:cardinality rdf:datatype="&xsd;nonNegativeInteger">1</owl:cardinality> + </owl:Restriction> + </rdfs:subClassOf> + <owl:disjointWith rdf:resource="&req;Scenario"/> + <rdfs:comment rdf:datatype="&xsd;string"></rdfs:comment> + <owl:versionInfo rdf:datatype="&xsd;string">TODO: semantische Verfeinerung geplant, d.h. Anforderungen nicht nur als Textstring, sondern z.B. als RDF-Triple formulieren</owl:versionInfo> + </owl:Class> + + + + <!-- http://ns.softwiki.de/req/Scenario --> + + <owl:Class rdf:about="&req;Scenario"> + <rdfs:label rdf:datatype="&xsd;string">scenario</rdfs:label> + <rdfs:subClassOf rdf:resource="&req;AbstractRequirement"/> + </owl:Class> + + + + <!-- http://ns.softwiki.de/req/SeniorManagementStaff --> + + <owl:Class rdf:about="&req;SeniorManagementStaff"> + <rdfs:label>senior management staff</rdfs:label> + <rdfs:subClassOf rdf:resource="&req;Stakeholder"/> + </owl:Class> + + + + <!-- http://ns.softwiki.de/req/Stakeholder --> + + <owl:Class rdf:about="&req;Stakeholder"> + <rdfs:label>stakeholder</rdfs:label> + <rdfs:subClassOf rdf:resource="&req;AbstractSource"/> + </owl:Class> + + + + <!-- http://ns.softwiki.de/req/SystemRequirement --> + + <owl:Class rdf:about="&req;SystemRequirement"> + <rdfs:label>system requirement</rdfs:label> + <rdfs:subClassOf rdf:resource="&owl;Thing"/> + </owl:Class> + + + + <!-- http://ns.softwiki.de/req/TextualScenario --> + + <owl:Class rdf:about="&req;TextualScenario"> + <rdfs:label rdf:datatype="&xsd;string">textual scenario</rdfs:label> + <rdfs:subClassOf rdf:resource="&req;Scenario"/> + <rdfs:subClassOf> + <owl:Restriction> + <owl:onProperty rdf:resource="&req;scenarioStep"/> + <owl:minCardinality rdf:datatype="&xsd;nonNegativeInteger">1</owl:minCardinality> + </owl:Restriction> + </rdfs:subClassOf> + <rdfs:comment xml:lang="de">Szenario, welches aus mehreren textuell beschriebenen Szenarioschritten besteht.</rdfs:comment> + </owl:Class> + + + + <!-- http://ns.softwiki.de/req/Topic --> + + <owl:Class rdf:about="&req;Topic"> + <rdfs:label>topic</rdfs:label> + <rdfs:subClassOf rdf:resource="&req;DefinedKeyword"/> + <rdfs:comment rdf:datatype="&xsd;string">Rule: Every Requirement refers to exact one topic.</rdfs:comment> + </owl:Class> + + + + <!-- http://ns.softwiki.de/req/TradeUnion --> + + <owl:Class rdf:about="&req;TradeUnion"> + <rdfs:label>trade union</rdfs:label> + <rdfs:subClassOf rdf:resource="&req;Stakeholder"/> + </owl:Class> + + + + <!-- http://ns.softwiki.de/req/Vote --> + + <owl:Class rdf:about="&req;Vote"> + <rdfs:label rdf:datatype="&xsd;string">vote</rdfs:label> + <rdfs:subClassOf rdf:resource="&req;AbstractComment"/> + <rdfs:comment rdf:datatype="&xsd;string">Rule: Every Author only votes at most one requirement.</rdfs:comment> + </owl:Class> + + + + <!-- http://purl.org/dc/dcmitype/Image --> + + <owl:Class rdf:about="&dcmitype;Image"> + <rdfs:label>image</rdfs:label> + </owl:Class> + + + + <!-- http://www.w3.org/2000/01/rdf-schema#Resource --> + + <owl:Class rdf:about="&rdfs;Resource"> + <rdfs:label>resource</rdfs:label> + </owl:Class> + + + + <!-- http://www.w3.org/2001/XMLSchema#string --> + + <owl:Class rdf:about="&xsd;string"> + <rdfs:label rdf:datatype="&xsd;string">string</rdfs:label> + </owl:Class> + + + + <!-- http://www.w3.org/2002/07/owl#Datatype --> + + <owl:Class rdf:about="&owl;Datatype"/> + + + + <!-- http://www.w3.org/2002/07/owl#Thing --> + + <owl:Class rdf:about="&owl;Thing"/> + + + + <!-- http://www.w3.org/2004/02/skos/core#Concept --> + + <owl:Class rdf:about="&skos;Concept"> + <rdfs:label>concept</rdfs:label> + <rdfs:label xml:lang="de">Thema</rdfs:label> + </owl:Class> + + + + <!-- http://xmlns.com/foaf/0.1/Document --> + + <owl:Class rdf:about="&foaf2;Document"> + <rdfs:label>document</rdfs:label> + </owl:Class> + + + + <!-- + /////////////////////////////////////////////////////////////////////////////////////// + // + // Individuals + // + /////////////////////////////////////////////////////////////////////////////////////// + --> + + + + + <!-- http://ns.softwiki.de/req/1 --> + + <owl:Thing rdf:about="&req;1"> + <rdf:type rdf:resource="&req;QualityRating"/> + <rdf:type rdf:resource="&owl;NamedIndividual"/> + <rdfs:label>1</rdfs:label> + <rates rdf:resource="&req;BuildASecureLoginSystem"/> + </owl:Thing> + + + + <!-- http://ns.softwiki.de/req/2 --> + + <owl:Thing rdf:about="&req;2"> + <rdf:type rdf:resource="&req;QualityRating"/> + <rdf:type rdf:resource="&owl;NamedIndividual"/> + <rdfs:label>2</rdfs:label> + <rates rdf:resource="&req;BuildASoftwareThatRuns24hADay"/> + </owl:Thing> + + + + <!-- http://ns.softwiki.de/req/3 --> + + <owl:Thing rdf:about="&req;3"> + <rdf:type rdf:resource="&req;QualityRating"/> + <rdf:type rdf:resource="&owl;NamedIndividual"/> + <rdfs:label>3</rdfs:label> + <rates rdf:resource="&req;BuildLoginSystem"/> + </owl:Thing> + + + + <!-- http://ns.softwiki.de/req/4 --> + + <owl:Thing rdf:about="&req;4"> + <rdf:type rdf:resource="&req;QualityRating"/> + <rdf:type rdf:resource="&owl;NamedIndividual"/> + <rdfs:label>4</rdfs:label> + <rates rdf:resource="&req;BuildNetworkLoginSystem"/> + </owl:Thing> + + + + <!-- http://ns.softwiki.de/req/5 --> + + <owl:Thing rdf:about="&req;5"> + <rdf:type rdf:resource="&req;QualityRating"/> + <rdf:type rdf:resource="&owl;NamedIndividual"/> + <rdfs:label>5</rdfs:label> + <rates rdf:resource="&req;DataBaseBackupCreatedSyncron"/> + </owl:Thing> + + + + <!-- http://ns.softwiki.de/req/6 --> + + <owl:Thing rdf:about="&req;6"> + <rdf:type rdf:resource="&req;QualityRating"/> + <rdf:type rdf:resource="&owl;NamedIndividual"/> + <rdfs:label>6</rdfs:label> + <rates rdf:resource="&req;CustomerRequirement1"/> + </owl:Thing> + + + + <!-- http://ns.softwiki.de/req/7 --> + + <owl:Thing rdf:about="&req;7"> + <rdf:type rdf:resource="&req;QualityRating"/> + <rdf:type rdf:resource="&owl;NamedIndividual"/> + <rdfs:label>7</rdfs:label> + <rates rdf:resource="&req;DialogSystemShoudRespondInUnder5Sec"/> + </owl:Thing> + + + + <!-- http://ns.softwiki.de/req/8 --> + + <owl:Thing rdf:about="&req;8"> + <rdf:type rdf:resource="&req;QualityRating"/> + <rdf:type rdf:resource="&owl;NamedIndividual"/> + <rdfs:label>8</rdfs:label> + <rates rdf:resource="&req;loadGUIInUnder2Sec"/> + </owl:Thing> + + + + <!-- http://ns.softwiki.de/req/9 --> + + <owl:Thing rdf:about="&req;9"> + <rdf:type rdf:resource="&req;QualityRating"/> + <rdf:type rdf:resource="&owl;NamedIndividual"/> + <rdfs:label>9</rdfs:label> + <rates rdf:resource="&req;LogEveryUserActivity"/> + </owl:Thing> + + + + <!-- http://ns.softwiki.de/req/ActiveHelpDialog --> + + <owl:Thing rdf:about="&req;ActiveHelpDialog"> + <rdf:type rdf:resource="&req;DesignRequirement"/> + <rdf:type rdf:resource="&owl;NamedIndividual"/> + <rdfs:label>Active Help Dialog</rdfs:label> + <isCreatedBy rdf:resource="&req;GermanGovernment"/> + <isLeadingTo rdf:resource="&req;Pflichtenheft"/> + </owl:Thing> + + + + <!-- http://ns.softwiki.de/req/Andrew_Stellman --> + + <owl:Thing rdf:about="&req;Andrew_Stellman"> + <rdf:type rdf:resource="&req;Author"/> + <rdf:type rdf:resource="&owl;NamedIndividual"/> + <rdfs:label>Andrew Stellman</rdfs:label> + <defines rdf:resource="&req;MultiUserSystem"/> + <votes rdf:resource="&req;UseDatabaseToStoreUserData"/> + </owl:Thing> + + + + <!-- http://ns.softwiki.de/req/BuildAFastSoftware --> + + <owl:Thing rdf:about="&req;BuildAFastSoftware"> + <rdf:type rdf:resource="&req;CustomerRequirement"/> + <rdf:type rdf:resource="&owl;NamedIndividual"/> + <rdfs:label>Build a Fast Software</rdfs:label> + <isCreatedBy rdf:resource="&req;Charlotte_Blay"/> + <isLeadingTo rdf:resource="&req;Lastenheft"/> + <refersTo rdf:resource="&req;PerformanceTopic"/> + </owl:Thing> + + + + <!-- http://ns.softwiki.de/req/BuildASecureLoginSystem --> + + <owl:Thing rdf:about="&req;BuildASecureLoginSystem"> + <rdf:type rdf:resource="&req;DerivedRequirement"/> + <rdf:type rdf:resource="&owl;NamedIndividual"/> + <rdfs:label>Build A Secure Login System</rdfs:label> + <details rdf:resource="&req;BuildLoginSystem"/> + <isLeadingTo rdf:resource="&req;Pflichtenheft"/> + </owl:Thing> + + + + <!-- http://ns.softwiki.de/req/BuildASoftwareThatRuns24hADay --> + + <owl:Thing rdf:about="&req;BuildASoftwareThatRuns24hADay"> + <rdf:type rdf:resource="&req;CustomerRequirement"/> + <rdf:type rdf:resource="&owl;NamedIndividual"/> + <rdfs:label>Build A Software That Runs 24 h A Day</rdfs:label> + <isLeadingTo rdf:resource="&req;Lastenheft"/> + <isCreatedBy rdf:resource="&req;Philippe_Soupault"/> + <depentsOn rdf:resource="&req;SystemStabilityRequirement"/> + <refersTo rdf:resource="&req;SystemStabilityTopic"/> + </owl:Thing> + + + + <!-- http://ns.softwiki.de/req/BuildLoginSystem --> + + <owl:Thing rdf:about="&req;BuildLoginSystem"> + <rdf:type rdf:resource="&req;DerivedRequirement"/> + <rdf:type rdf:resource="&owl;NamedIndividual"/> + <rdfs:label>Build Login System</rdfs:label> + <details rdf:resource="&req;MultiUserSystem"/> + <isLeadingTo rdf:resource="&req;Pflichtenheft"/> + </owl:Thing> + + + + <!-- http://ns.softwiki.de/req/BuildNetworkLoginSystem --> + + <owl:Thing rdf:about="&req;BuildNetworkLoginSystem"> + <rdf:type rdf:resource="&req;DerivedRequirement"/> + <rdf:type rdf:resource="&owl;NamedIndividual"/> + <rdfs:label>Build Network Login System</rdfs:label> + <isLeadingTo rdf:resource="&req;Pflichtenheft"/> + <details rdf:resource="&req;UserCanAccessDataFromEveryComputer"/> + </owl:Thing> + + + + <!-- http://ns.softwiki.de/req/CentralOrganisationOfFinnishTrade --> + + <owl:Thing rdf:about="&req;CentralOrganisationOfFinnishTrade"> + <rdf:type rdf:resource="&req;TradeUnion"/> + <rdf:type rdf:resource="&owl;NamedIndividual"/> + <rdfs:label>Central Organisaion Of Finnish Trade</rdfs:label> + </owl:Thing> + + + + <!-- http://ns.softwiki.de/req/Charlotte_Blay --> + + <owl:Thing rdf:about="&req;Charlotte_Blay"> + <rdf:type rdf:resource="&req;Customer"/> + <rdf:type rdf:resource="&owl;NamedIndividual"/> + <rdfs:label>Carlotte Blay</rdfs:label> + </owl:Thing> + + + + <!-- http://ns.softwiki.de/req/Consistent --> + + <owl:Thing rdf:about="&req;Consistent"> + <rdf:type rdf:resource="&owl;NamedIndividual"/> + <rdfs:label>Consistent</rdfs:label> + <isCreatedBy rdf:resource="&req;USGovernment"/> + </owl:Thing> + + + + <!-- http://ns.softwiki.de/req/Correct --> + + <owl:Thing rdf:about="&req;Correct"> + <rdf:type rdf:resource="&owl;NamedIndividual"/> + <rdfs:label>Correct</rdfs:label> + <isCreatedBy rdf:resource="&req;Jennifer_Greene"/> + </owl:Thing> + + + + <!-- http://ns.softwiki.de/req/CreateACheaperSoftware --> + + <owl:Thing rdf:about="&req;CreateACheaperSoftware"> + <rdf:type rdf:resource="&req;Goal"/> + <rdf:type rdf:resource="&owl;NamedIndividual"/> + <rdfs:label>Create A Cheaper Software</rdfs:label> + <details rdf:resource="&req;SearchShouldBeDoneIn3Sec"/> + <isDefinedBy rdf:resource="&req;Tim"/> + </owl:Thing> + + + + <!-- http://ns.softwiki.de/req/CreateDatabaseInterface --> + + <owl:Thing rdf:about="&req;CreateDatabaseInterface"> + <rdf:type rdf:resource="&req;DerivedRequirement"/> + <rdf:type rdf:resource="&owl;NamedIndividual"/> + <rdfs:label>Create Database Interface</rdfs:label> + <details rdf:resource="&req;DataBaseBackupCreatedSyncron"/> + <isLeadingTo rdf:resource="&req;Lastenheft"/> + </owl:Thing> + + + + <!-- http://ns.softwiki.de/req/CreateModernGUIDesign --> + + <owl:Thing rdf:about="&req;CreateModernGUIDesign"> + <rdf:type rdf:resource="&req;CustomerRequirement"/> + <rdf:type rdf:resource="&owl;NamedIndividual"/> + <rdfs:label>Create Modern GUI Design</rdfs:label> + <refersTo rdf:resource="&req;DesignTopic"/> + <isCreatedBy rdf:resource="&req;Jane_Smiley"/> + <isLeadingTo rdf:resource="&req;Lastenheft"/> + <isCommentedBy rdf:resource="&req;UsefulRequirement"/> + </owl:Thing> + + + + <!-- http://ns.softwiki.de/req/CreateNetworkInterface --> + + <owl:Thing rdf:about="&req;CreateNetworkInterface"> + <rdf:type rdf:resource="&req;DerivedRequirement"/> + <rdf:type rdf:resource="&owl;NamedIndividual"/> + <rdfs:label>Create Network Interface</rdfs:label> + <details rdf:resource="&req;BuildNetworkLoginSystem"/> + <isLeadingTo rdf:resource="&req;Pflichtenheft"/> + </owl:Thing> + + + + <!-- http://ns.softwiki.de/req/CreateVersion1 --> + + <owl:Thing rdf:about="&req;CreateVersion1"> + <rdf:type rdf:resource="&req;Goal"/> + <rdf:type rdf:resource="&owl;NamedIndividual"/> + <rdfs:label>Create Version 1</rdfs:label> + <isDefinedBy rdf:resource="&req;Jim"/> + <details rdf:resource="&req;SystemStabilityRequirement"/> + </owl:Thing> + + + + <!-- http://ns.softwiki.de/req/CreateVersion2 --> + + <owl:Thing rdf:about="&req;CreateVersion2"> + <rdf:type rdf:resource="&req;Goal"/> + <rdf:type rdf:resource="&owl;NamedIndividual"/> + <rdfs:label>Create Version 2</rdfs:label> + <isDefinedBy rdf:resource="&req;Tom"/> + <details rdf:resource="&req;UseDatabaseToStoreUserData"/> + </owl:Thing> + + + + <!-- http://ns.softwiki.de/req/CustomerRequirement1 --> + + <owl:Thing rdf:about="&req;CustomerRequirement1"> + <rdf:type rdf:resource="&req;Requirement"/> + <rdf:type rdf:resource="&owl;NamedIndividual"/> + <rdfs:label>Customer Requirement 1</rdfs:label> + <isLeadingTo rdf:resource="&req;Lastenheft"/> + <isCreatedBy rdf:resource="&req;Tom"/> + </owl:Thing> + + + + <!-- http://ns.softwiki.de/req/DataBaseBackupCreatedSyncron --> + + <owl:Thing rdf:about="&req;DataBaseBackupCreatedSyncron"> + <rdf:type rdf:resource="&req;PerformanceRequirement"/> + <rdf:type rdf:resource="&owl;NamedIndividual"/> + <rdfs:label>Database Backup Created Syncrom</rdfs:label> + <isCreatedBy rdf:resource="&req;Andrew_Stellman"/> + <willLeadTo rdf:resource="&req;DualCoreSystemWith8GigRam"/> + <isCommentedBy rdf:resource="&req;MustBeDiscussed"/> + <refersTo rdf:resource="&req;PerformanceTopic"/> + <isLeadingTo rdf:resource="&req;Pflichtenheft"/> + </owl:Thing> + + + + <!-- http://ns.softwiki.de/req/DataExecutionShouldBeDoneInUnder3Sec --> + + <owl:Thing rdf:about="&req;DataExecutionShouldBeDoneInUnder3Sec"> + <rdf:type rdf:resource="&req;PerformanceRequirement"/> + <rdf:type rdf:resource="&owl;NamedIndividual"/> + <rdfs:label>Dataexecution Should Be Done In Under 3 Sec</rdfs:label> + <isCreatedBy rdf:resource="&req;Jennifer_Greene"/> + <isLeadingTo rdf:resource="&req;Lastenheft"/> + <isCommentedBy rdf:resource="&req;MustBeDiscussed"/> + <refersTo rdf:resource="&req;PerformanceTopic"/> + <willLeadTo rdf:resource="&req;QuadCoreSystemWith16GigRam"/> + </owl:Thing> + + + + <!-- http://ns.softwiki.de/req/DatabaseServerCanBeUsedBy1000PersonsSimultaneus --> + + <owl:Thing rdf:about="&req;DatabaseServerCanBeUsedBy1000PersonsSimultaneus"> + <rdf:type rdf:resource="&req;PerformanceRequirement"/> + <rdf:type rdf:resource="&owl;NamedIndividual"/> + <rdfs:label>Database Server Can Be Used By 1000 Persons Simultaneus</rdfs:label> + <willLeadTo rdf:resource="&req;DatabaseServerWith32GigRam"/> + <isLeadingTo rdf:resource="&req;Lastenheft"/> + <isCommentedBy rdf:resource="&req;MustBeDiscussed"/> + <refersTo rdf:resource="&req;PerformanceTopic"/> + <isCreatedBy rdf:resource="&req;Tom"/> + </owl:Thing> + + + + <!-- http://ns.softwiki.de/req/DatabaseServerWith32GigRam --> + + <owl:Thing rdf:about="&req;DatabaseServerWith32GigRam"> + <rdf:type rdf:resource="&req;SystemRequirement"/> + <rdf:type rdf:resource="&owl;NamedIndividual"/> + <rdfs:label>Database Server With 32 Gig Ram</rdfs:label> + </owl:Thing> + + + + <!-- http://ns.softwiki.de/req/DatabaseTopic --> + + <owl:Thing rdf:about="&req;DatabaseTopic"> + <rdf:type rdf:resource="&req;Topic"/> + <rdf:type rdf:resource="&owl;NamedIndividual"/> + <rdfs:label>Database Topic</rdfs:label> + <specifies rdf:resource="&req;UseDatabaseToStoreUserData"/> + </owl:Thing> + + + + <!-- http://ns.softwiki.de/req/Derick_Garnier --> + + <owl:Thing rdf:about="&req;Derick_Garnier"> + <rdf:type rdf:resource="&req;Customer"/> + <rdf:type rdf:resource="&owl;NamedIndividual"/> + <rdfs:label>Derick Garnier</rdfs:label> + </owl:Thing> + + + + <!-- http://ns.softwiki.de/req/DesignTopic --> + + <owl:Thing rdf:about="&req;DesignTopic"> + <rdf:type rdf:resource="&req;Topic"/> + <rdf:type rdf:resource="&owl;NamedIndividual"/> + <rdfs:label>Design Topic</rdfs:label> + <specifies rdf:resource="&req;CreateModernGUIDesign"/> + <specifies rdf:resource="&req;UseOfIcons"/> + <specifies rdf:resource="&req;WindowDesign"/> + </owl:Thing> + + + + <!-- http://ns.softwiki.de/req/DialogSystemShoudRespondInUnder5Sec --> + + <owl:Thing rdf:about="&req;DialogSystemShoudRespondInUnder5Sec"> + <rdf:type rdf:resource="&req;PerformanceRequirement"/> + <rdf:type rdf:resource="&owl;NamedIndividual"/> + <rdfs:label>Dialog System Should Respond In Under 5 Sec</rdfs:label> + <willLeadTo rdf:resource="&req;DualCoreSystemWith8GigRam"/> + <isCommentedBy rdf:resource="&req;GoodIdea"/> + <isLeadingTo rdf:resource="&req;Lastenheft"/> + <refersTo rdf:resource="&req;PerformanceTopic"/> + <isCreatedBy rdf:resource="&req;Tom"/> + </owl:Thing> + + + + <!-- http://ns.softwiki.de/req/DualCoreSystemWith8GigRam --> + + <owl:Thing rdf:about="&req;DualCoreSystemWith8GigRam"> + <rdf:type rdf:resource="&req;SystemRequirement"/> + <rdf:type rdf:resource="&owl;NamedIndividual"/> + <rdfs:label>Dual Core System With 8 Gig Ram</rdfs:label> + </owl:Thing> + + + + <!-- http://ns.softwiki.de/req/EuropeanTradeUnionConfederation --> + + <owl:Thing rdf:about="&req;EuropeanTradeUnionConfederation"> + <rdf:type rdf:resource="&req;TradeUnion"/> + <rdf:type rdf:resource="&owl;NamedIndividual"/> + <rdfs:label>European Trade Union Confederation</rdfs:label> + </owl:Thing> + + + + <!-- http://ns.softwiki.de/req/FunctionTopic --> + + <owl:Thing rdf:about="&req;FunctionTopic"> + <rdf:type rdf:resource="&req;Topic"/> + <rdf:type rdf:resource="&owl;NamedIndividual"/> + <rdfs:label>Function Topic</rdfs:label> + <specifies rdf:resource="&req;LogEveryUserActivity"/> + </owl:Thing> + + + + <!-- http://ns.softwiki.de/req/GermanGovernment --> + + <owl:Thing rdf:about="&req;GermanGovernment"> + <rdf:type rdf:resource="&req;Government"/> + <rdf:type rdf:resource="&owl;NamedIndividual"/> + <rdfs:label>German Government</rdfs:label> + </owl:Thing> + + + + <!-- http://ns.softwiki.de/req/GoodIdea --> + + <owl:Thing rdf:about="&req;GoodIdea"> + <rdf:type rdf:resource="&req;Comment"/> + <rdf:type rdf:resource="&owl;NamedIndividual"/> + <rdfs:label>Good Idea</rdfs:label> + <comments rdf:resource="&req;DialogSystemShoudRespondInUnder5Sec"/> + <isDefinedBy rdf:resource="&req;Jennifer_Greene"/> + <isDefinedBy rdf:resource="&req;Stefan"/> + </owl:Thing> + + + + <!-- http://ns.softwiki.de/req/Jane_Smiley --> + + <owl:Thing rdf:about="&req;Jane_Smiley"> + <rdf:type rdf:resource="&req;Customer"/> + <rdf:type rdf:resource="&owl;NamedIndividual"/> + <rdfs:label>Jane Smiley</rdfs:label> + </owl:Thing> + + + + <!-- http://ns.softwiki.de/req/Jennifer_Greene --> + + <owl:Thing rdf:about="&req;Jennifer_Greene"> + <rdf:type rdf:resource="&req;Author"/> + <rdf:type rdf:resource="&owl;NamedIndividual"/> + <rdfs:label>Jennifer Greene</rdfs:label> + <votes rdf:resource="&req;MultiWindowSystem"/> + <defines rdf:resource="&req;loadGUIInUnder2Sec"/> + </owl:Thing> + + + + <!-- http://ns.softwiki.de/req/Jill --> + + <owl:Thing rdf:about="&req;Jill"> + <rdf:type rdf:resource="&req;Author"/> + <rdf:type rdf:resource="&owl;NamedIndividual"/> + <rdfs:label>Jill</rdfs:label> + <defines rdf:resource="&req;DialogSystemShoudRespondInUnder5Sec"/> + <votes rdf:resource="&req;SystemRequirement1"/> + </owl:Thing> + + + + <!-- http://ns.softwiki.de/req/Jim --> + + <owl:Thing rdf:about="&req;Jim"> + <rdf:type rdf:resource="&req;Author"/> + <rdf:type rdf:resource="&owl;NamedIndividual"/> + <rdfs:label>Jim</rdfs:label> + <defines rdf:resource="&req;MultiWindowSystem"/> + <votes rdf:resource="&req;SystemStabilityRequirement"/> + </owl:Thing> + + + + <!-- http://ns.softwiki.de/req/Lastenheft --> + + <owl:Thing rdf:about="&req;Lastenheft"> + <rdf:type rdf:resource="&req;Document"/> + <rdf:type rdf:resource="&owl;NamedIndividual"/> + <rdfs:label>Lastenheft</rdfs:label> + <leadsTo rdf:resource="&req;text"/> + </owl:Thing> + + + + <!-- http://ns.softwiki.de/req/LogEveryUserActivity --> + + <owl:Thing rdf:about="&req;LogEveryUserActivity"> + <rdf:type rdf:resource="&req;FunctionalRequirement"/> + <rdf:type rdf:resource="&owl;NamedIndividual"/> + ... [truncated message content] |
From: <lor...@us...> - 2013-09-04 13:58:46
|
Revision: 4058 http://sourceforge.net/p/dl-learner/code/4058 Author: lorenz_b Date: 2013-09-04 13:58:43 +0000 (Wed, 04 Sep 2013) Log Message: ----------- Added prefix trie from google. Modified Paths: -------------- trunk/components-core/pom.xml Added Paths: ----------- trunk/components-core/src/main/java/org/dllearner/utilities/datastructures/PrefixMap.java trunk/components-core/src/main/java/org/dllearner/utilities/datastructures/PrefixTrie.java Modified: trunk/components-core/pom.xml =================================================================== --- trunk/components-core/pom.xml 2013-09-04 13:21:22 UTC (rev 4057) +++ trunk/components-core/pom.xml 2013-09-04 13:58:43 UTC (rev 4058) @@ -308,6 +308,11 @@ <artifactId>jwnl</artifactId> <version>1.4.1.RC2</version> </dependency> + <dependency> + <groupId>com.google.collections</groupId> + <artifactId>google-collections</artifactId> + <version>1.0</version> + </dependency> </dependencies> <dependencyManagement> <dependencies> Added: trunk/components-core/src/main/java/org/dllearner/utilities/datastructures/PrefixMap.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/utilities/datastructures/PrefixMap.java (rev 0) +++ trunk/components-core/src/main/java/org/dllearner/utilities/datastructures/PrefixMap.java 2013-09-04 13:58:43 UTC (rev 4058) @@ -0,0 +1,31 @@ +// Copyright 2006 Google Inc. All Rights Reserved. + +package org.dllearner.utilities.datastructures; + +/** + * Maps string prefixes to values. For example, if you {@code put("foo", 1)}, + * {@code get("foobar")} returns {@code 1}. Prohibits null values. + * + * <p>Use instead of iterating over a series of string prefixes calling + * {@code String.startsWith(prefix)}. + * + * @author cra...@go... (Bob Lee) + */ +public interface PrefixMap<T> { + /** + * Maps prefix to value. + * + * @return The previous value stored for this prefix, or null if none. + * @throws IllegalArgumentException if prefix is an empty string. + */ + T put(CharSequence prefix, T value); + + /** + * Finds a prefix that matches {@code s} and returns the mapped value. + * + * If multiple prefixes in the map match {@code s}, the longest match wins. + * + * @return value for prefix matching {@code s} or {@code null} if none match. + */ + T get(CharSequence s); +} \ No newline at end of file Added: trunk/components-core/src/main/java/org/dllearner/utilities/datastructures/PrefixTrie.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/utilities/datastructures/PrefixTrie.java (rev 0) +++ trunk/components-core/src/main/java/org/dllearner/utilities/datastructures/PrefixTrie.java 2013-09-04 13:58:43 UTC (rev 4058) @@ -0,0 +1,154 @@ +// Copyright 2006 Google Inc. All Rights Reserved. + +package org.dllearner.utilities.datastructures; + +import java.util.Map; + +/** + * Trie implementation supporting CharSequences as prefixes. + * + * Prefixes are sequences of characters, and the set of allowed characters is + * specified as a range of sequential characters. By default, any seven-bit + * character may appear in a prefix, and so the trie is a 128-ary tree. + * + * @author cra...@go... (Bob Lee) + * @author mh...@go... (Matthew Harris) + */ +public class PrefixTrie<T> implements PrefixMap<T> { + // The set of allowed characters in prefixes is given by a range of + // consecutive characters. rangeOffset denotes the beginning of the range, + // and rangeSize gives the number of characters in the range, which is used as + // the number of children of each node. + private final char rangeOffset; + private final int rangeSize; + + private final Node<T> root; + + /** + * Constructs a trie for holding strings of seven-bit characters. + */ + public PrefixTrie() { + rangeOffset = '\0'; + rangeSize = 128; + root = new Node<T>(rangeSize); + } + + /** + * Constructs a trie for holding strings of characters. + * + * The set of characters allowed in prefixes is given by the range + * [rangeOffset, lastCharInRange], inclusive. + * + * @param firstCharInRange + * @param lastCharInRange + */ + public PrefixTrie(char firstCharInRange, char lastCharInRange) { + this.rangeOffset = firstCharInRange; + this.rangeSize = lastCharInRange - firstCharInRange + 1; + + if (rangeSize <= 0) { + throw new IllegalArgumentException("Char range must include some chars"); + } + + root = new Node<T>(rangeSize); + } + + /** + * {@inheritDoc} + * + * @throws IllegalArgumentException if prefix contains a character outside the + * range of legal prefix characters. + */ + public T put(CharSequence prefix, T value) { + if (value == null) { + throw new NullPointerException(); + } + + Node<T> current = root; + for (int i = 0; i < prefix.length(); i++) { + int nodeIndex = prefix.charAt(i) - rangeOffset; + try { + Node<T> next = current.next[nodeIndex]; + if (next == null) { + next = current.next[nodeIndex] = new Node<T>(rangeSize); + } + current = next; + } catch (ArrayIndexOutOfBoundsException e) { + throw new IllegalArgumentException( + "'" + prefix.charAt(i) + "' is not a legal prefix character."); + } + } + T oldValue = current.value; + current.value = value; + return oldValue; + } + + /** {@inheritDoc} */ + public T get(CharSequence s) { + Node<T> deepestWithValue = root; + Node<T> current = root; + for (int i = 0; i < s.length(); i++) { + int nodeIndex = s.charAt(i) - rangeOffset; + if (nodeIndex < 0 || rangeSize <= nodeIndex) { + return null; + } + current = current.next[nodeIndex]; + if (current == null) { + break; + } + if (current.value != null) { + deepestWithValue = current; + } + } + return deepestWithValue.value; + } + + /** + * Returns a Map containing the same data as this structure. + * + * This implementation constructs and populates an entirely new map rather + * than providing a map view on the trie, so this is mostly useful for + * debugging. + * + * @return A Map mapping each prefix to its corresponding value. + */ + public Map<String, T> toMap() { + Map<String, T> map = com.google.common.collect.Maps.newLinkedHashMap(); + addEntries(root, new StringBuilder(), map); + return map; + } + + /** + * Adds to the given map all entries at or below the given node. + * + * @param node + * @param builder A StringBuilder containing the prefix for the given node. + * @param map + */ + private void addEntries(Node<T> node, + StringBuilder builder, + Map<String, T> map) { + if (node.value != null) { + map.put(builder.toString(), node.value); + } + + for (int i = 0; i < node.next.length; i++) { + Node<T> next = node.next[i]; + if (next != null) { + builder.append((char) (i + rangeOffset)); + addEntries(next, builder, map); + builder.deleteCharAt(builder.length() - 1); + } + } + } + + private static class Node<T> { + T value; + final Node<T>[] next; + + @SuppressWarnings("unchecked") + Node(int numChildren) { + next = new Node[numChildren]; + } + } +} \ No newline at end of file This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <lor...@us...> - 2013-09-04 13:21:26
|
Revision: 4057 http://sourceforge.net/p/dl-learner/code/4057 Author: lorenz_b Date: 2013-09-04 13:21:22 +0000 (Wed, 04 Sep 2013) Log Message: ----------- Added wordnet+stanford. Added Paths: ----------- trunk/components-core/src/main/java/org/dllearner/algorithms/isle/WordNet.java Added: trunk/components-core/src/main/java/org/dllearner/algorithms/isle/WordNet.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/algorithms/isle/WordNet.java (rev 0) +++ trunk/components-core/src/main/java/org/dllearner/algorithms/isle/WordNet.java 2013-09-04 13:21:22 UTC (rev 4057) @@ -0,0 +1,191 @@ +package org.dllearner.algorithms.isle; + +import java.io.InputStream; +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; + +import net.didion.jwnl.JWNL; +import net.didion.jwnl.JWNLException; +import net.didion.jwnl.data.IndexWord; +import net.didion.jwnl.data.POS; +import net.didion.jwnl.data.PointerTarget; +import net.didion.jwnl.data.PointerUtils; +import net.didion.jwnl.data.Synset; +import net.didion.jwnl.data.Word; +import net.didion.jwnl.data.list.PointerTargetNode; +import net.didion.jwnl.data.list.PointerTargetNodeList; +import net.didion.jwnl.dictionary.Dictionary; + +public class WordNet { + + public Dictionary dict; + + public WordNet() { + try { + JWNL.initialize(this.getClass().getClassLoader().getResourceAsStream("wordnet_properties.xml")); + dict = Dictionary.getInstance(); + } catch (JWNLException e) { + e.printStackTrace(); + } + } + + public WordNet(String configPath) { + try { + JWNL.initialize(this.getClass().getClassLoader().getResourceAsStream(configPath)); + dict = Dictionary.getInstance(); + } catch (JWNLException e) { + e.printStackTrace(); + } + } + + public WordNet(InputStream propertiesStream) { + try { + JWNL.initialize(propertiesStream); + dict = Dictionary.getInstance(); + } catch (JWNLException e) { + e.printStackTrace(); + } + } + + public List<String> getBestSynonyms(POS pos, String s) { + + List<String> synonyms = new ArrayList<String>(); + + try { + IndexWord iw = dict.getIndexWord(pos, s);//dict.getMorphologicalProcessor().lookupBaseForm(pos, s) +// IndexWord iw = dict.getMorphologicalProcessor().lookupBaseForm(pos, s); + if(iw != null){ + Synset[] synsets = iw.getSenses(); + Word[] words = synsets[0].getWords(); + for(Word w : words){ + String c = w.getLemma(); + if (!c.equals(s) && !c.contains(" ") && synonyms.size() < 4) { + synonyms.add(c); + } + } + } + + } catch (JWNLException e) { + e.printStackTrace(); + } + return synonyms; + } + + public List<String> getSisterTerms(POS pos, String s){ + List<String> sisterTerms = new ArrayList<String>(); + + try { + IndexWord iw = dict.getIndexWord(pos, s);//dict.getMorphologicalProcessor().lookupBaseForm(pos, s) +// IndexWord iw = dict.getMorphologicalProcessor().lookupBaseForm(pos, s); + if(iw != null){ + Synset[] synsets = iw.getSenses(); + //System.out.println(synsets[0]); + PointerTarget[] pointerArr = synsets[0].getTargets(); + } + + } catch (JWNLException e) { + e.printStackTrace(); + } + return sisterTerms; + } + + public List<String> getAttributes(String s) { + + List<String> result = new ArrayList<String>(); + + try { + IndexWord iw = dict.getIndexWord(POS.ADJECTIVE, s); + if(iw != null){ + Synset[] synsets = iw.getSenses(); + Word[] words = synsets[0].getWords(); + for(Word w : words){ + String c = w.getLemma(); + if (!c.equals(s) && !c.contains(" ") && result.size() < 4) { + result.add(c); + } + } + } + + } catch (JWNLException e) { + e.printStackTrace(); + } + + return result; + } + + public static void main(String[] args) { + System.out.println(new WordNet().getBestSynonyms(POS.VERB, "learn")); + System.out.println(new WordNet().getSisterTerms(POS.NOUN, "actress")); + } + + /** + * Funktion returns a List of Hypo and Hypernyms of a given string + * @param s Word for which you want to get Hypo and Hypersyms + * @return List of Hypo and Hypernyms + * @throws JWNLException + */ + public List<String> getRelatedNouns(String s) { + List<String> result = new ArrayList<String>(); + IndexWord word = null; + Synset sense=null; + try{ + word=dict.getIndexWord(POS.NOUN,s); + if(word!=null){ + sense = word.getSense(1); + //Synset sense = word.getSense(1); + + PointerTargetNodeList relatedListHypernyms = null; + PointerTargetNodeList relatedListHyponyms = null; + try { + relatedListHypernyms = PointerUtils.getInstance().getDirectHypernyms(sense); + } catch (JWNLException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + try { + relatedListHyponyms = PointerUtils.getInstance().getDirectHyponyms(sense); + } catch (JWNLException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + + Iterator i = relatedListHypernyms.iterator(); + while (i.hasNext()) { + PointerTargetNode related = (PointerTargetNode) i.next(); + Synset s1 = related.getSynset(); + String tmp=(s1.toString()).replace(s1.getGloss(), ""); + tmp=tmp.replace(" -- ()]",""); + tmp=tmp.replaceAll("[0-9]",""); + tmp=tmp.replace("[Synset: [Offset: ",""); + tmp=tmp.replace("] [POS: noun] Words: ",""); + //its possible, that there is more than one word in a line from wordnet + String[] array_tmp=tmp.split(","); + for(String z : array_tmp) result.add(z.replace(" ", "")); + } + + Iterator j = relatedListHyponyms.iterator(); + while (j.hasNext()) { + PointerTargetNode related = (PointerTargetNode) j.next(); + Synset s1 = related.getSynset(); + String tmp=(s1.toString()).replace(s1.getGloss(), ""); + tmp=tmp.replace(" -- ()]",""); + tmp=tmp.replaceAll("[0-9]",""); + tmp=tmp.replace("[Synset: [Offset: ",""); + tmp=tmp.replace("] [POS: noun] Words: ",""); + //its possible, that there is more than one word in a line from wordnet + String[] array_tmp=tmp.split(","); + for(String z : array_tmp) result.add(z.replace(" ", "")); + } + } + }catch (JWNLException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + + + + return result; + } + +} This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <lor...@us...> - 2013-09-04 13:18:24
|
Revision: 4056 http://sourceforge.net/p/dl-learner/code/4056 Author: lorenz_b Date: 2013-09-04 13:18:17 +0000 (Wed, 04 Sep 2013) Log Message: ----------- Added wordnet+stanford. Modified Paths: -------------- trunk/components-core/pom.xml trunk/components-core/src/main/java/org/dllearner/algorithms/isle/StopWordFilter.java trunk/components-core/src/main/java/org/dllearner/algorithms/isle/index/Annotation.java trunk/components-core/src/main/java/org/dllearner/algorithms/isle/index/SemanticAnnotation.java trunk/components-core/src/main/java/org/dllearner/algorithms/isle/index/SemanticAnnotator.java trunk/components-core/src/main/java/org/dllearner/algorithms/isle/index/semantic/simple/SimpleSemanticIndex.java trunk/components-core/src/main/resources/wordnet_properties.xml trunk/components-core/src/test/java/org/dllearner/algorithms/isle/ISLETest.java Added Paths: ----------- trunk/components-core/src/main/java/org/dllearner/algorithms/isle/SimpleWordSenseDisambiguation.java Modified: trunk/components-core/pom.xml =================================================================== --- trunk/components-core/pom.xml 2013-09-04 10:04:14 UTC (rev 4055) +++ trunk/components-core/pom.xml 2013-09-04 13:18:17 UTC (rev 4056) @@ -282,6 +282,32 @@ <artifactId>jena-sparql-api-core</artifactId> <version>2.10.0-5-SNAPSHOT</version> </dependency> + <dependency> + <groupId>org.apache.commons</groupId> + <artifactId>commons-lang3</artifactId> + <version>3.1</version> + </dependency> + <dependency> + <groupId>edu.stanford.nlp</groupId> + <artifactId>stanford-corenlp</artifactId> + <version>1.3.4</version> + </dependency> + <dependency> + <groupId>edu.stanford.nlp</groupId> + <artifactId>stanford-corenlp</artifactId> + <version>1.3.4</version> + </dependency> + <dependency> + <groupId>edu.stanford.nlp</groupId> + <artifactId>stanford-corenlp</artifactId> + <version>1.3.4</version> + <classifier>models</classifier> + </dependency> + <dependency> + <groupId>net.didion.jwnl</groupId> + <artifactId>jwnl</artifactId> + <version>1.4.1.RC2</version> + </dependency> </dependencies> <dependencyManagement> <dependencies> Added: trunk/components-core/src/main/java/org/dllearner/algorithms/isle/SimpleWordSenseDisambiguation.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/algorithms/isle/SimpleWordSenseDisambiguation.java (rev 0) +++ trunk/components-core/src/main/java/org/dllearner/algorithms/isle/SimpleWordSenseDisambiguation.java 2013-09-04 13:18:17 UTC (rev 4056) @@ -0,0 +1,79 @@ +/** + * + */ +package org.dllearner.algorithms.isle; + +import java.util.HashSet; +import java.util.Set; + +import org.dllearner.algorithms.isle.index.Annotation; +import org.dllearner.algorithms.isle.index.SemanticAnnotation; +import org.dllearner.core.owl.Entity; +import org.dllearner.utilities.owl.OWLAPIConverter; +import org.semanticweb.owlapi.model.IRI; +import org.semanticweb.owlapi.model.OWLAnnotationAssertionAxiom; +import org.semanticweb.owlapi.model.OWLAnnotationProperty; +import org.semanticweb.owlapi.model.OWLDataFactory; +import org.semanticweb.owlapi.model.OWLEntity; +import org.semanticweb.owlapi.model.OWLLiteral; +import org.semanticweb.owlapi.model.OWLOntology; +import org.semanticweb.owlapi.util.IRIShortFormProvider; +import org.semanticweb.owlapi.util.SimpleIRIShortFormProvider; + +import uk.ac.manchester.cs.owl.owlapi.OWLDataFactoryImpl; + +/** + * @author Lorenz Buehmann + * + */ +public class SimpleWordSenseDisambiguation extends WordSenseDisambiguation{ + + private IRIShortFormProvider sfp = new SimpleIRIShortFormProvider(); + private OWLDataFactory df = new OWLDataFactoryImpl(); + private OWLAnnotationProperty annotationProperty = df.getRDFSLabel(); + + /** + * @param ontology + */ + public SimpleWordSenseDisambiguation(OWLOntology ontology) { + super(ontology); + } + + /* (non-Javadoc) + * @see org.dllearner.algorithms.isle.WordSenseDisambiguation#disambiguate(org.dllearner.algorithms.isle.index.Annotation, java.util.Set) + */ + @Override + public SemanticAnnotation disambiguate(Annotation annotation, Set<Entity> candidateEntities) { + String token = annotation.getToken(); + //check if annotation token matches label of entity or the part behind #(resp. /) + for (Entity entity : candidateEntities) { + Set<String> labels = getLabels(entity); + for (String label : labels) { + if(label.equals(token)){ + return new SemanticAnnotation(annotation, entity); + } + } + String shortForm = sfp.getShortForm(IRI.create(entity.getURI())); + if(annotation.equals(shortForm)){ + return new SemanticAnnotation(annotation, entity); + } + } + return null; + } + + private Set<String> getLabels(Entity entity){ + Set<String> labels = new HashSet<String>(); + OWLEntity owlEntity = OWLAPIConverter.getOWLAPIEntity(entity); + Set<OWLAnnotationAssertionAxiom> axioms = ontology.getAnnotationAssertionAxioms(owlEntity.getIRI()); + for (OWLAnnotationAssertionAxiom annotation : axioms) { + if(annotation.getProperty().equals(annotationProperty)){ + if (annotation.getValue() instanceof OWLLiteral) { + OWLLiteral val = (OWLLiteral) annotation.getValue(); + labels.add(val.getLiteral()); + } + } + } + return labels; + } + +} Modified: trunk/components-core/src/main/java/org/dllearner/algorithms/isle/StopWordFilter.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/algorithms/isle/StopWordFilter.java 2013-09-04 10:04:14 UTC (rev 4055) +++ trunk/components-core/src/main/java/org/dllearner/algorithms/isle/StopWordFilter.java 2013-09-04 13:18:17 UTC (rev 4056) @@ -45,7 +45,7 @@ public void removeStopWordAnnotations(Set<Annotation> annotations) { for (Iterator<Annotation> iter = annotations.iterator(); iter.hasNext();) { Annotation annotation = iter.next(); - String content = annotation.getGetReferencedDocument().getContent(); + String content = annotation.getReferencedDocument().getContent(); String token = content.substring(annotation.getOffset(), annotation.getOffset()+annotation.getLength()); if(stopWords.contains(token)){ iter.remove(); Modified: trunk/components-core/src/main/java/org/dllearner/algorithms/isle/index/Annotation.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/algorithms/isle/index/Annotation.java 2013-09-04 10:04:14 UTC (rev 4055) +++ trunk/components-core/src/main/java/org/dllearner/algorithms/isle/index/Annotation.java 2013-09-04 13:18:17 UTC (rev 4056) @@ -10,18 +10,18 @@ */ public class Annotation { - private Document getReferencedDocument; + private Document referencedDocument; private int offset; private int length; - public Annotation(Document getReferencedDocument, int offset, int length) { - this.getReferencedDocument = getReferencedDocument; + public Annotation(Document referencedDocument, int offset, int length) { + this.referencedDocument = referencedDocument; this.offset = offset; this.length = length; } - public Document getGetReferencedDocument() { - return getReferencedDocument; + public Document getReferencedDocument() { + return referencedDocument; } public int getOffset() { @@ -31,12 +31,16 @@ public int getLength() { return length; } + + public String getToken(){ + return referencedDocument.getContent().substring(offset, offset + length); + } @Override public int hashCode() { final int prime = 31; int result = 1; - result = prime * result + ((getReferencedDocument == null) ? 0 : getReferencedDocument.hashCode()); + result = prime * result + ((referencedDocument == null) ? 0 : referencedDocument.hashCode()); result = prime * result + length; result = prime * result + offset; return result; @@ -51,10 +55,10 @@ if (getClass() != obj.getClass()) return false; Annotation other = (Annotation) obj; - if (getReferencedDocument == null) { - if (other.getReferencedDocument != null) + if (referencedDocument == null) { + if (other.referencedDocument != null) return false; - } else if (!getReferencedDocument.equals(other.getReferencedDocument)) + } else if (!referencedDocument.equals(other.referencedDocument)) return false; if (length != other.length) return false; @@ -68,6 +72,6 @@ */ @Override public String toString() { - return "\"" + getReferencedDocument.getContent().substring(offset, offset+length) + "\" at position " + offset; + return "\"" + referencedDocument.getContent().substring(offset, offset+length) + "\" at position " + offset; } } Modified: trunk/components-core/src/main/java/org/dllearner/algorithms/isle/index/SemanticAnnotation.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/algorithms/isle/index/SemanticAnnotation.java 2013-09-04 10:04:14 UTC (rev 4055) +++ trunk/components-core/src/main/java/org/dllearner/algorithms/isle/index/SemanticAnnotation.java 2013-09-04 13:18:17 UTC (rev 4056) @@ -14,7 +14,7 @@ private Entity entity; public SemanticAnnotation(Annotation annotation, Entity entity) { - super(annotation.getGetReferencedDocument(), annotation.getOffset(), annotation.getLength()); + super(annotation.getReferencedDocument(), annotation.getOffset(), annotation.getLength()); this.entity = entity; } Modified: trunk/components-core/src/main/java/org/dllearner/algorithms/isle/index/SemanticAnnotator.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/algorithms/isle/index/SemanticAnnotator.java 2013-09-04 10:04:14 UTC (rev 4055) +++ trunk/components-core/src/main/java/org/dllearner/algorithms/isle/index/SemanticAnnotator.java 2013-09-04 13:18:17 UTC (rev 4056) @@ -43,8 +43,9 @@ for (Annotation annotation : annotations) { Set<Entity> candidateEntities = entityCandidateGenerator.getCandidates(annotation); SemanticAnnotation semanticAnnotation = wordSenseDisambiguation.disambiguate(annotation, candidateEntities); - semanticAnnotations.add(semanticAnnotation); - + if(semanticAnnotation != null){ + semanticAnnotations.add(semanticAnnotation); + } } AnnotatedDocument annotatedDocument = new AnnotatedTextDocument(document, semanticAnnotations); return annotatedDocument; Modified: trunk/components-core/src/main/java/org/dllearner/algorithms/isle/index/semantic/simple/SimpleSemanticIndex.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/algorithms/isle/index/semantic/simple/SimpleSemanticIndex.java 2013-09-04 10:04:14 UTC (rev 4055) +++ trunk/components-core/src/main/java/org/dllearner/algorithms/isle/index/semantic/simple/SimpleSemanticIndex.java 2013-09-04 13:18:17 UTC (rev 4056) @@ -4,6 +4,7 @@ package org.dllearner.algorithms.isle.index.semantic.simple; import org.dllearner.algorithms.isle.RandomWordSenseDisambiguation; +import org.dllearner.algorithms.isle.SimpleWordSenseDisambiguation; import org.dllearner.algorithms.isle.index.SimpleEntityCandidateGenerator; import org.dllearner.algorithms.isle.index.SimpleLinguisticAnnotator; import org.dllearner.algorithms.isle.index.semantic.SemanticIndex; @@ -28,7 +29,7 @@ public SimpleSemanticIndex(OWLOntology ontology, SyntacticIndex syntacticIndex) { super(ontology, syntacticIndex, - new RandomWordSenseDisambiguation(ontology), + new SimpleWordSenseDisambiguation(ontology), new SimpleEntityCandidateGenerator(ontology), new SimpleLinguisticAnnotator()); } Modified: trunk/components-core/src/main/resources/wordnet_properties.xml =================================================================== --- trunk/components-core/src/main/resources/wordnet_properties.xml 2013-09-04 10:04:14 UTC (rev 4055) +++ trunk/components-core/src/main/resources/wordnet_properties.xml 2013-09-04 13:18:17 UTC (rev 4056) @@ -38,7 +38,7 @@ <param name="dictionary_element_factory" value="net.didion.jwnl.princeton.data.PrincetonWN17FileDictionaryElementFactory"/> <param name="file_manager" value="net.didion.jwnl.dictionary.file_manager.FileManagerImpl"> <param name="file_type" value="net.didion.jwnl.princeton.file.PrincetonRandomAccessDictionaryFile"/> - <param name="dictionary_path" value="/opt/wordnet/dict"/> + <param name="dictionary_path" value="/opt/wordnet"/> </param> </dictionary> <resource class="PrincetonResource"/> Modified: trunk/components-core/src/test/java/org/dllearner/algorithms/isle/ISLETest.java =================================================================== --- trunk/components-core/src/test/java/org/dllearner/algorithms/isle/ISLETest.java 2013-09-04 10:04:14 UTC (rev 4055) +++ trunk/components-core/src/test/java/org/dllearner/algorithms/isle/ISLETest.java 2013-09-04 13:18:17 UTC (rev 4056) @@ -118,8 +118,14 @@ public void testSemanticIndexAnnotationProperty(){ semanticIndex = new SimpleSemanticIndex(ontology, syntacticIndex); semanticIndex.buildIndex(df.getRDFSLabel(), null); - Set<AnnotatedDocument> documents = semanticIndex.getDocuments(new NamedClass("http://example.com/father#father")); - System.out.println(documents); + + NamedClass nc = new NamedClass("http://example.com/father#father"); + Set<AnnotatedDocument> documents = semanticIndex.getDocuments(nc); + System.out.println("Documents for " + nc + ":\n" + documents); + + nc = new NamedClass("http://example.com/father#person"); + documents = semanticIndex.getDocuments(nc); + System.out.println("Documents for " + nc + ":\n" + documents); } @Test This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jen...@us...> - 2013-09-04 10:04:18
|
Revision: 4055 http://sourceforge.net/p/dl-learner/code/4055 Author: jenslehmann Date: 2013-09-04 10:04:14 +0000 (Wed, 04 Sep 2013) Log Message: ----------- ISLE / CELOE comparison extended Modified Paths: -------------- trunk/components-core/src/main/java/org/dllearner/algorithms/celoe/CELOE.java trunk/components-core/src/main/java/org/dllearner/algorithms/isle/ISLE.java trunk/components-core/src/test/java/org/dllearner/algorithms/isle/ISLETest.java Added Paths: ----------- trunk/test/isle/father/ontology.owl Removed Paths: ------------- trunk/test/isle/father/father_labeled.owl Modified: trunk/components-core/src/main/java/org/dllearner/algorithms/celoe/CELOE.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/algorithms/celoe/CELOE.java 2013-09-04 09:56:41 UTC (rev 4054) +++ trunk/components-core/src/main/java/org/dllearner/algorithms/celoe/CELOE.java 2013-09-04 10:04:14 UTC (rev 4055) @@ -149,9 +149,11 @@ private int expressionTests = 0; private int minHorizExp = 0; private int maxHorizExp = 0; + private long totalRuntimeNs; // TODO: turn those into config options + // important: do not initialise those with empty sets // null = no settings for allowance / ignorance // empty set = allow / ignore nothing (it is often not desired to allow no class!) @@ -536,7 +538,8 @@ if (stop) { logger.info("Algorithm stopped ("+expressionTests+" descriptions tested). " + nodes.size() + " nodes in the search tree.\n"); } else { - logger.info("Algorithm terminated successfully (time: " + Helper.prettyPrintNanoSeconds(System.nanoTime()-nanoStartTime) + ", "+expressionTests+" descriptions tested, " + nodes.size() + " nodes in the search tree).\n"); + totalRuntimeNs = System.nanoTime()-nanoStartTime; + logger.info("Algorithm terminated successfully (time: " + Helper.prettyPrintNanoSeconds(totalRuntimeNs) + ", "+expressionTests+" descriptions tested, " + nodes.size() + " nodes in the search tree).\n"); logger.info(reasoner.toString()); } @@ -897,6 +900,10 @@ } } + public TreeSet<OENode> getNodes() { + return nodes; + } + public int getMaximumHorizontalExpansion() { return maxHorizExp; } @@ -1102,6 +1109,10 @@ this.stopOnFirstDefinition = stopOnFirstDefinition; } + public long getTotalRuntimeNs() { + return totalRuntimeNs; + } + public static void main(String[] args) throws Exception{ AbstractKnowledgeSource ks = new OWLFile("../examples/family/father_oe.owl"); ks.init(); Modified: trunk/components-core/src/main/java/org/dllearner/algorithms/isle/ISLE.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/algorithms/isle/ISLE.java 2013-09-04 09:56:41 UTC (rev 4054) +++ trunk/components-core/src/main/java/org/dllearner/algorithms/isle/ISLE.java 2013-09-04 10:04:14 UTC (rev 4055) @@ -146,6 +146,7 @@ private int expressionTests = 0; private int minHorizExp = 0; private int maxHorizExp = 0; + private long totalRuntimeNs; // TODO: turn those into config options @@ -533,7 +534,8 @@ if (stop) { logger.info("Algorithm stopped ("+expressionTests+" descriptions tested). " + nodes.size() + " nodes in the search tree.\n"); } else { - logger.info("Algorithm terminated successfully (time: " + Helper.prettyPrintNanoSeconds(System.nanoTime()-nanoStartTime) + ", "+expressionTests+" descriptions tested, " + nodes.size() + " nodes in the search tree).\n"); + totalRuntimeNs = System.nanoTime()-nanoStartTime; + logger.info("Algorithm terminated successfully (time: " + Helper.prettyPrintNanoSeconds(totalRuntimeNs) + ", "+expressionTests+" descriptions tested, " + nodes.size() + " nodes in the search tree).\n"); logger.info(reasoner.toString()); } @@ -1099,4 +1101,12 @@ this.stopOnFirstDefinition = stopOnFirstDefinition; } + public long getTotalRuntimeNs() { + return totalRuntimeNs; + } + + public TreeSet<OENode> getNodes() { + return nodes; + } + } Modified: trunk/components-core/src/test/java/org/dllearner/algorithms/isle/ISLETest.java =================================================================== --- trunk/components-core/src/test/java/org/dllearner/algorithms/isle/ISLETest.java 2013-09-04 09:56:41 UTC (rev 4054) +++ trunk/components-core/src/test/java/org/dllearner/algorithms/isle/ISLETest.java 2013-09-04 10:04:14 UTC (rev 4055) @@ -5,6 +5,7 @@ import java.io.File; import java.io.IOException; +import java.text.DecimalFormat; import java.util.HashSet; import java.util.Map; import java.util.Set; @@ -28,6 +29,7 @@ import org.dllearner.kb.OWLAPIOntology; import org.dllearner.learningproblems.ClassLearningProblem; import org.dllearner.reasoning.FastInstanceChecker; +import org.dllearner.utilities.Helper; import org.junit.Before; import org.junit.Test; import org.semanticweb.owlapi.apibinding.OWLManager; @@ -66,7 +68,7 @@ */ public ISLETest() throws Exception{ manager = OWLManager.createOWLOntologyManager(); - ontology = manager.loadOntologyFromOntologyDocument(new File(testFolder + "father_labeled.owl")); + ontology = manager.loadOntologyFromOntologyDocument(new File(testFolder + "ontology.owl")); cls = new NamedClass("http://example.com/father#father"); textRetriever = new RDFSLabelEntityTextRetriever(ontology); syntacticIndex = new OWLOntologyLuceneSyntacticIndexCreator(ontology, df.getRDFSLabel(), searchField).buildIndex(); @@ -189,6 +191,16 @@ celoe.setReplaceSearchTree(true); celoe.init(); celoe.start(); + System.out.println(); + + DecimalFormat df = new DecimalFormat("000.00"); + System.out.println("Summary ISLE vs. CELOE"); + System.out.println("======================"); + System.out.println("accuracy: " + df.format(100*isle.getCurrentlyBestAccuracy())+"% vs. " + df.format(100*celoe.getCurrentlyBestAccuracy())+"%"); + System.out.println("expressions tested: " + isle.getClassExpressionTests() + " vs. " + celoe.getClassExpressionTests()); + System.out.println("search tree nodes: " + isle.getNodes().size() + " vs. " + celoe.getNodes().size()); + System.out.println("runtime: " + Helper.prettyPrintMilliSeconds(isle.getTotalRuntimeNs()) + " vs. " + Helper.prettyPrintMilliSeconds(celoe.getTotalRuntimeNs())); + } } Deleted: trunk/test/isle/father/father_labeled.owl =================================================================== --- trunk/test/isle/father/father_labeled.owl 2013-09-04 09:56:41 UTC (rev 4054) +++ trunk/test/isle/father/father_labeled.owl 2013-09-04 10:04:14 UTC (rev 4055) @@ -1,169 +0,0 @@ -<?xml version="1.0"?> - - -<!DOCTYPE rdf:RDF [ - <!ENTITY father "http://example.com/father#" > - <!ENTITY owl "http://www.w3.org/2002/07/owl#" > - <!ENTITY xsd "http://www.w3.org/2001/XMLSchema#" > - <!ENTITY owl2xml "http://www.w3.org/2006/12/owl2-xml#" > - <!ENTITY rdfs "http://www.w3.org/2000/01/rdf-schema#" > - <!ENTITY rdf "http://www.w3.org/1999/02/22-rdf-syntax-ns#" > -]> - - -<rdf:RDF xmlns="http://example.com/father#" - xml:base="http://example.com/father" - xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#" - xmlns:owl2xml="http://www.w3.org/2006/12/owl2-xml#" - xmlns:owl="http://www.w3.org/2002/07/owl#" - xmlns:xsd="http://www.w3.org/2001/XMLSchema#" - xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" - xmlns:father="http://example.com/father#"> - <owl:Ontology rdf:about="http://example.com/father"/> - - - - <!-- - /////////////////////////////////////////////////////////////////////////////////////// - // - // Object Properties - // - /////////////////////////////////////////////////////////////////////////////////////// - --> - - - - - <!-- http://example.com/father#hasChild --> - - <owl:ObjectProperty rdf:about="&father;hasChild"> - <rdfs:label xml:lang="en">has child</rdfs:label> - <rdfs:domain rdf:resource="&father;person"/> - <rdfs:range rdf:resource="&father;person"/> - </owl:ObjectProperty> - - - - <!-- - /////////////////////////////////////////////////////////////////////////////////////// - // - // Classes - // - /////////////////////////////////////////////////////////////////////////////////////// - --> - - - - - <!-- http://example.com/father#father --> - - <owl:Class rdf:about="&father;father"> - <rdfs:label xml:lang="en">person which has at least 1 child</rdfs:label> - <rdfs:subClassOf rdf:resource="&father;male"/> - </owl:Class> - - - - <!-- http://example.com/father#female --> - - <owl:Class rdf:about="&father;female"> - <rdfs:label xml:lang="en">female</rdfs:label> - <rdfs:subClassOf rdf:resource="&father;person"/> - <owl:disjointWith rdf:resource="&father;male"/> - </owl:Class> - - - - <!-- http://example.com/father#male --> - - <owl:Class rdf:about="&father;male"> - <rdfs:label xml:lang="en">male</rdfs:label> - <rdfs:subClassOf rdf:resource="&father;person"/> - </owl:Class> - - - - <!-- http://example.com/father#person --> - - <owl:Class rdf:about="&father;person"> - <rdfs:label xml:lang="en">Person</rdfs:label> - <rdfs:subClassOf rdf:resource="&owl;Thing"/> - </owl:Class> - - - - <!-- http://www.w3.org/2002/07/owl#Thing --> - - <owl:Class rdf:about="&owl;Thing"/> - - - - <!-- - /////////////////////////////////////////////////////////////////////////////////////// - // - // Individuals - // - /////////////////////////////////////////////////////////////////////////////////////// - --> - - - - - <!-- http://example.com/father#anna --> - - <owl:NamedIndividual rdf:about="&father;anna"> - <rdf:type rdf:resource="&father;female"/> - <hasChild rdf:resource="&father;heinz"/> - </owl:NamedIndividual> - - - - <!-- http://example.com/father#heinz --> - - <owl:NamedIndividual rdf:about="&father;heinz"> - <rdf:type rdf:resource="&father;male"/> - </owl:NamedIndividual> - - - - <!-- http://example.com/father#markus --> - - <owl:NamedIndividual rdf:about="&father;markus"> - <rdf:type rdf:resource="&father;father"/> - <rdf:type rdf:resource="&father;male"/> - <hasChild rdf:resource="&father;anna"/> - </owl:NamedIndividual> - - - - <!-- http://example.com/father#martin --> - - <owl:NamedIndividual rdf:about="&father;martin"> - <rdf:type rdf:resource="&father;father"/> - <rdf:type rdf:resource="&father;male"/> - <hasChild rdf:resource="&father;heinz"/> - </owl:NamedIndividual> - - - - <!-- http://example.com/father#michelle --> - - <owl:NamedIndividual rdf:about="&father;michelle"> - <rdf:type rdf:resource="&father;female"/> - </owl:NamedIndividual> - - - - <!-- http://example.com/father#stefan --> - - <owl:NamedIndividual rdf:about="&father;stefan"> - <rdf:type rdf:resource="&father;father"/> - <rdf:type rdf:resource="&father;male"/> - <hasChild rdf:resource="&father;markus"/> - </owl:NamedIndividual> -</rdf:RDF> - - - -<!-- Generated by the OWL API (version 3.4.2) http://owlapi.sourceforge.net --> - Copied: trunk/test/isle/father/ontology.owl (from rev 4046, trunk/test/isle/father/father_labeled.owl) =================================================================== --- trunk/test/isle/father/ontology.owl (rev 0) +++ trunk/test/isle/father/ontology.owl 2013-09-04 10:04:14 UTC (rev 4055) @@ -0,0 +1,169 @@ +<?xml version="1.0"?> + + +<!DOCTYPE rdf:RDF [ + <!ENTITY father "http://example.com/father#" > + <!ENTITY owl "http://www.w3.org/2002/07/owl#" > + <!ENTITY xsd "http://www.w3.org/2001/XMLSchema#" > + <!ENTITY owl2xml "http://www.w3.org/2006/12/owl2-xml#" > + <!ENTITY rdfs "http://www.w3.org/2000/01/rdf-schema#" > + <!ENTITY rdf "http://www.w3.org/1999/02/22-rdf-syntax-ns#" > +]> + + +<rdf:RDF xmlns="http://example.com/father#" + xml:base="http://example.com/father" + xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#" + xmlns:owl2xml="http://www.w3.org/2006/12/owl2-xml#" + xmlns:owl="http://www.w3.org/2002/07/owl#" + xmlns:xsd="http://www.w3.org/2001/XMLSchema#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:father="http://example.com/father#"> + <owl:Ontology rdf:about="http://example.com/father"/> + + + + <!-- + /////////////////////////////////////////////////////////////////////////////////////// + // + // Object Properties + // + /////////////////////////////////////////////////////////////////////////////////////// + --> + + + + + <!-- http://example.com/father#hasChild --> + + <owl:ObjectProperty rdf:about="&father;hasChild"> + <rdfs:label xml:lang="en">has child</rdfs:label> + <rdfs:domain rdf:resource="&father;person"/> + <rdfs:range rdf:resource="&father;person"/> + </owl:ObjectProperty> + + + + <!-- + /////////////////////////////////////////////////////////////////////////////////////// + // + // Classes + // + /////////////////////////////////////////////////////////////////////////////////////// + --> + + + + + <!-- http://example.com/father#father --> + + <owl:Class rdf:about="&father;father"> + <rdfs:label xml:lang="en">person which has at least 1 child</rdfs:label> + <rdfs:subClassOf rdf:resource="&father;male"/> + </owl:Class> + + + + <!-- http://example.com/father#female --> + + <owl:Class rdf:about="&father;female"> + <rdfs:label xml:lang="en">female</rdfs:label> + <rdfs:subClassOf rdf:resource="&father;person"/> + <owl:disjointWith rdf:resource="&father;male"/> + </owl:Class> + + + + <!-- http://example.com/father#male --> + + <owl:Class rdf:about="&father;male"> + <rdfs:label xml:lang="en">male</rdfs:label> + <rdfs:subClassOf rdf:resource="&father;person"/> + </owl:Class> + + + + <!-- http://example.com/father#person --> + + <owl:Class rdf:about="&father;person"> + <rdfs:label xml:lang="en">Person</rdfs:label> + <rdfs:subClassOf rdf:resource="&owl;Thing"/> + </owl:Class> + + + + <!-- http://www.w3.org/2002/07/owl#Thing --> + + <owl:Class rdf:about="&owl;Thing"/> + + + + <!-- + /////////////////////////////////////////////////////////////////////////////////////// + // + // Individuals + // + /////////////////////////////////////////////////////////////////////////////////////// + --> + + + + + <!-- http://example.com/father#anna --> + + <owl:NamedIndividual rdf:about="&father;anna"> + <rdf:type rdf:resource="&father;female"/> + <hasChild rdf:resource="&father;heinz"/> + </owl:NamedIndividual> + + + + <!-- http://example.com/father#heinz --> + + <owl:NamedIndividual rdf:about="&father;heinz"> + <rdf:type rdf:resource="&father;male"/> + </owl:NamedIndividual> + + + + <!-- http://example.com/father#markus --> + + <owl:NamedIndividual rdf:about="&father;markus"> + <rdf:type rdf:resource="&father;father"/> + <rdf:type rdf:resource="&father;male"/> + <hasChild rdf:resource="&father;anna"/> + </owl:NamedIndividual> + + + + <!-- http://example.com/father#martin --> + + <owl:NamedIndividual rdf:about="&father;martin"> + <rdf:type rdf:resource="&father;father"/> + <rdf:type rdf:resource="&father;male"/> + <hasChild rdf:resource="&father;heinz"/> + </owl:NamedIndividual> + + + + <!-- http://example.com/father#michelle --> + + <owl:NamedIndividual rdf:about="&father;michelle"> + <rdf:type rdf:resource="&father;female"/> + </owl:NamedIndividual> + + + + <!-- http://example.com/father#stefan --> + + <owl:NamedIndividual rdf:about="&father;stefan"> + <rdf:type rdf:resource="&father;father"/> + <rdf:type rdf:resource="&father;male"/> + <hasChild rdf:resource="&father;markus"/> + </owl:NamedIndividual> +</rdf:RDF> + + + +<!-- Generated by the OWL API (version 3.4.2) http://owlapi.sourceforge.net --> + This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <lor...@us...> - 2013-09-04 09:56:48
|
Revision: 4054 http://sourceforge.net/p/dl-learner/code/4054 Author: lorenz_b Date: 2013-09-04 09:56:41 +0000 (Wed, 04 Sep 2013) Log Message: ----------- Added simple stop word filtering list. Modified Paths: -------------- trunk/components-core/src/main/java/org/dllearner/algorithms/qtl/operations/lgg/LGGGeneratorImpl.java trunk/components-core/src/main/java/org/dllearner/kb/sparql/SparqlEndpoint.java Added Paths: ----------- trunk/components-core/src/main/resources/stopwords.txt Modified: trunk/components-core/src/main/java/org/dllearner/algorithms/qtl/operations/lgg/LGGGeneratorImpl.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/algorithms/qtl/operations/lgg/LGGGeneratorImpl.java 2013-09-04 09:55:35 UTC (rev 4053) +++ trunk/components-core/src/main/java/org/dllearner/algorithms/qtl/operations/lgg/LGGGeneratorImpl.java 2013-09-04 09:56:41 UTC (rev 4054) @@ -26,10 +26,16 @@ import java.util.TreeSet; import org.apache.log4j.Logger; +import org.dllearner.algorithms.qtl.cache.QueryTreeCache; import org.dllearner.algorithms.qtl.datastructures.QueryTree; import org.dllearner.algorithms.qtl.datastructures.impl.QueryTreeImpl; +import org.dllearner.kb.sparql.ConciseBoundedDescriptionGenerator; +import org.dllearner.kb.sparql.ConciseBoundedDescriptionGeneratorImpl; +import org.dllearner.kb.sparql.SparqlEndpoint; +import com.google.common.collect.Lists; import com.hp.hpl.jena.datatypes.RDFDatatype; +import com.hp.hpl.jena.rdf.model.Model; import com.jamonapi.Monitor; import com.jamonapi.MonitorFactory; @@ -112,7 +118,7 @@ return lgg; } - private QueryTree<N> computeLGG(QueryTree<N> tree1, QueryTree<N> tree2, boolean learnFilters){ + private QueryTree<N> computeLGG(QueryTree<N> tree1, QueryTree<N> tree2, boolean learnFilters){System.out.println("call"); if(logger.isDebugEnabled()){ logger.debug("Computing LGG for"); logger.debug(tree1.getStringRepresentation()); @@ -222,5 +228,30 @@ addNumbering(child); } } + + public static void main(String[] args) throws Exception { + LGGGenerator<String> lggGen = new LGGGeneratorImpl<String>(); + + List<QueryTree<String>> trees = new ArrayList<QueryTree<String>>(); + QueryTree<String> tree; + Model model; + ConciseBoundedDescriptionGenerator cbdGenerator = new ConciseBoundedDescriptionGeneratorImpl(SparqlEndpoint.getEndpointDBpedia(), "cache"); + cbdGenerator.setRecursionDepth(1); + QueryTreeCache treeCache = new QueryTreeCache(); + List<String> resources = Lists.newArrayList("http://dbpedia.org/resource/Leipzig");//, "http://dbpedia.org/resource/Dresden"); + for(String resource : resources){ + try { + System.out.println(resource); + model = cbdGenerator.getConciseBoundedDescription(resource); + tree = treeCache.getQueryTree(resource, model); + System.out.println(tree.getStringRepresentation()); + trees.add(tree); + trees.add(tree); + } catch (Exception e) { + e.printStackTrace(); + } + } + lggGen.getLGG(trees); + } } Modified: trunk/components-core/src/main/java/org/dllearner/kb/sparql/SparqlEndpoint.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/kb/sparql/SparqlEndpoint.java 2013-09-04 09:55:35 UTC (rev 4053) +++ trunk/components-core/src/main/java/org/dllearner/kb/sparql/SparqlEndpoint.java 2013-09-04 09:56:41 UTC (rev 4054) @@ -227,6 +227,18 @@ return new SparqlEndpoint(u, defaultGraphURIs, new LinkedList<String>()); } + public static SparqlEndpoint getEndpointDBpediaLOD2Cloud() { + URL u = null; + try { + u = new URL("http://lod.openlinksw.com/sparql/"); + } catch (Exception e) { + e.printStackTrace(); + } + LinkedList<String> defaultGraphURIs=new LinkedList<String>(); + defaultGraphURIs.add("http://dbpedia.org"); + return new SparqlEndpoint(u, defaultGraphURIs, new LinkedList<String>()); + } + public static SparqlEndpoint getEndpointLinkedGeoData() { URL u = null; try { Added: trunk/components-core/src/main/resources/stopwords.txt =================================================================== --- trunk/components-core/src/main/resources/stopwords.txt (rev 0) +++ trunk/components-core/src/main/resources/stopwords.txt 2013-09-04 09:56:41 UTC (rev 4054) @@ -0,0 +1,174 @@ +a +about +above +after +again +against +all +am +an +and +any +are +aren't +as +at +be +because +been +before +being +below +between +both +but +by +can't +cannot +could +couldn't +did +didn't +do +does +doesn't +doing +don't +down +during +each +few +for +from +further +had +hadn't +has +hasn't +have +haven't +having +he +he'd +he'll +he's +her +here +here's +hers +herself +him +himself +his +how +how's +i +i'd +i'll +i'm +i've +if +in +into +is +isn't +it +it's +its +itself +let's +me +more +most +mustn't +my +myself +no +nor +not +of +off +on +once +only +or +other +ought +our +ours +ourselves +out +over +own +same +shan't +she +she'd +she'll +she's +should +shouldn't +so +some +such +than +that +that's +the +their +theirs +them +themselves +then +there +there's +these +they +they'd +they'll +they're +they've +this +those +through +to +too +under +until +up +very +was +wasn't +we +we'd +we'll +we're +we've +were +weren't +what +what's +when +when's +where +where's +which +while +who +who's +whom +why +why's +with +won't +would +wouldn't +you +you'd +you'll +you're +you've +your +yours +yourself +yourselves \ No newline at end of file This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <dfl...@us...> - 2013-09-04 09:55:38
|
Revision: 4053 http://sourceforge.net/p/dl-learner/code/4053 Author: dfleischhacker Date: 2013-09-04 09:55:35 +0000 (Wed, 04 Sep 2013) Log Message: ----------- Remove debugging output Modified Paths: -------------- trunk/components-core/src/main/java/org/dllearner/algorithms/isle/index/NGramGeneratingAnnotator.java Modified: trunk/components-core/src/main/java/org/dllearner/algorithms/isle/index/NGramGeneratingAnnotator.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/algorithms/isle/index/NGramGeneratingAnnotator.java 2013-09-04 09:52:57 UTC (rev 4052) +++ trunk/components-core/src/main/java/org/dllearner/algorithms/isle/index/NGramGeneratingAnnotator.java 2013-09-04 09:55:35 UTC (rev 4053) @@ -67,7 +67,6 @@ lastEnd = wordEnd.get(i + j); } String nGram = sb.toString().trim(); - System.out.println(nGram); annotations.add(new Annotation(document, curStart, lastEnd - curStart)); i++; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <dfl...@us...> - 2013-09-04 09:53:01
|
Revision: 4052 http://sourceforge.net/p/dl-learner/code/4052 Author: dfleischhacker Date: 2013-09-04 09:52:57 +0000 (Wed, 04 Sep 2013) Log Message: ----------- Add n-grams to annotations from SimpleLinguisticAnnotator Modified Paths: -------------- trunk/components-core/src/main/java/org/dllearner/algorithms/isle/index/NGramGeneratingAnnotator.java trunk/components-core/src/main/java/org/dllearner/algorithms/isle/index/SimpleLinguisticAnnotator.java Modified: trunk/components-core/src/main/java/org/dllearner/algorithms/isle/index/NGramGeneratingAnnotator.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/algorithms/isle/index/NGramGeneratingAnnotator.java 2013-09-04 09:45:38 UTC (rev 4051) +++ trunk/components-core/src/main/java/org/dllearner/algorithms/isle/index/NGramGeneratingAnnotator.java 2013-09-04 09:52:57 UTC (rev 4052) @@ -24,7 +24,6 @@ public Set<Annotation> annotate(Document document) { String text = document.getContent(); - Pattern legalChars = Pattern.compile("[A-Za-z]"); // clean up all texts Modified: trunk/components-core/src/main/java/org/dllearner/algorithms/isle/index/SimpleLinguisticAnnotator.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/algorithms/isle/index/SimpleLinguisticAnnotator.java 2013-09-04 09:45:38 UTC (rev 4051) +++ trunk/components-core/src/main/java/org/dllearner/algorithms/isle/index/SimpleLinguisticAnnotator.java 2013-09-04 09:52:57 UTC (rev 4052) @@ -22,6 +22,7 @@ public class SimpleLinguisticAnnotator implements LinguisticAnnotator { private StopWordFilter stopWordFilter = new StopWordFilter(); + NGramGeneratingAnnotator nGramAnnotator = new NGramGeneratingAnnotator(2); @Override public Set<Annotation> annotate(Document document) { @@ -41,6 +42,7 @@ if(start < s.length()-1){ annotations.add(new Annotation(document, start, s.length() - start)); } + annotations.addAll(nGramAnnotator.annotate(document)); stopWordFilter.removeStopWordAnnotations(annotations); return annotations; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <dfl...@us...> - 2013-09-04 09:45:43
|
Revision: 4051 http://sourceforge.net/p/dl-learner/code/4051 Author: dfleischhacker Date: 2013-09-04 09:45:38 +0000 (Wed, 04 Sep 2013) Log Message: ----------- Add n-gram generating annotator Added Paths: ----------- trunk/components-core/src/main/java/org/dllearner/algorithms/isle/index/NGramGeneratingAnnotator.java Added: trunk/components-core/src/main/java/org/dllearner/algorithms/isle/index/NGramGeneratingAnnotator.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/algorithms/isle/index/NGramGeneratingAnnotator.java (rev 0) +++ trunk/components-core/src/main/java/org/dllearner/algorithms/isle/index/NGramGeneratingAnnotator.java 2013-09-04 09:45:38 UTC (rev 4051) @@ -0,0 +1,78 @@ +package org.dllearner.algorithms.isle.index; + +import java.util.ArrayList; +import java.util.HashSet; +import java.util.Set; +import java.util.regex.Pattern; + +/** + * Generates word n-grams + * @author Daniel Fleischhacker + */ +public class NGramGeneratingAnnotator implements LinguisticAnnotator { + private int length; + + /** + * Initializes the annotator to generate word n-grams of the given length ({@code length} words per n-gram) + * @param length length of the single n-grams + */ + public NGramGeneratingAnnotator(int length) { + this.length = length; + } + + @Override + public Set<Annotation> annotate(Document document) { + String text = document.getContent(); + + + Pattern legalChars = Pattern.compile("[A-Za-z]"); + + // clean up all texts + int curWordStartPosition = 0; + StringBuilder curWord = new StringBuilder(); + ArrayList<String> wordsInText = new ArrayList<String>(); + ArrayList<Integer> wordStart = new ArrayList<Integer>(); + ArrayList<Integer> wordEnd = new ArrayList<Integer>(); + + int i = 0; + while (i < text.length()) { + Character curChar = text.charAt(i); + if (!legalChars.matcher(curChar.toString()).matches()) { + if (curWord.length() == 0) { + curWordStartPosition = i + 1; + i++; + continue; + } + // current word finished + wordsInText.add(curWord.toString()); + wordStart.add(curWordStartPosition); + wordEnd.add(i); + curWord = new StringBuilder(); + curWordStartPosition = i + 1; + } + else { + curWord.append(curChar); + } + i++; + } + + HashSet<Annotation> annotations = new HashSet<Annotation>(); + + i = 0; + while (i < wordsInText.size() - (length-1)) { + StringBuilder sb = new StringBuilder(); + int curStart = wordStart.get(i); + int lastEnd = wordEnd.get(i); + for (int j = 1; j < length; j++) { + sb.append(wordsInText.get(i + j)); + lastEnd = wordEnd.get(i + j); + } + String nGram = sb.toString().trim(); + System.out.println(nGram); + annotations.add(new Annotation(document, curStart, lastEnd - curStart)); + i++; + } + + return annotations; + } +} This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <lor...@us...> - 2013-09-04 09:41:46
|
Revision: 4050 http://sourceforge.net/p/dl-learner/code/4050 Author: lorenz_b Date: 2013-09-04 09:41:41 +0000 (Wed, 04 Sep 2013) Log Message: ----------- Added simple stop word filtering. Modified Paths: -------------- trunk/components-core/src/main/java/org/dllearner/algorithms/isle/index/SimpleLinguisticAnnotator.java Added Paths: ----------- trunk/components-core/src/main/java/org/dllearner/algorithms/isle/StopWordFilter.java Added: trunk/components-core/src/main/java/org/dllearner/algorithms/isle/StopWordFilter.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/algorithms/isle/StopWordFilter.java (rev 0) +++ trunk/components-core/src/main/java/org/dllearner/algorithms/isle/StopWordFilter.java 2013-09-04 09:41:41 UTC (rev 4050) @@ -0,0 +1,56 @@ +/** + * + */ +package org.dllearner.algorithms.isle; + +import java.io.File; +import java.io.IOException; +import java.util.HashSet; +import java.util.Iterator; +import java.util.Set; + +import org.dllearner.algorithms.isle.index.Annotation; + +import com.google.common.base.Charsets; +import com.google.common.io.Files; + +/** + * @author Lorenz Buehmann + * + */ +public class StopWordFilter { + + private Set<String> stopWords; + private static final String stopWordfile = "src/main/resources/stopwords.txt"; + + public StopWordFilter() { + try { + stopWords = new HashSet<String>(Files.readLines(new File(stopWordfile), Charsets.UTF_8)); + } catch (IOException e) { + e.printStackTrace(); + } + } + + public String removeStopWords(String input) { + for (String s : stopWords) { + input = input.replaceAll("\\b" + s + "\\b", ""); + } + return input; + } + + public void removeStopWords(Set<String> words) { + words.removeAll(stopWords); + } + + public void removeStopWordAnnotations(Set<Annotation> annotations) { + for (Iterator<Annotation> iter = annotations.iterator(); iter.hasNext();) { + Annotation annotation = iter.next(); + String content = annotation.getGetReferencedDocument().getContent(); + String token = content.substring(annotation.getOffset(), annotation.getOffset()+annotation.getLength()); + if(stopWords.contains(token)){ + iter.remove(); + } + } + } + +} Modified: trunk/components-core/src/main/java/org/dllearner/algorithms/isle/index/SimpleLinguisticAnnotator.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/algorithms/isle/index/SimpleLinguisticAnnotator.java 2013-09-04 09:41:35 UTC (rev 4049) +++ trunk/components-core/src/main/java/org/dllearner/algorithms/isle/index/SimpleLinguisticAnnotator.java 2013-09-04 09:41:41 UTC (rev 4050) @@ -1,22 +1,35 @@ package org.dllearner.algorithms.isle.index; +import java.io.IOException; +import java.io.StringReader; import java.util.HashSet; import java.util.Set; import java.util.regex.Matcher; import java.util.regex.Pattern; +import org.apache.lucene.analysis.TokenStream; +import org.apache.lucene.analysis.core.StopFilter; +import org.apache.lucene.analysis.en.PorterStemFilter; +import org.apache.lucene.analysis.standard.StandardTokenizer; +import org.apache.lucene.util.Version; +import org.dllearner.algorithms.isle.StopWordFilter; + /** * * @author Jens Lehmann * */ public class SimpleLinguisticAnnotator implements LinguisticAnnotator { + + private StopWordFilter stopWordFilter = new StopWordFilter(); @Override public Set<Annotation> annotate(Document document) { String s = document.getRawContent().trim(); + System.out.println("Document:" + s); +// s = stopWordFilter.removeStopWords(s); Set<Annotation> annotations = new HashSet<Annotation>(); - Pattern pattern = Pattern.compile("\\u0020+"); + Pattern pattern = Pattern.compile("(\\u0020)+"); Matcher matcher = pattern.matcher(s); // Check all occurrences int start = 0; @@ -28,7 +41,20 @@ if(start < s.length()-1){ annotations.add(new Annotation(document, start, s.length() - start)); } + stopWordFilter.removeStopWordAnnotations(annotations); return annotations; } + + public static void main(String[] args) throws Exception { + String s = "male person least 1 child"; + Pattern pattern = Pattern.compile("(\\u0020)+"); + Matcher matcher = pattern.matcher(s); + int start = 0; + while (matcher.find()) { + int end = matcher.start(); + System.out.println(s.substring(start, end)); + start = matcher.end(); + } + } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <and...@us...> - 2013-09-04 09:41:39
|
Revision: 4049 http://sourceforge.net/p/dl-learner/code/4049 Author: andremelo Date: 2013-09-04 09:41:35 +0000 (Wed, 04 Sep 2013) Log Message: ----------- Correcting normalization expression Modified Paths: -------------- trunk/components-core/src/main/java/org/dllearner/algorithms/isle/metrics/PMIRelevanceMetric.java Modified: trunk/components-core/src/main/java/org/dllearner/algorithms/isle/metrics/PMIRelevanceMetric.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/algorithms/isle/metrics/PMIRelevanceMetric.java 2013-09-04 09:38:06 UTC (rev 4048) +++ trunk/components-core/src/main/java/org/dllearner/algorithms/isle/metrics/PMIRelevanceMetric.java 2013-09-04 09:41:35 UTC (rev 4049) @@ -46,7 +46,8 @@ double dPClassEntity = documentsB.size() == 0 ? 0 : (double) documentsAB.size() / (double) documentsB.size(); double pmi = Math.log(dPClassEntity / dPClass); - double normalizedPMI = (pmi/-Math.log(dPClassEntity) + 1)/2; + double pAB = (double) documentsAB.size() / (double) nrOfDocuments; + double normalizedPMI = (pmi/-Math.log(pAB) + 1)/2; return normalizedPMI; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <and...@us...> - 2013-09-04 09:38:10
|
Revision: 4048 http://sourceforge.net/p/dl-learner/code/4048 Author: andremelo Date: 2013-09-04 09:38:06 +0000 (Wed, 04 Sep 2013) Log Message: ----------- Adding getNormalizedRelvance, which returns a value in [0,1] Modified Paths: -------------- trunk/components-core/src/main/java/org/dllearner/algorithms/isle/metrics/PMIRelevanceMetric.java trunk/components-core/src/main/java/org/dllearner/algorithms/isle/metrics/RelevanceMetric.java Modified: trunk/components-core/src/main/java/org/dllearner/algorithms/isle/metrics/PMIRelevanceMetric.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/algorithms/isle/metrics/PMIRelevanceMetric.java 2013-09-04 09:18:50 UTC (rev 4047) +++ trunk/components-core/src/main/java/org/dllearner/algorithms/isle/metrics/PMIRelevanceMetric.java 2013-09-04 09:38:06 UTC (rev 4048) @@ -30,9 +30,25 @@ double dPClass = nrOfDocuments == 0 ? 0 : ((double) documentsA.size() / (double) nrOfDocuments); double dPClassEntity = documentsB.size() == 0 ? 0 : (double) documentsAB.size() / (double) documentsB.size(); - double pmi = Math.log(dPClassEntity / dPClass); + double pmi = Math.log(dPClassEntity / dPClass); return pmi; } + + @Override + public double getNormalizedRelevance(Entity entityA, Entity entityB){ + Set<AnnotatedDocument> documentsA = index.getDocuments(entityA); + Set<AnnotatedDocument> documentsB = index.getDocuments(entityB); + Set<AnnotatedDocument> documentsAB = Sets.intersection(documentsA, documentsB); + int nrOfDocuments = index.getSize(); + + double dPClass = nrOfDocuments == 0 ? 0 : ((double) documentsA.size() / (double) nrOfDocuments); + double dPClassEntity = documentsB.size() == 0 ? 0 : (double) documentsAB.size() / (double) documentsB.size(); + double pmi = Math.log(dPClassEntity / dPClass); + + double normalizedPMI = (pmi/-Math.log(dPClassEntity) + 1)/2; + + return normalizedPMI; + } } Modified: trunk/components-core/src/main/java/org/dllearner/algorithms/isle/metrics/RelevanceMetric.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/algorithms/isle/metrics/RelevanceMetric.java 2013-09-04 09:18:50 UTC (rev 4047) +++ trunk/components-core/src/main/java/org/dllearner/algorithms/isle/metrics/RelevanceMetric.java 2013-09-04 09:38:06 UTC (rev 4048) @@ -30,4 +30,12 @@ * @return */ double getRelevance(Entity entity1, Entity entity2); + + /** + * Get normalized relevance value in [0,1] * + * @param entity1 + * @param entity2 + * @return + */ + double getNormalizedRelevance(Entity entity1, Entity entity2); } \ No newline at end of file This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jen...@us...> - 2013-09-04 09:18:54
|
Revision: 4047 http://sourceforge.net/p/dl-learner/code/4047 Author: jenslehmann Date: 2013-09-04 09:18:50 +0000 (Wed, 04 Sep 2013) Log Message: ----------- started unit test for comparing ISLE and CELOE Modified Paths: -------------- trunk/components-core/src/test/java/org/dllearner/algorithms/isle/ISLETest.java Property Changed: ---------------- trunk/test/isle/father/ Modified: trunk/components-core/src/test/java/org/dllearner/algorithms/isle/ISLETest.java =================================================================== --- trunk/components-core/src/test/java/org/dllearner/algorithms/isle/ISLETest.java 2013-09-04 08:25:56 UTC (rev 4046) +++ trunk/components-core/src/test/java/org/dllearner/algorithms/isle/ISLETest.java 2013-09-04 09:18:50 UTC (rev 4047) @@ -9,6 +9,7 @@ import java.util.Map; import java.util.Set; +import org.dllearner.algorithms.celoe.CELOE; import org.dllearner.algorithms.isle.index.AnnotatedDocument; import org.dllearner.algorithms.isle.index.TextDocument; import org.dllearner.algorithms.isle.index.semantic.SemanticIndex; @@ -56,12 +57,16 @@ private SemanticIndex semanticIndex; private SyntacticIndex syntacticIndex; + // we assume that the ontology is named "ontology.owl" and that all text files + // are in a subdirectory called "corpus" + private String testFolder = "../test/isle/father/"; + /** * */ public ISLETest() throws Exception{ manager = OWLManager.createOWLOntologyManager(); - ontology = manager.loadOntologyFromOntologyDocument(new File("../examples/isle/father_labeled.owl")); + ontology = manager.loadOntologyFromOntologyDocument(new File(testFolder + "father_labeled.owl")); cls = new NamedClass("http://example.com/father#father"); textRetriever = new RDFSLabelEntityTextRetriever(ontology); syntacticIndex = new OWLOntologyLuceneSyntacticIndexCreator(ontology, df.getRDFSLabel(), searchField).buildIndex(); @@ -71,7 +76,7 @@ private Set<TextDocument> createDocuments(){ Set<TextDocument> documents = new HashSet<TextDocument>(); - File folder = new File("../test/isle/father/corpus"); + File folder = new File(testFolder+"corpus/"); for (File file : folder.listFiles()) { try { String text = Files.toString(file, Charsets.UTF_8); @@ -148,4 +153,42 @@ isle.start(); } + @Test + public void compareISLE() throws Exception { + KnowledgeSource ks = new OWLAPIOntology(ontology); + AbstractReasonerComponent reasoner = new FastInstanceChecker(ks); + reasoner.init(); + + ClassLearningProblem lp = new ClassLearningProblem(reasoner); + lp.setClassToDescribe(cls); + lp.init(); + + semanticIndex = new SimpleSemanticIndex(ontology, syntacticIndex); + semanticIndex.buildIndex(createDocuments()); + + relevance = new PMIRelevanceMetric(semanticIndex); + + Map<Entity, Double> entityRelevance = RelevanceUtils.getRelevantEntities(cls, ontology, relevance); + NLPHeuristic heuristic = new NLPHeuristic(entityRelevance); + + // run ISLE + ISLE isle = new ISLE(lp, reasoner); + isle.setHeuristic(heuristic); + isle.setSearchTreeFile(testFolder + "searchTreeISLE.txt"); + isle.setWriteSearchTree(true); + isle.setReplaceSearchTree(true); + isle.setTerminateOnNoiseReached(true); + isle.init(); + isle.start(); + + // run standard CELOE as reference + CELOE celoe = new CELOE(lp, reasoner); + celoe.setSearchTreeFile(testFolder + "searchTreeCELOE.txt"); + celoe.setWriteSearchTree(true); + celoe.setTerminateOnNoiseReached(true); + celoe.setReplaceSearchTree(true); + celoe.init(); + celoe.start(); + } + } Index: trunk/test/isle/father =================================================================== --- trunk/test/isle/father 2013-09-04 08:25:56 UTC (rev 4046) +++ trunk/test/isle/father 2013-09-04 09:18:50 UTC (rev 4047) Property changes on: trunk/test/isle/father ___________________________________________________________________ Added: svn:ignore ## -0,0 +1 ## +searchTree*.txt This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <lor...@us...> - 2013-09-04 08:25:58
|
Revision: 4046 http://sourceforge.net/p/dl-learner/code/4046 Author: lorenz_b Date: 2013-09-04 08:25:56 +0000 (Wed, 04 Sep 2013) Log Message: ----------- Added test. Modified Paths: -------------- trunk/components-core/src/test/java/org/dllearner/algorithms/isle/ISLETest.java Modified: trunk/components-core/src/test/java/org/dllearner/algorithms/isle/ISLETest.java =================================================================== --- trunk/components-core/src/test/java/org/dllearner/algorithms/isle/ISLETest.java 2013-09-04 08:10:22 UTC (rev 4045) +++ trunk/components-core/src/test/java/org/dllearner/algorithms/isle/ISLETest.java 2013-09-04 08:25:56 UTC (rev 4046) @@ -3,7 +3,14 @@ */ package org.dllearner.algorithms.isle; -import com.google.common.base.Joiner; +import java.io.File; +import java.io.IOException; +import java.util.HashSet; +import java.util.Map; +import java.util.Set; + +import org.dllearner.algorithms.isle.index.AnnotatedDocument; +import org.dllearner.algorithms.isle.index.TextDocument; import org.dllearner.algorithms.isle.index.semantic.SemanticIndex; import org.dllearner.algorithms.isle.index.semantic.simple.SimpleSemanticIndex; import org.dllearner.algorithms.isle.index.syntactic.OWLOntologyLuceneSyntacticIndexCreator; @@ -26,10 +33,12 @@ import org.semanticweb.owlapi.model.OWLDataFactory; import org.semanticweb.owlapi.model.OWLOntology; import org.semanticweb.owlapi.model.OWLOntologyManager; + import uk.ac.manchester.cs.owl.owlapi.OWLDataFactoryImpl; -import java.io.File; -import java.util.Map; +import com.google.common.base.Charsets; +import com.google.common.base.Joiner; +import com.google.common.io.Files; /** * @author Lorenz Buehmann @@ -44,6 +53,8 @@ private EntityTextRetriever textRetriever; private RelevanceMetric relevance; private String searchField = "label"; + private SemanticIndex semanticIndex; + private SyntacticIndex syntacticIndex; /** * @@ -53,10 +64,26 @@ ontology = manager.loadOntologyFromOntologyDocument(new File("../examples/isle/father_labeled.owl")); cls = new NamedClass("http://example.com/father#father"); textRetriever = new RDFSLabelEntityTextRetriever(ontology); - SyntacticIndex syntacticIndex = new OWLOntologyLuceneSyntacticIndexCreator(ontology, df.getRDFSLabel(), searchField).buildIndex(); - SemanticIndex semanticIndex = new SimpleSemanticIndex(ontology, syntacticIndex); - relevance = new PMIRelevanceMetric(semanticIndex); + syntacticIndex = new OWLOntologyLuceneSyntacticIndexCreator(ontology, df.getRDFSLabel(), searchField).buildIndex(); + + } + + private Set<TextDocument> createDocuments(){ + Set<TextDocument> documents = new HashSet<TextDocument>(); + File folder = new File("../test/isle/father/corpus"); + for (File file : folder.listFiles()) { + try { + String text = Files.toString(file, Charsets.UTF_8); + documents.add(new TextDocument(text)); + } catch (IOException e) { + e.printStackTrace(); + } + } + return documents; + } + + /** * @throws java.lang.Exception @@ -66,14 +93,14 @@ } - @Test +// @Test public void testTextRetrieval() { System.out.println("Text for entity " + cls + ":"); Map<String, Double> relevantText = textRetriever.getRelevantText(cls); System.out.println(Joiner.on("\n").join(relevantText.entrySet())); } - @Test +// @Test public void testEntityRelevance() throws Exception { System.out.println("Relevant entities for entity " + cls + ":"); Map<Entity, Double> entityRelevance = RelevanceUtils.getRelevantEntities(cls, ontology, relevance); @@ -81,6 +108,22 @@ } @Test + public void testSemanticIndexAnnotationProperty(){ + semanticIndex = new SimpleSemanticIndex(ontology, syntacticIndex); + semanticIndex.buildIndex(df.getRDFSLabel(), null); + Set<AnnotatedDocument> documents = semanticIndex.getDocuments(new NamedClass("http://example.com/father#father")); + System.out.println(documents); + } + + @Test + public void testSemanticIndexCorpus(){ + semanticIndex = new SimpleSemanticIndex(ontology, syntacticIndex); + semanticIndex.buildIndex(createDocuments()); + Set<AnnotatedDocument> documents = semanticIndex.getDocuments(new NamedClass("http://example.com/father#father")); + System.out.println(documents); + } + + @Test public void testISLE() throws Exception { KnowledgeSource ks = new OWLAPIOntology(ontology); AbstractReasonerComponent reasoner = new FastInstanceChecker(ks); @@ -90,6 +133,11 @@ lp.setClassToDescribe(cls); lp.init(); + semanticIndex = new SimpleSemanticIndex(ontology, syntacticIndex); + semanticIndex.buildIndex(createDocuments()); + + relevance = new PMIRelevanceMetric(semanticIndex); + Map<Entity, Double> entityRelevance = RelevanceUtils.getRelevantEntities(cls, ontology, relevance); NLPHeuristic heuristic = new NLPHeuristic(entityRelevance); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <lor...@us...> - 2013-09-04 08:10:27
|
Revision: 4045 http://sourceforge.net/p/dl-learner/code/4045 Author: lorenz_b Date: 2013-09-04 08:10:22 +0000 (Wed, 04 Sep 2013) Log Message: ----------- Fixed bug in linguistic annotator. Modified Paths: -------------- trunk/components-core/src/main/java/org/dllearner/algorithms/isle/index/AnnotatedTextDocument.java trunk/components-core/src/main/java/org/dllearner/algorithms/isle/index/TextDocument.java trunk/components-core/src/main/java/org/dllearner/algorithms/isle/index/semantic/SemanticIndex.java Modified: trunk/components-core/src/main/java/org/dllearner/algorithms/isle/index/AnnotatedTextDocument.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/algorithms/isle/index/AnnotatedTextDocument.java 2013-09-04 08:10:08 UTC (rev 4044) +++ trunk/components-core/src/main/java/org/dllearner/algorithms/isle/index/AnnotatedTextDocument.java 2013-09-04 08:10:22 UTC (rev 4045) @@ -93,7 +93,7 @@ */ @Override public String toString() { - return "Document:\n" + document.getContent() + "\nAnnotations:" + annotations; + return "Document:" + document.getContent() + "\nAnnotations:" + annotations; } } Modified: trunk/components-core/src/main/java/org/dllearner/algorithms/isle/index/TextDocument.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/algorithms/isle/index/TextDocument.java 2013-09-04 08:10:08 UTC (rev 4044) +++ trunk/components-core/src/main/java/org/dllearner/algorithms/isle/index/TextDocument.java 2013-09-04 08:10:22 UTC (rev 4045) @@ -55,4 +55,12 @@ public int hashCode() { return content.hashCode(); } + + /* (non-Javadoc) + * @see java.lang.Object#toString() + */ + @Override + public String toString() { + return content; + } } Modified: trunk/components-core/src/main/java/org/dllearner/algorithms/isle/index/semantic/SemanticIndex.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/algorithms/isle/index/semantic/SemanticIndex.java 2013-09-04 08:10:08 UTC (rev 4044) +++ trunk/components-core/src/main/java/org/dllearner/algorithms/isle/index/semantic/SemanticIndex.java 2013-09-04 08:10:22 UTC (rev 4045) @@ -5,7 +5,7 @@ import java.util.Map; import java.util.Set; -import org.apache.lucene.document.Field; +import org.apache.log4j.Logger; import org.dllearner.algorithms.isle.EntityCandidateGenerator; import org.dllearner.algorithms.isle.WordSenseDisambiguation; import org.dllearner.algorithms.isle.index.AnnotatedDocument; @@ -29,6 +29,9 @@ */ public abstract class SemanticIndex { + + private static final Logger logger = Logger.getLogger(SemanticIndex.class.getName()); + private SemanticAnnotator semanticAnnotator; private SyntacticIndex syntacticIndex; private Map<Entity, Set<AnnotatedDocument>> index; @@ -49,8 +52,10 @@ * Precompute the whole index, i.e. iterate over all entities and compute all annotated documents. */ public void buildIndex(Set<TextDocument> documents){ + logger.info("Creating semantic index..."); index = new HashMap<Entity, Set<AnnotatedDocument>>(); for (TextDocument document : documents) { + logger.debug("Processing document:\n" + document); AnnotatedDocument annotatedDocument = semanticAnnotator.processDocument(document); for (Entity entity : annotatedDocument.getContainedEntities()) { Set<AnnotatedDocument> existingAnnotatedDocuments = index.get(entity); @@ -60,7 +65,8 @@ } existingAnnotatedDocuments.add(annotatedDocument); } - } + } + logger.info("...done."); } public void buildIndex(OWLAnnotationProperty annotationProperty, String language){ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jen...@us...> - 2013-09-04 08:10:12
|
Revision: 4044 http://sourceforge.net/p/dl-learner/code/4044 Author: jenslehmann Date: 2013-09-04 08:10:08 +0000 (Wed, 04 Sep 2013) Log Message: ----------- ISLE father example Added Paths: ----------- trunk/test/isle/ trunk/test/isle/father/ trunk/test/isle/father/corpus/ trunk/test/isle/father/corpus/child.txt trunk/test/isle/father/corpus/father.txt trunk/test/isle/father/corpus/female.txt trunk/test/isle/father/corpus/male.txt trunk/test/isle/father/corpus/man.txt trunk/test/isle/father/corpus/mother.txt trunk/test/isle/father/corpus/person.txt trunk/test/isle/father/father_labeled.owl Removed Paths: ------------- trunk/examples/isle/catalog-v001.xml Deleted: trunk/examples/isle/catalog-v001.xml =================================================================== --- trunk/examples/isle/catalog-v001.xml 2013-09-04 08:04:33 UTC (rev 4043) +++ trunk/examples/isle/catalog-v001.xml 2013-09-04 08:10:08 UTC (rev 4044) @@ -1,6 +0,0 @@ -<?xml version="1.0" encoding="UTF-8" standalone="no"?> -<catalog prefer="public" xmlns="urn:oasis:names:tc:entity:xmlns:xml:catalog"> - <group id="Folder Repository, directory=, recursive=true, Auto-Update=true, version=2" prefer="public" xml:base=""> - <uri id="Automatically generated entry, Timestamp=1373287083350" name="http://example.com/father" uri="father_labeled.owl"/> - </group> -</catalog> Added: trunk/test/isle/father/corpus/child.txt =================================================================== --- trunk/test/isle/father/corpus/child.txt (rev 0) +++ trunk/test/isle/father/corpus/child.txt 2013-09-04 08:10:08 UTC (rev 4044) @@ -0,0 +1 @@ +Biologically, a child is generally a human between the stages of birth and puberty. Some vernacular definitions of a child include the fetus, as being an unborn child. The legal definition of "child" generally refers to a minor, otherwise known as a person younger than the age of majority. "Child" may also describe a relationship with a parent (such as sons and daughters of any age) or, metaphorically, an authority figure, or signify group membership in a clan, tribe, or religion; it can also signify being strongly affected by a specific time, place, or circumstance, as in "a child of nature" or "a child of the Sixties". Added: trunk/test/isle/father/corpus/father.txt =================================================================== --- trunk/test/isle/father/corpus/father.txt (rev 0) +++ trunk/test/isle/father/corpus/father.txt 2013-09-04 08:10:08 UTC (rev 4044) @@ -0,0 +1 @@ +A father (or dad) is defined as a male parent or Individual progenitor of human offspring. The adjective "paternal" refers to a father and comparatively to "maternal" for a mother. The verb "to father" means to procreate or to sire a child from which also derives the gerund "fathering". Fathers determine the gender of their child through a sperm cell which either contains an X chromosome (female), or Y chromosome (male). Added: trunk/test/isle/father/corpus/female.txt =================================================================== --- trunk/test/isle/father/corpus/female.txt (rev 0) +++ trunk/test/isle/father/corpus/female.txt 2013-09-04 08:10:08 UTC (rev 4044) @@ -0,0 +1 @@ +Female (♀) is the sex of an organism, or a part of an organism, which produces non-mobile ova (egg cells). Added: trunk/test/isle/father/corpus/male.txt =================================================================== --- trunk/test/isle/father/corpus/male.txt (rev 0) +++ trunk/test/isle/father/corpus/male.txt 2013-09-04 08:10:08 UTC (rev 4044) @@ -0,0 +1 @@ +Male (♂) refers to organisms with the physiological sex which produces sperm. Each spermatozoon can fuse with a larger female gamete or ovum, in the process of fertilization. A male cannot reproduce sexually without access to at least one ovum from a female, but some organisms can reproduce both sexually and asexually. Not all species share a common sex-determination system. In most animals including humans, sex is determined genetically, but in some species it can be determined due to social, environmental or other factors. The existence of two sexes seems to have been selected independently across different evolutionary lineages. The repeated pattern is sexual reproduction in isogamous species with two or more mating types with gametes of identical form and behavior (but different at the molecular level) to anisogamous species with gametes of male and female types to oogamous species in which the female gamete is very much larger than the male and has no ability to move. There is a good argument that this pattern was driven by the physical constraints on the mechanisms by which two gametes get together as required for sexual reproduction. Accordingly, sex is defined operationally across species by the type of gametes produced and differences between males and females in one lineage are not always predictive of differences in another. Male/female dimorphism between organisms or reproductive organs of different sexes is not limited to animals; male gametes are produced by chytrids, diatoms and land plants, among others. In land plants, female and male designate not only the female and male gamete-producing organisms and structures but also the structures of the sporophytes that give rise to male and female plants. Added: trunk/test/isle/father/corpus/man.txt =================================================================== --- trunk/test/isle/father/corpus/man.txt (rev 0) +++ trunk/test/isle/father/corpus/man.txt 2013-09-04 08:10:08 UTC (rev 4044) @@ -0,0 +1 @@ +In English, lower case man (pl. men) refers to an adult human male (the term boy is the usual term for a human male child or adolescent). Sometimes it is also used as an adjective to identify a set of male humans, regardless of age, as in phrases such as "men's rights". Although men typically have a male reproductive system, some intersex people with ambiguous genitals, and biologically female transgender people, may also be classified or self-identify as a "man". The term manhood is used to refer to masculinity, the various qualities and characteristics attributed to men such as strength and male sexuality. Added: trunk/test/isle/father/corpus/mother.txt =================================================================== --- trunk/test/isle/father/corpus/mother.txt (rev 0) +++ trunk/test/isle/father/corpus/mother.txt 2013-09-04 08:10:08 UTC (rev 4044) @@ -0,0 +1 @@ +A mother (or mum/mom) is a woman who has raised a child, given birth to a child, and/or supplied the ovum that united with a sperm which grew into a child. Because of the complexity and differences of a mother's social, cultural, and religious definitions and roles, it is challenging to specify a universally acceptable definition for the term. The male equivalent is a father. Added: trunk/test/isle/father/corpus/person.txt =================================================================== --- trunk/test/isle/father/corpus/person.txt (rev 0) +++ trunk/test/isle/father/corpus/person.txt 2013-09-04 08:10:08 UTC (rev 4044) @@ -0,0 +1 @@ +A person is a being, such as a human, that has certain capacities or attributes constituting personhood, the precise definition of which is the subject of much controversy. The common plural of "person", "people", is often used to refer to an entire nation or ethnic group (as in "a people"), so the plural "persons" is often used in contexts which require precision such as philosophical and legal writing. Added: trunk/test/isle/father/father_labeled.owl =================================================================== --- trunk/test/isle/father/father_labeled.owl (rev 0) +++ trunk/test/isle/father/father_labeled.owl 2013-09-04 08:10:08 UTC (rev 4044) @@ -0,0 +1,169 @@ +<?xml version="1.0"?> + + +<!DOCTYPE rdf:RDF [ + <!ENTITY father "http://example.com/father#" > + <!ENTITY owl "http://www.w3.org/2002/07/owl#" > + <!ENTITY xsd "http://www.w3.org/2001/XMLSchema#" > + <!ENTITY owl2xml "http://www.w3.org/2006/12/owl2-xml#" > + <!ENTITY rdfs "http://www.w3.org/2000/01/rdf-schema#" > + <!ENTITY rdf "http://www.w3.org/1999/02/22-rdf-syntax-ns#" > +]> + + +<rdf:RDF xmlns="http://example.com/father#" + xml:base="http://example.com/father" + xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#" + xmlns:owl2xml="http://www.w3.org/2006/12/owl2-xml#" + xmlns:owl="http://www.w3.org/2002/07/owl#" + xmlns:xsd="http://www.w3.org/2001/XMLSchema#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:father="http://example.com/father#"> + <owl:Ontology rdf:about="http://example.com/father"/> + + + + <!-- + /////////////////////////////////////////////////////////////////////////////////////// + // + // Object Properties + // + /////////////////////////////////////////////////////////////////////////////////////// + --> + + + + + <!-- http://example.com/father#hasChild --> + + <owl:ObjectProperty rdf:about="&father;hasChild"> + <rdfs:label xml:lang="en">has child</rdfs:label> + <rdfs:domain rdf:resource="&father;person"/> + <rdfs:range rdf:resource="&father;person"/> + </owl:ObjectProperty> + + + + <!-- + /////////////////////////////////////////////////////////////////////////////////////// + // + // Classes + // + /////////////////////////////////////////////////////////////////////////////////////// + --> + + + + + <!-- http://example.com/father#father --> + + <owl:Class rdf:about="&father;father"> + <rdfs:label xml:lang="en">person which has at least 1 child</rdfs:label> + <rdfs:subClassOf rdf:resource="&father;male"/> + </owl:Class> + + + + <!-- http://example.com/father#female --> + + <owl:Class rdf:about="&father;female"> + <rdfs:label xml:lang="en">female</rdfs:label> + <rdfs:subClassOf rdf:resource="&father;person"/> + <owl:disjointWith rdf:resource="&father;male"/> + </owl:Class> + + + + <!-- http://example.com/father#male --> + + <owl:Class rdf:about="&father;male"> + <rdfs:label xml:lang="en">male</rdfs:label> + <rdfs:subClassOf rdf:resource="&father;person"/> + </owl:Class> + + + + <!-- http://example.com/father#person --> + + <owl:Class rdf:about="&father;person"> + <rdfs:label xml:lang="en">Person</rdfs:label> + <rdfs:subClassOf rdf:resource="&owl;Thing"/> + </owl:Class> + + + + <!-- http://www.w3.org/2002/07/owl#Thing --> + + <owl:Class rdf:about="&owl;Thing"/> + + + + <!-- + /////////////////////////////////////////////////////////////////////////////////////// + // + // Individuals + // + /////////////////////////////////////////////////////////////////////////////////////// + --> + + + + + <!-- http://example.com/father#anna --> + + <owl:NamedIndividual rdf:about="&father;anna"> + <rdf:type rdf:resource="&father;female"/> + <hasChild rdf:resource="&father;heinz"/> + </owl:NamedIndividual> + + + + <!-- http://example.com/father#heinz --> + + <owl:NamedIndividual rdf:about="&father;heinz"> + <rdf:type rdf:resource="&father;male"/> + </owl:NamedIndividual> + + + + <!-- http://example.com/father#markus --> + + <owl:NamedIndividual rdf:about="&father;markus"> + <rdf:type rdf:resource="&father;father"/> + <rdf:type rdf:resource="&father;male"/> + <hasChild rdf:resource="&father;anna"/> + </owl:NamedIndividual> + + + + <!-- http://example.com/father#martin --> + + <owl:NamedIndividual rdf:about="&father;martin"> + <rdf:type rdf:resource="&father;father"/> + <rdf:type rdf:resource="&father;male"/> + <hasChild rdf:resource="&father;heinz"/> + </owl:NamedIndividual> + + + + <!-- http://example.com/father#michelle --> + + <owl:NamedIndividual rdf:about="&father;michelle"> + <rdf:type rdf:resource="&father;female"/> + </owl:NamedIndividual> + + + + <!-- http://example.com/father#stefan --> + + <owl:NamedIndividual rdf:about="&father;stefan"> + <rdf:type rdf:resource="&father;father"/> + <rdf:type rdf:resource="&father;male"/> + <hasChild rdf:resource="&father;markus"/> + </owl:NamedIndividual> +</rdf:RDF> + + + +<!-- Generated by the OWL API (version 3.4.2) http://owlapi.sourceforge.net --> + This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <lor...@us...> - 2013-09-04 08:04:37
|
Revision: 4043 http://sourceforge.net/p/dl-learner/code/4043 Author: lorenz_b Date: 2013-09-04 08:04:33 +0000 (Wed, 04 Sep 2013) Log Message: ----------- Fixed bug in linguistic annotator. Modified Paths: -------------- trunk/components-core/src/main/java/org/dllearner/algorithms/isle/index/AnnotatedTextDocument.java trunk/components-core/src/main/java/org/dllearner/algorithms/isle/index/Annotation.java trunk/components-core/src/main/java/org/dllearner/algorithms/isle/index/SemanticAnnotation.java trunk/components-core/src/main/java/org/dllearner/algorithms/isle/index/SimpleLinguisticAnnotator.java trunk/components-core/src/main/java/org/dllearner/algorithms/isle/index/semantic/SemanticIndex.java Modified: trunk/components-core/src/main/java/org/dllearner/algorithms/isle/index/AnnotatedTextDocument.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/algorithms/isle/index/AnnotatedTextDocument.java 2013-09-03 16:53:18 UTC (rev 4042) +++ trunk/components-core/src/main/java/org/dllearner/algorithms/isle/index/AnnotatedTextDocument.java 2013-09-04 08:04:33 UTC (rev 4043) @@ -87,5 +87,13 @@ } return cnt; } + + /* (non-Javadoc) + * @see java.lang.Object#toString() + */ + @Override + public String toString() { + return "Document:\n" + document.getContent() + "\nAnnotations:" + annotations; + } } Modified: trunk/components-core/src/main/java/org/dllearner/algorithms/isle/index/Annotation.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/algorithms/isle/index/Annotation.java 2013-09-03 16:53:18 UTC (rev 4042) +++ trunk/components-core/src/main/java/org/dllearner/algorithms/isle/index/Annotation.java 2013-09-04 08:04:33 UTC (rev 4043) @@ -63,6 +63,11 @@ return true; } - - + /* (non-Javadoc) + * @see java.lang.Object#toString() + */ + @Override + public String toString() { + return "\"" + getReferencedDocument.getContent().substring(offset, offset+length) + "\" at position " + offset; + } } Modified: trunk/components-core/src/main/java/org/dllearner/algorithms/isle/index/SemanticAnnotation.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/algorithms/isle/index/SemanticAnnotation.java 2013-09-03 16:53:18 UTC (rev 4042) +++ trunk/components-core/src/main/java/org/dllearner/algorithms/isle/index/SemanticAnnotation.java 2013-09-04 08:04:33 UTC (rev 4043) @@ -52,7 +52,13 @@ return true; } - + /* (non-Javadoc) + * @see org.dllearner.algorithms.isle.index.Annotation#toString() + */ + @Override + public String toString() { + return super.toString() + "->" + entity; + } } Modified: trunk/components-core/src/main/java/org/dllearner/algorithms/isle/index/SimpleLinguisticAnnotator.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/algorithms/isle/index/SimpleLinguisticAnnotator.java 2013-09-03 16:53:18 UTC (rev 4042) +++ trunk/components-core/src/main/java/org/dllearner/algorithms/isle/index/SimpleLinguisticAnnotator.java 2013-09-04 08:04:33 UTC (rev 4043) @@ -14,15 +14,20 @@ @Override public Set<Annotation> annotate(Document document) { - String s = document.getRawContent(); + String s = document.getRawContent().trim(); Set<Annotation> annotations = new HashSet<Annotation>(); - Pattern pattern = Pattern.compile(" "); + Pattern pattern = Pattern.compile("\\u0020+"); Matcher matcher = pattern.matcher(s); // Check all occurrences + int start = 0; while (matcher.find()) { - annotations.add(new Annotation(document, matcher.start(), - matcher.end() - matcher.start())); + int end = matcher.start(); + annotations.add(new Annotation(document, start, end - start)); + start = matcher.end(); } + if(start < s.length()-1){ + annotations.add(new Annotation(document, start, s.length() - start)); + } return annotations; } Modified: trunk/components-core/src/main/java/org/dllearner/algorithms/isle/index/semantic/SemanticIndex.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/algorithms/isle/index/semantic/SemanticIndex.java 2013-09-03 16:53:18 UTC (rev 4042) +++ trunk/components-core/src/main/java/org/dllearner/algorithms/isle/index/semantic/SemanticIndex.java 2013-09-04 08:04:33 UTC (rev 4043) @@ -1,9 +1,11 @@ package org.dllearner.algorithms.isle.index.semantic; +import java.util.HashMap; import java.util.HashSet; import java.util.Map; import java.util.Set; +import org.apache.lucene.document.Field; import org.dllearner.algorithms.isle.EntityCandidateGenerator; import org.dllearner.algorithms.isle.WordSenseDisambiguation; import org.dllearner.algorithms.isle.index.AnnotatedDocument; @@ -12,6 +14,10 @@ import org.dllearner.algorithms.isle.index.TextDocument; import org.dllearner.algorithms.isle.index.syntactic.SyntacticIndex; import org.dllearner.core.owl.Entity; +import org.semanticweb.owlapi.model.OWLAnnotation; +import org.semanticweb.owlapi.model.OWLAnnotationProperty; +import org.semanticweb.owlapi.model.OWLEntity; +import org.semanticweb.owlapi.model.OWLLiteral; import org.semanticweb.owlapi.model.OWLOntology; /** @@ -43,6 +49,7 @@ * Precompute the whole index, i.e. iterate over all entities and compute all annotated documents. */ public void buildIndex(Set<TextDocument> documents){ + index = new HashMap<Entity, Set<AnnotatedDocument>>(); for (TextDocument document : documents) { AnnotatedDocument annotatedDocument = semanticAnnotator.processDocument(document); for (Entity entity : annotatedDocument.getContainedEntities()) { @@ -56,6 +63,35 @@ } } + public void buildIndex(OWLAnnotationProperty annotationProperty, String language){ + Set<OWLEntity> schemaEntities = new HashSet<OWLEntity>(); + schemaEntities.addAll(ontology.getClassesInSignature()); + schemaEntities.addAll(ontology.getObjectPropertiesInSignature()); + schemaEntities.addAll(ontology.getDataPropertiesInSignature()); + Set<TextDocument> documents = new HashSet<TextDocument>(); + for (OWLEntity entity : schemaEntities) { + String label = null; + Set<OWLAnnotation> annotations = entity.getAnnotations(ontology, annotationProperty); + for (OWLAnnotation annotation : annotations) { + if (annotation.getValue() instanceof OWLLiteral) { + OWLLiteral val = (OWLLiteral) annotation.getValue(); + if (language != null) { + if(val.hasLang(language)){ + label = val.getLiteral(); + } + + } else { + label = val.getLiteral(); + } + } + } + if(label != null){ + documents.add(new TextDocument(label)); + } + } + buildIndex(documents); + } + /** * Returns the set of annotated documents which reference the given entity using one of its surface forms. * @@ -63,6 +99,11 @@ * @return documents referencing given entity */ public Set<AnnotatedDocument> getDocuments(Entity entity){ + if(index == null){ + System.err.println("You have to prebuild the index before you can use this method."); + System.exit(1); + } + Set<AnnotatedDocument> annotatedDocuments = index.get(entity); return annotatedDocuments; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <dfl...@us...> - 2013-09-03 16:53:21
|
Revision: 4042 http://sourceforge.net/p/dl-learner/code/4042 Author: dfleischhacker Date: 2013-09-03 16:53:18 +0000 (Tue, 03 Sep 2013) Log Message: ----------- Fix typos Modified Paths: -------------- trunk/components-core/src/main/java/org/dllearner/algorithms/isle/WordSenseDisambiguation.java Modified: trunk/components-core/src/main/java/org/dllearner/algorithms/isle/WordSenseDisambiguation.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/algorithms/isle/WordSenseDisambiguation.java 2013-09-03 16:48:52 UTC (rev 4041) +++ trunk/components-core/src/main/java/org/dllearner/algorithms/isle/WordSenseDisambiguation.java 2013-09-03 16:53:18 UTC (rev 4042) @@ -9,7 +9,7 @@ import java.util.Set; /** - * Abstract class for + * Abstract class for the word sense disambiguation component. * * @author Daniel Fleischhacker */ @@ -17,7 +17,7 @@ OWLOntology ontology; /** - * Initialize the word sense disambiguation to use the given ontology. + * Initializes the word sense disambiguation to use the given ontology. * * @param ontology the ontology to disambiguate on */ @@ -26,7 +26,7 @@ } /** - * Chooses the correct entity for the given annotation from a set of candidate enties. + * Chooses the correct entity for the given annotation from a set of candidate entities. * * @param annotation the annotation to find entity for * @param candidateEntities the set of candidate entities This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <lor...@us...> - 2013-09-03 16:48:56
|
Revision: 4041 http://sourceforge.net/p/dl-learner/code/4041 Author: lorenz_b Date: 2013-09-03 16:48:52 +0000 (Tue, 03 Sep 2013) Log Message: ----------- Added first implementation of semantic index. Removed Paths: ------------- trunk/components-core/src/main/java/org/dllearner/algorithms/isle/index/semantic/SemanticIndexFactory.java Deleted: trunk/components-core/src/main/java/org/dllearner/algorithms/isle/index/semantic/SemanticIndexFactory.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/algorithms/isle/index/semantic/SemanticIndexFactory.java 2013-09-03 16:48:16 UTC (rev 4040) +++ trunk/components-core/src/main/java/org/dllearner/algorithms/isle/index/semantic/SemanticIndexFactory.java 2013-09-03 16:48:52 UTC (rev 4041) @@ -1,18 +0,0 @@ -package org.dllearner.algorithms.isle.index.semantic; - -import java.io.File; - -/** - * Provides methods for creating semantic indexes. - * - * @author Daniel Fleischhacker - */ -public interface SemanticIndexFactory { - /** - * Returns a newly created semantic index for the collection of files contained in the given {@code directory}. - * - * @param inputDirectory directory containing files to create index from - * @return semantic index for the files in the given input directory - */ - public SemanticIndex createIndex(File inputDirectory); -} This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <lor...@us...> - 2013-09-03 16:48:19
|
Revision: 4040 http://sourceforge.net/p/dl-learner/code/4040 Author: lorenz_b Date: 2013-09-03 16:48:16 +0000 (Tue, 03 Sep 2013) Log Message: ----------- Added first implementation of semantic index. Modified Paths: -------------- trunk/components-core/src/main/java/org/dllearner/algorithms/isle/index/SemanticAnnotator.java trunk/components-core/src/main/java/org/dllearner/algorithms/isle/index/semantic/SemanticIndex.java trunk/components-core/src/main/java/org/dllearner/algorithms/isle/index/semantic/simple/SimpleSemanticIndex.java trunk/components-core/src/main/java/org/dllearner/algorithms/isle/metrics/PMIRelevanceMetric.java Removed Paths: ------------- trunk/components-core/src/main/java/org/dllearner/algorithms/isle/index/semantic/simple/SimpleSemanticIndexFactory.java Modified: trunk/components-core/src/main/java/org/dllearner/algorithms/isle/index/SemanticAnnotator.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/algorithms/isle/index/SemanticAnnotator.java 2013-09-03 16:09:27 UTC (rev 4039) +++ trunk/components-core/src/main/java/org/dllearner/algorithms/isle/index/SemanticAnnotator.java 2013-09-03 16:48:16 UTC (rev 4040) @@ -6,7 +6,6 @@ import org.dllearner.algorithms.isle.EntityCandidateGenerator; import org.dllearner.algorithms.isle.WordSenseDisambiguation; import org.dllearner.core.owl.Entity; -import org.semanticweb.owlapi.model.OWLOntology; /** * Provides methods to annotate documents. @@ -15,7 +14,6 @@ */ public class SemanticAnnotator { - private OWLOntology ontology; private WordSenseDisambiguation wordSenseDisambiguation; private EntityCandidateGenerator entityCandidateGenerator; private LinguisticAnnotator linguisticAnnotator; @@ -26,9 +24,8 @@ * * @param ontology the ontology to use entities from */ - public SemanticAnnotator(OWLOntology ontology, WordSenseDisambiguation wordSenseDisambiguation, + public SemanticAnnotator(WordSenseDisambiguation wordSenseDisambiguation, EntityCandidateGenerator entityCandidateGenerator, LinguisticAnnotator linguisticAnnotator) { - this.ontology = ontology; this.wordSenseDisambiguation = wordSenseDisambiguation; this.entityCandidateGenerator = entityCandidateGenerator; this.linguisticAnnotator = linguisticAnnotator; Modified: trunk/components-core/src/main/java/org/dllearner/algorithms/isle/index/semantic/SemanticIndex.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/algorithms/isle/index/semantic/SemanticIndex.java 2013-09-03 16:09:27 UTC (rev 4039) +++ trunk/components-core/src/main/java/org/dllearner/algorithms/isle/index/semantic/SemanticIndex.java 2013-09-03 16:48:16 UTC (rev 4040) @@ -1,11 +1,19 @@ package org.dllearner.algorithms.isle.index.semantic; +import java.util.HashSet; +import java.util.Map; +import java.util.Set; + +import org.dllearner.algorithms.isle.EntityCandidateGenerator; +import org.dllearner.algorithms.isle.WordSenseDisambiguation; import org.dllearner.algorithms.isle.index.AnnotatedDocument; -import org.dllearner.algorithms.isle.index.Document; +import org.dllearner.algorithms.isle.index.LinguisticAnnotator; +import org.dllearner.algorithms.isle.index.SemanticAnnotator; +import org.dllearner.algorithms.isle.index.TextDocument; +import org.dllearner.algorithms.isle.index.syntactic.SyntacticIndex; import org.dllearner.core.owl.Entity; +import org.semanticweb.owlapi.model.OWLOntology; -import java.util.Set; - /** * Interface for an index which is able to resolve a given entity's URI to the set of documents containing * this entity, i.e., documents which contain words disambiguated to the given entity. @@ -13,14 +21,51 @@ * @author Lorenz Buehmann * @author Daniel Fleischhacker */ -public interface SemanticIndex { +public abstract class SemanticIndex { + + private SemanticAnnotator semanticAnnotator; + private SyntacticIndex syntacticIndex; + private Map<Entity, Set<AnnotatedDocument>> index; + private OWLOntology ontology; + + public SemanticIndex(OWLOntology ontology, SyntacticIndex syntacticIndex, WordSenseDisambiguation wordSenseDisambiguation, + EntityCandidateGenerator entityCandidateGenerator, LinguisticAnnotator linguisticAnnotator) { + this.ontology = ontology; + this.syntacticIndex = syntacticIndex; + semanticAnnotator = new SemanticAnnotator(wordSenseDisambiguation, entityCandidateGenerator, linguisticAnnotator); + } + + public SemanticIndex(OWLOntology ontology, SyntacticIndex syntacticIndex, SemanticAnnotator semanticAnnotator) { + this.semanticAnnotator = semanticAnnotator; + } + + /** + * Precompute the whole index, i.e. iterate over all entities and compute all annotated documents. + */ + public void buildIndex(Set<TextDocument> documents){ + for (TextDocument document : documents) { + AnnotatedDocument annotatedDocument = semanticAnnotator.processDocument(document); + for (Entity entity : annotatedDocument.getContainedEntities()) { + Set<AnnotatedDocument> existingAnnotatedDocuments = index.get(entity); + if(existingAnnotatedDocuments == null){ + existingAnnotatedDocuments = new HashSet<AnnotatedDocument>(); + index.put(entity, existingAnnotatedDocuments); + } + existingAnnotatedDocuments.add(annotatedDocument); + } + } + } + /** * Returns the set of annotated documents which reference the given entity using one of its surface forms. * * @param entity entity to retrieve documents * @return documents referencing given entity */ - public Set<AnnotatedDocument> getDocuments(Entity entity); + public Set<AnnotatedDocument> getDocuments(Entity entity){ + Set<AnnotatedDocument> annotatedDocuments = index.get(entity); + return annotatedDocuments; + } /** * Returns the number of documents for the given entity. @@ -28,12 +73,16 @@ * @param entity entity to return number of referencing documents for * @return number of documents for the given entity in this index */ - public int count(Entity entity); + public int count(Entity entity){ + return index.get(entity).size(); + } /** * Returns the total number of documents contained in the index. * * @return the total number of documents contained in the index */ - public int getSize(); + public int getSize(){ + return index.size(); + } } Modified: trunk/components-core/src/main/java/org/dllearner/algorithms/isle/index/semantic/simple/SimpleSemanticIndex.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/algorithms/isle/index/semantic/simple/SimpleSemanticIndex.java 2013-09-03 16:09:27 UTC (rev 4039) +++ trunk/components-core/src/main/java/org/dllearner/algorithms/isle/index/semantic/simple/SimpleSemanticIndex.java 2013-09-03 16:48:16 UTC (rev 4040) @@ -3,28 +3,20 @@ */ package org.dllearner.algorithms.isle.index.semantic.simple; -import org.dllearner.algorithms.isle.index.AnnotatedDocument; -import org.dllearner.algorithms.isle.index.Document; +import org.dllearner.algorithms.isle.RandomWordSenseDisambiguation; +import org.dllearner.algorithms.isle.index.SimpleEntityCandidateGenerator; +import org.dllearner.algorithms.isle.index.SimpleLinguisticAnnotator; +import org.dllearner.algorithms.isle.index.semantic.SemanticIndex; import org.dllearner.algorithms.isle.index.syntactic.SyntacticIndex; -import org.dllearner.algorithms.isle.index.semantic.SemanticIndex; -import org.dllearner.algorithms.isle.textretrieval.RDFSLabelEntityTextRetriever; -import org.dllearner.core.owl.Entity; import org.semanticweb.owlapi.model.OWLOntology; -import java.util.HashSet; -import java.util.Map; -import java.util.Map.Entry; -import java.util.Set; - /** * A semantic index which returns all documents which contain at least one of the labels assigned to a specific * entity in a provided ontology. * * @author Lorenz Buehmann */ -public class SimpleSemanticIndex implements SemanticIndex { - private SyntacticIndex syntacticIndex; - private RDFSLabelEntityTextRetriever labelRetriever; +public class SimpleSemanticIndex extends SemanticIndex { /** * Initializes the semantic index to use {@code ontology} for finding all labels of an entity and @@ -34,41 +26,11 @@ * @param syntacticIndex index to query for documents containing the labels */ public SimpleSemanticIndex(OWLOntology ontology, SyntacticIndex syntacticIndex) { - this.syntacticIndex = syntacticIndex; - labelRetriever = new RDFSLabelEntityTextRetriever(ontology); + super(ontology, + syntacticIndex, + new RandomWordSenseDisambiguation(ontology), + new SimpleEntityCandidateGenerator(ontology), + new SimpleLinguisticAnnotator()); } - /* (non-Javadoc) - * @see org.dllearner.algorithms.isle.SemanticIndex#getDocuments(org.dllearner.core.owl.Entity) - */ - @Override - public Set<AnnotatedDocument> getDocuments(Entity entity) { - Set<AnnotatedDocument> documents = new HashSet<AnnotatedDocument>(); - Map<String, Double> relevantText = labelRetriever.getRelevantText(entity); - - for (Entry<String, Double> entry : relevantText.entrySet()) { - String label = entry.getKey(); - documents.addAll(syntacticIndex.getDocuments(label)); - } - - return documents; - } - - /* (non-Javadoc) - * @see org.dllearner.algorithms.isle.SemanticIndex#count(java.lang.String) - */ - @Override - public int count(Entity entity) { - return getDocuments(entity).size(); - } - - /* (non-Javadoc) - * @see org.dllearner.algorithms.isle.SemanticIndex#getSize() - */ - @Override - public int getSize() { - return syntacticIndex.getSize(); - } - - } Deleted: trunk/components-core/src/main/java/org/dllearner/algorithms/isle/index/semantic/simple/SimpleSemanticIndexFactory.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/algorithms/isle/index/semantic/simple/SimpleSemanticIndexFactory.java 2013-09-03 16:09:27 UTC (rev 4039) +++ trunk/components-core/src/main/java/org/dllearner/algorithms/isle/index/semantic/simple/SimpleSemanticIndexFactory.java 2013-09-03 16:48:16 UTC (rev 4040) @@ -1,40 +0,0 @@ -/** - * - */ -package org.dllearner.algorithms.isle.index.semantic.simple; - -import org.dllearner.algorithms.isle.index.syntactic.SyntacticIndex; -import org.dllearner.algorithms.isle.index.semantic.SemanticIndex; -import org.dllearner.algorithms.isle.index.semantic.SemanticIndexFactory; -import org.semanticweb.owlapi.model.OWLOntology; - -import java.io.File; - -/** - * This gets a syntactic index and returns a semantic index by applying WSD etc. - * - * @author Lorenz Buehmann - * @author Daniel Fleischhacker - */ -public class SimpleSemanticIndexFactory implements SemanticIndexFactory { - private OWLOntology ontology; - private SyntacticIndex syntacticIndex; - - /** - * Initializes a semantic index factory for creating simple semantic indexes. Simple semantic indexes use - * the labels assigned to an entity in {@code ontology} as its surface forms and return the all documents - * from the given syntactic index which contain at least one of these surface forms. - * - * @param syntacticIndex the syntactic index in which occurrences of the labels are searched - * @param ontology the ontology retrieve the entities' labels from - */ - public SimpleSemanticIndexFactory(SyntacticIndex syntacticIndex, OWLOntology ontology) { - this.syntacticIndex = syntacticIndex; - this.ontology = ontology; - } - - @Override - public SemanticIndex createIndex(File inputDirectory) { - return new SimpleSemanticIndex(ontology, syntacticIndex); - } -} Modified: trunk/components-core/src/main/java/org/dllearner/algorithms/isle/metrics/PMIRelevanceMetric.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/algorithms/isle/metrics/PMIRelevanceMetric.java 2013-09-03 16:09:27 UTC (rev 4039) +++ trunk/components-core/src/main/java/org/dllearner/algorithms/isle/metrics/PMIRelevanceMetric.java 2013-09-03 16:48:16 UTC (rev 4040) @@ -3,12 +3,13 @@ */ package org.dllearner.algorithms.isle.metrics; -import com.google.common.collect.Sets; -import org.dllearner.algorithms.isle.index.Document; +import java.util.Set; + +import org.dllearner.algorithms.isle.index.AnnotatedDocument; import org.dllearner.algorithms.isle.index.semantic.SemanticIndex; import org.dllearner.core.owl.Entity; -import java.util.Set; +import com.google.common.collect.Sets; /** * @author Lorenz Buehmann @@ -22,9 +23,9 @@ @Override public double getRelevance(Entity entityA, Entity entityB){ - Set<Document> documentsA = index.getDocuments(entityA); - Set<Document> documentsB = index.getDocuments(entityB); - Set<Document> documentsAB = Sets.intersection(documentsA, documentsB); + Set<AnnotatedDocument> documentsA = index.getDocuments(entityA); + Set<AnnotatedDocument> documentsB = index.getDocuments(entityB); + Set<AnnotatedDocument> documentsAB = Sets.intersection(documentsA, documentsB); int nrOfDocuments = index.getSize(); double dPClass = nrOfDocuments == 0 ? 0 : ((double) documentsA.size() / (double) nrOfDocuments); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jen...@us...> - 2013-09-03 16:09:31
|
Revision: 4039 http://sourceforge.net/p/dl-learner/code/4039 Author: jenslehmann Date: 2013-09-03 16:09:27 +0000 (Tue, 03 Sep 2013) Log Message: ----------- implemented random WSD as baseline method Modified Paths: -------------- trunk/components-core/src/main/java/org/dllearner/algorithms/isle/index/SemanticAnnotation.java Added Paths: ----------- trunk/components-core/src/main/java/org/dllearner/algorithms/isle/RandomWordSenseDisambiguation.java Added: trunk/components-core/src/main/java/org/dllearner/algorithms/isle/RandomWordSenseDisambiguation.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/algorithms/isle/RandomWordSenseDisambiguation.java (rev 0) +++ trunk/components-core/src/main/java/org/dllearner/algorithms/isle/RandomWordSenseDisambiguation.java 2013-09-03 16:09:27 UTC (rev 4039) @@ -0,0 +1,59 @@ +/** + * Copyright (C) 2007-2013, Jens Lehmann + * + * This file is part of DL-Learner. + * + * DL-Learner is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * DL-Learner is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ +package org.dllearner.algorithms.isle; + +import java.util.Random; +import java.util.Set; + +import org.dllearner.algorithms.isle.index.Annotation; +import org.dllearner.algorithms.isle.index.SemanticAnnotation; +import org.dllearner.core.owl.Entity; +import org.semanticweb.owlapi.model.OWLOntology; + +/** + * Disambiguation by randomly selecting one of the candidates (baseline method). + * + * @author Jens Lehmann + * + */ +public class RandomWordSenseDisambiguation extends WordSenseDisambiguation { + + private Random random; + + public RandomWordSenseDisambiguation(OWLOntology ontology) { + super(ontology); + random = new Random(); + } + + @Override + public SemanticAnnotation disambiguate(Annotation annotation, + Set<Entity> candidateEntities) { + int pos = random.nextInt(candidateEntities.size()); + int i = 0; + for(Entity e : candidateEntities) + { + if (i == pos) { + return new SemanticAnnotation(annotation, e); + } + i++; + } + return null; + } + +} Modified: trunk/components-core/src/main/java/org/dllearner/algorithms/isle/index/SemanticAnnotation.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/algorithms/isle/index/SemanticAnnotation.java 2013-09-03 15:55:04 UTC (rev 4038) +++ trunk/components-core/src/main/java/org/dllearner/algorithms/isle/index/SemanticAnnotation.java 2013-09-03 16:09:27 UTC (rev 4039) @@ -13,6 +13,11 @@ private Entity entity; + public SemanticAnnotation(Annotation annotation, Entity entity) { + super(annotation.getGetReferencedDocument(), annotation.getOffset(), annotation.getLength()); + this.entity = entity; + } + public SemanticAnnotation(Document getReferencedDocument, Entity entity, int offset, int length) { super(getReferencedDocument, offset, length); this.entity = entity; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jen...@us...> - 2013-09-03 15:55:07
|
Revision: 4038 http://sourceforge.net/p/dl-learner/code/4038 Author: jenslehmann Date: 2013-09-03 15:55:04 +0000 (Tue, 03 Sep 2013) Log Message: ----------- simple linguistic annotator Added Paths: ----------- trunk/components-core/src/main/java/org/dllearner/algorithms/isle/index/SimpleLinguisticAnnotator.java Added: trunk/components-core/src/main/java/org/dllearner/algorithms/isle/index/SimpleLinguisticAnnotator.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/algorithms/isle/index/SimpleLinguisticAnnotator.java (rev 0) +++ trunk/components-core/src/main/java/org/dllearner/algorithms/isle/index/SimpleLinguisticAnnotator.java 2013-09-03 15:55:04 UTC (rev 4038) @@ -0,0 +1,29 @@ +package org.dllearner.algorithms.isle.index; + +import java.util.HashSet; +import java.util.Set; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +/** + * + * @author Jens Lehmann + * + */ +public class SimpleLinguisticAnnotator implements LinguisticAnnotator { + + @Override + public Set<Annotation> annotate(Document document) { + String s = document.getRawContent(); + Set<Annotation> annotations = new HashSet<Annotation>(); + Pattern pattern = Pattern.compile(" "); + Matcher matcher = pattern.matcher(s); + // Check all occurrences + while (matcher.find()) { + annotations.add(new Annotation(document, matcher.start(), + matcher.end() - matcher.start())); + } + return annotations; + } + +} This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <lor...@us...> - 2013-09-03 15:49:08
|
Revision: 4037 http://sourceforge.net/p/dl-learner/code/4037 Author: lorenz_b Date: 2013-09-03 15:49:06 +0000 (Tue, 03 Sep 2013) Log Message: ----------- Added simple implementation of entity generator. Added Paths: ----------- trunk/components-core/src/main/java/org/dllearner/algorithms/isle/index/SimpleEntityCandidateGenerator.java Added: trunk/components-core/src/main/java/org/dllearner/algorithms/isle/index/SimpleEntityCandidateGenerator.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/algorithms/isle/index/SimpleEntityCandidateGenerator.java (rev 0) +++ trunk/components-core/src/main/java/org/dllearner/algorithms/isle/index/SimpleEntityCandidateGenerator.java 2013-09-03 15:49:06 UTC (rev 4037) @@ -0,0 +1,42 @@ +/** + * + */ +package org.dllearner.algorithms.isle.index; + +import java.util.HashSet; +import java.util.Set; + +import org.dllearner.algorithms.isle.EntityCandidateGenerator; +import org.dllearner.core.owl.Entity; +import org.dllearner.utilities.owl.OWLAPIConverter; +import org.semanticweb.owlapi.model.OWLEntity; +import org.semanticweb.owlapi.model.OWLOntology; + +/** + * @author Lorenz Buehmann + * + */ +public class SimpleEntityCandidateGenerator extends EntityCandidateGenerator{ + + private Set<Entity> allEntities = new HashSet<Entity>(); + + public SimpleEntityCandidateGenerator(OWLOntology ontology) { + super(ontology); + + Set<OWLEntity> owlEntities = new HashSet<OWLEntity>(); + owlEntities.addAll(ontology.getClassesInSignature()); + owlEntities.addAll(ontology.getObjectPropertiesInSignature()); + owlEntities.addAll(ontology.getDataPropertiesInSignature()); + + allEntities.addAll(OWLAPIConverter.getEntities(owlEntities)); + } + + /* (non-Javadoc) + * @see org.dllearner.algorithms.isle.EntityCandidateGenerator#getCandidates(org.dllearner.algorithms.isle.index.Annotation) + */ + @Override + public Set<Entity> getCandidates(Annotation annotation) { + return allEntities; + } + +} This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <lor...@us...> - 2013-09-03 15:44:29
|
Revision: 4036 http://sourceforge.net/p/dl-learner/code/4036 Author: lorenz_b Date: 2013-09-03 15:44:26 +0000 (Tue, 03 Sep 2013) Log Message: ----------- Added linguistic annotator. Modified Paths: -------------- trunk/components-core/src/main/java/org/dllearner/algorithms/isle/index/SemanticAnnotator.java Added Paths: ----------- trunk/components-core/src/main/java/org/dllearner/algorithms/isle/EntityCandidateGenerator.java trunk/components-core/src/main/java/org/dllearner/algorithms/isle/index/LinguisticAnnotator.java Added: trunk/components-core/src/main/java/org/dllearner/algorithms/isle/EntityCandidateGenerator.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/algorithms/isle/EntityCandidateGenerator.java (rev 0) +++ trunk/components-core/src/main/java/org/dllearner/algorithms/isle/EntityCandidateGenerator.java 2013-09-03 15:44:26 UTC (rev 4036) @@ -0,0 +1,25 @@ +/** + * + */ +package org.dllearner.algorithms.isle; + +import java.util.Set; + +import org.dllearner.algorithms.isle.index.Annotation; +import org.dllearner.core.owl.Entity; +import org.semanticweb.owlapi.model.OWLOntology; + +/** + * @author Lorenz Buehmann + * + */ +public abstract class EntityCandidateGenerator { + + private OWLOntology ontology; + + public EntityCandidateGenerator(OWLOntology ontology) { + this.ontology = ontology; + } + + public abstract Set<Entity> getCandidates(Annotation annotation); +} Added: trunk/components-core/src/main/java/org/dllearner/algorithms/isle/index/LinguisticAnnotator.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/algorithms/isle/index/LinguisticAnnotator.java (rev 0) +++ trunk/components-core/src/main/java/org/dllearner/algorithms/isle/index/LinguisticAnnotator.java 2013-09-03 15:44:26 UTC (rev 4036) @@ -0,0 +1,16 @@ +/** + * + */ +package org.dllearner.algorithms.isle.index; + +import java.util.Set; + +/** + * @author Lorenz Buehmann + * + */ +public interface LinguisticAnnotator { + + Set<Annotation> annotate(Document document); + +} Modified: trunk/components-core/src/main/java/org/dllearner/algorithms/isle/index/SemanticAnnotator.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/algorithms/isle/index/SemanticAnnotator.java 2013-09-03 15:26:18 UTC (rev 4035) +++ trunk/components-core/src/main/java/org/dllearner/algorithms/isle/index/SemanticAnnotator.java 2013-09-03 15:44:26 UTC (rev 4036) @@ -1,5 +1,11 @@ package org.dllearner.algorithms.isle.index; +import java.util.HashSet; +import java.util.Set; + +import org.dllearner.algorithms.isle.EntityCandidateGenerator; +import org.dllearner.algorithms.isle.WordSenseDisambiguation; +import org.dllearner.core.owl.Entity; import org.semanticweb.owlapi.model.OWLOntology; /** @@ -9,15 +15,23 @@ */ public class SemanticAnnotator { - OWLOntology ontology; + private OWLOntology ontology; + private WordSenseDisambiguation wordSenseDisambiguation; + private EntityCandidateGenerator entityCandidateGenerator; + private LinguisticAnnotator linguisticAnnotator; + /** * Initialize this semantic annotator to use the entities from the provided ontology. * * @param ontology the ontology to use entities from */ - public SemanticAnnotator(OWLOntology ontology) { + public SemanticAnnotator(OWLOntology ontology, WordSenseDisambiguation wordSenseDisambiguation, + EntityCandidateGenerator entityCandidateGenerator, LinguisticAnnotator linguisticAnnotator) { this.ontology = ontology; + this.wordSenseDisambiguation = wordSenseDisambiguation; + this.entityCandidateGenerator = entityCandidateGenerator; + this.linguisticAnnotator = linguisticAnnotator; } /** @@ -26,7 +40,16 @@ * @param document the document to annotate * @return the given document extended with annotations */ - public AnnotatedDocument processDocument(Document document){ - return null; + public AnnotatedDocument processDocument(TextDocument document){ + Set<Annotation> annotations = linguisticAnnotator.annotate(document); + Set<SemanticAnnotation> semanticAnnotations = new HashSet<SemanticAnnotation>(); + for (Annotation annotation : annotations) { + Set<Entity> candidateEntities = entityCandidateGenerator.getCandidates(annotation); + SemanticAnnotation semanticAnnotation = wordSenseDisambiguation.disambiguate(annotation, candidateEntities); + semanticAnnotations.add(semanticAnnotation); + + } + AnnotatedDocument annotatedDocument = new AnnotatedTextDocument(document, semanticAnnotations); + return annotatedDocument; } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |