Module: Document

Extended by:
Entity
Defined in:
lib/rbbt/document.rb,
lib/rbbt/document/annotation.rb

Defined Under Namespace

Modules: Corpus

Class Method Summary collapse

Class Method Details

.define(type, &block) ⇒ Object



5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# File 'lib/rbbt/document/annotation.rb', line 5

def self.define(type, &block)
  send :property, type do 
    segments = self.instance_exec &block

    Segment.align(self, segments) unless segments.empty? || (Segment === segments && segments.offset) || (Segment === segments.first && segments.first.offset)

    segments.each do |segment|
      SegmentAnnotation.setup(segment, :type => type.to_s) unless SegmentAnnotation === segment && segment.type
    end

    docid = self.docid
    segments.each{|s| s.docid = docid }

    segments
  end
end

.define_multiple(type, &block) ⇒ Object



22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
# File 'lib/rbbt/document/annotation.rb', line 22

def self.define_multiple(type, &block)
  send :property, type => :multiple do |list|
    doc_segments = self.instance_exec list, &block

    doc_segments = doc_segments.chunked_values_at(list) if Hash === doc_segments

    doc_segments.each_with_index do |segments,i|
      next if segments.nil?
      document = list[i]
      Segment.align(document, segments) unless segments.nil? || segments.empty? || (Segment === segments && segments.offset) || (Segment === segments.first && segments.first.offset)

      segments.each do |segment|
        SegmentAnnotation.setup(segment, :type => type.to_s) unless SegmentAnnotation === segment && segment.type
      end

      docid = document.docid

      segments.each{|s| s.docid = docid }

      segments
    end
  end
end