diff options
author | Andreas Maunz <andreas@maunz.de> | 2011-07-28 15:44:55 +0200 |
---|---|---|
committer | Andreas Maunz <andreas@maunz.de> | 2011-07-28 15:44:55 +0200 |
commit | 49943ba879a40f2039eae710cb9e0ad8c2ffb04a (patch) | |
tree | 05ce8ceb68b49398521bc1b35dca76b57a7b09eb | |
parent | 545af9b1376ed56aa75be709f8d7a7f4c2a5fd5e (diff) |
Generalized routines 'predicted_variables' and 'from_rdf'
-rw-r--r-- | lib/model.rb | 35 | ||||
-rw-r--r-- | lib/parser.rb | 31 |
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 |