summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndreas Maunz <andreas@maunz.de>2011-07-28 15:44:55 +0200
committerAndreas Maunz <andreas@maunz.de>2011-07-28 15:44:55 +0200
commit49943ba879a40f2039eae710cb9e0ad8c2ffb04a (patch)
tree05ce8ceb68b49398521bc1b35dca76b57a7b09eb
parent545af9b1376ed56aa75be709f8d7a7f4c2a5fd5e (diff)
Generalized routines 'predicted_variables' and 'from_rdf'
-rw-r--r--lib/model.rb35
-rw-r--r--lib/parser.rb31
2 files changed, 44 insertions, 22 deletions
diff --git a/lib/model.rb b/lib/model.rb
index 0f1cc22..2c62f40 100644
--- a/lib/model.rb
+++ b/lib/model.rb
@@ -50,38 +50,49 @@ module OpenTox
@predicted_variable
end
+ def predicted_variables( subjectid )
+ load_predicted_variables( subjectid, false ) unless @predicted_variables
+ @predicted_variables
+ end
+
def predicted_confidence( subjectid )
load_predicted_variables( subjectid ) unless @predicted_confidence
@predicted_confidence
end
private
- def load_predicted_variables( subjectid=nil )
+ def load_predicted_variables( subjectid=nil, use_confidence=true )
load_metadata(subjectid) if @metadata==nil or @metadata.size==0 or (@metadata.size==1 && @metadata.values[0]==@uri)
if @metadata[OT.predictedVariables]
predictedVariables = @metadata[OT.predictedVariables]
if predictedVariables.is_a?(Array)
if (predictedVariables.size==1)
@predicted_variable = predictedVariables[0]
- elsif (predictedVariables.size==2)
+ elsif (predictedVariables.size>=2)
# PENDING identify confidence
- conf_index = -1
- predictedVariables.size.times do |i|
- f = OpenTox::Feature.find(predictedVariables[i])
- conf_index = i if f.metadata[DC.title]=~/(?i)confidence/
+ if use_confidence
+ conf_index = -1
+ predictedVariables.size.times do |i|
+ f = OpenTox::Feature.find(predictedVariables[i])
+ conf_index = i if f.metadata[DC.title]=~/(?i)confidence/
+ end
+ raise "could not estimate predicted variable from model: '"+uri.to_s+
+ "', number of predicted-variables==2, but no confidence found" if conf_index==-1
+ end
+ if (predictedVariables.size==2) && use_confidence
+ @predicted_variable = predictedVariables[1-conf_index]
+ @predicted_confidence = predictedVariables[conf_index]
+ else
+ @predicted_variables = predictedVariables
end
- raise "could not estimate predicted variable from model: '"+uri.to_s+
- "', number of predicted-variables==2, but no confidence found" if conf_index==-1
- @predicted_variable = predictedVariables[1-conf_index]
- @predicted_confidence = predictedVariables[conf_index]
else
- raise "could not estimate predicted variable from model: '"+uri.to_s+"', number of predicted-variables > 2"
+ raise "could not estimate predicted variable from model: '"+uri.to_s+"', number of predicted-variables == 0"
end
else
raise "could not estimate predicted variable from model: '"+uri.to_s+"', predicted-variables is no array"
end
end
- raise "could not estimate predicted variable from model: '"+uri.to_s+"'" unless @predicted_variable
+ raise "could not estimate predicted variable from model: '"+uri.to_s+"'" unless (@predicted_variable || @predicted_variables)
end
end
diff --git a/lib/parser.rb b/lib/parser.rb
index 07bee67..a1678ea 100644
--- a/lib/parser.rb
+++ b/lib/parser.rb
@@ -86,7 +86,11 @@ module OpenTox
# @param [String] rdf
# @param [String] type of the info (e.g. OT.Task, OT.ErrorReport) needed to get the subject-uri
# @return [Owl] with uri and metadata set
- def self.from_rdf( rdf, type )
+ def self.from_rdf( rdf, type, allow_multiple = false )
+
+ uris = Array.new
+ owls = Array.new
+
# write to file and read convert with rapper into tripples
file = Tempfile.new("ot-rdfxml")
file.puts rdf
@@ -99,20 +103,27 @@ module OpenTox
triples.each_line do |line|
triple = line.to_triple
if triple[1] == RDF['type'] and triple[2]==type
- raise "uri already set, two uris found with type: "+type.to_s if uri
+ if !allow_multiple
+ raise "uri already set, two uris found with type: "+type.to_s if uri
+ end
uri = triple[0]
+ uris << uri
end
end
File.delete(file.path)
+
# load metadata
- metadata = {}
- triples.each_line do |line|
- triple = line.to_triple
- metadata[triple[1]] = triple[2].split('^^').first if triple[0] == uri and triple[1] != RDF['type']
- end
- owl = Owl::Generic.new(uri)
- owl.metadata = metadata
- owl
+ uris.each { |uri|
+ metadata = {}
+ triples.each_line do |line|
+ triple = line.to_triple
+ metadata[triple[1]] = triple[2].split('^^').first if triple[0] == uri and triple[1] != RDF['type']
+ end
+ owl = Owl::Generic.new(uri)
+ owl.metadata = metadata
+ owls << owl
+ }
+ allow_multiple ? owls : owls[0]
end
# Generic parser for all OpenTox classes