Sha256: 0fa6e89514346ff718fdcbe05ba0579f8dcda24ea4857e200b577163500f8321

Contents?: true

Size: 1.76 KB

Versions: 107

Compression:

Stored size: 1.76 KB

Contents

require 'rbbt/entity'

module AssociationItem
  extend Entity

  annotation :knowledge_base
  annotation :database
  annotation :reverse

  property :part => :array2single do
    self.clean_annotations.collect{|p| p.partition("~") }
  end

  property :target => :array2single do
    self.part.collect{|p| p[2]}
  end

  property :source => :array2single do
    self.clean_annotations.collect{|p| p[/[^~]+/] }
  end

  property :target_entity => :array2single do
    type = reverse ? knowledge_base.source(database) : knowledge_base.target(database)
    knowledge_base.annotate self.target, type, database #if self.target.any?
  end

  property :source_entity => :array2single do
    type = reverse ? knowledge_base.target(database) : knowledge_base.source(database)
    knowledge_base.annotate self.source, type #if self.source.any?
  end

  property :value => :array2single do
    value = knowledge_base.get_index(database).chunked_values_at self
    value.collect{|v| NamedArray.setup(v, knowledge_base.get_index(database).fields)}
  end

  property :info => :array2single do
    fields = knowledge_base.index_fields(database)
    return [{}] * self.length if fields.nil? or fields.empty?

    value.collect{|v|
      Hash[*fields.zip(v).flatten]
    }
  end

  def self.incidence(pairs, key_field = nil)
    matrix = {}
    targets = []
    sources = []
    matches = {}

    pairs.each do |p|
      s, sep, t = p.partition "~"
      sources << s
      targets << t
      matches[s] ||= Hash.new{false}
      matches[s][t] = true
    end

    sources.uniq!
    targets = targets.uniq.sort

    matches.each do |s,hash|
      matrix[s] = hash.values_at(*targets)
    end

    defined?(TSV)? TSV.setup(matrix, :key_field => (key_field || "Source") , :fields => targets, :type => :list) : matrix
  end
end

Version data entries

107 entries across 107 versions & 1 rubygems

Version Path
rbbt-util-5.14.6 lib/rbbt/association/item.rb
rbbt-util-5.14.5 lib/rbbt/association/item.rb
rbbt-util-5.14.4 lib/rbbt/association/item.rb
rbbt-util-5.14.3 lib/rbbt/association/item.rb
rbbt-util-5.14.2 lib/rbbt/association/item.rb
rbbt-util-5.14.1 lib/rbbt/association/item.rb
rbbt-util-5.14.0 lib/rbbt/association/item.rb
rbbt-util-5.13.37 lib/rbbt/association/item.rb
rbbt-util-5.13.36 lib/rbbt/association/item.rb
rbbt-util-5.13.35 lib/rbbt/association/item.rb
rbbt-util-5.13.34 lib/rbbt/association/item.rb
rbbt-util-5.13.33 lib/rbbt/association/item.rb
rbbt-util-5.13.32 lib/rbbt/association/item.rb
rbbt-util-5.13.31 lib/rbbt/association/item.rb
rbbt-util-5.13.30 lib/rbbt/association/item.rb
rbbt-util-5.13.29 lib/rbbt/association/item.rb
rbbt-util-5.13.28 lib/rbbt/association/item.rb
rbbt-util-5.13.27 lib/rbbt/association/item.rb
rbbt-util-5.13.26 lib/rbbt/association/item.rb
rbbt-util-5.13.25 lib/rbbt/association/item.rb