Class: FactDb::Extractors::Base Abstract

Inherits:
Object
  • Object
show all
Defined in:
lib/fact_db/extractors/base.rb

Overview

This class is abstract.

Subclass and override #extract and #extract_entities to implement.

Abstract base class for fact extractors

Provides common interface and helper methods for extracting facts and entities from text. Subclasses must implement #extract and #extract_entities.

Examples:

Create a custom extractor

class MyExtractor < FactDb::Extractors::Base
  def extract(text, context = {})
    # Implementation
  end

  def extract_entities(text)
    # Implementation
  end
end

Direct Known Subclasses

LLMExtractor, ManualExtractor, RuleBasedExtractor

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(config = FactDb.config) ⇒ Base

Initializes a new extractor

Parameters:

  • config (FactDb::Config) (defaults to: FactDb.config)

    configuration object (defaults to FactDb.config)



30
31
32
# File 'lib/fact_db/extractors/base.rb', line 30

def initialize(config = FactDb.config)
  @config = config
end

Instance Attribute Details

#configFactDb::Config (readonly)

Returns the configuration object.

Returns:



25
26
27
# File 'lib/fact_db/extractors/base.rb', line 25

def config
  @config
end

Class Method Details

.available_typesArray<Symbol>

Returns list of available extractor types

Returns:

  • (Array<Symbol>)

    available extractor type symbols



88
89
90
# File 'lib/fact_db/extractors/base.rb', line 88

def available_types
  %i[manual llm rule_based]
end

.for(type, config = FactDb.config) ⇒ Base

Factory method to create an extractor by type

Examples:

extractor = FactDb::Extractors::Base.for(:llm)

Parameters:

  • type (Symbol, String)

    extractor type (:manual, :llm, :rule_based)

  • config (FactDb::Config) (defaults to: FactDb.config)

    configuration object

Returns:

  • (Base)

    an extractor instance

Raises:

  • (ArgumentError)

    if type is unknown



72
73
74
75
76
77
78
79
80
81
82
83
# File 'lib/fact_db/extractors/base.rb', line 72

def for(type, config = FactDb.config)
  case type.to_sym
  when :manual
    ManualExtractor.new(config)
  when :llm
    LLMExtractor.new(config)
  when :rule_based
    RuleBasedExtractor.new(config)
  else
    raise ArgumentError, "Unknown extractor type: #{type}"
  end
end

Instance Method Details

#extract(text, context = {}) ⇒ Array<Hash>

This method is abstract.

Subclass and override this method

Extracts facts from text

Parameters:

  • text (String)

    raw text to extract from

  • context (Hash) (defaults to: {})

    additional context (captured_at, source_uri, etc.)

Returns:

  • (Array<Hash>)

    array of fact data hashes

Raises:

  • (NotImplementedError)

    if not implemented by subclass



41
42
43
# File 'lib/fact_db/extractors/base.rb', line 41

def extract(text, context = {})
  raise NotImplementedError, "#{self.class} must implement #extract"
end

#extract_entities(text) ⇒ Array<Hash>

This method is abstract.

Subclass and override this method

Extracts entities from text

Parameters:

  • text (String)

    raw text to extract from

Returns:

  • (Array<Hash>)

    array of entity hashes with :name, :kind, :aliases

Raises:

  • (NotImplementedError)

    if not implemented by subclass



51
52
53
# File 'lib/fact_db/extractors/base.rb', line 51

def extract_entities(text)
  raise NotImplementedError, "#{self.class} must implement #extract_entities"
end

#extraction_methodString

Returns the extraction method name derived from class name

Returns:

  • (String)

    method name (e.g., “manual”, “llm”, “rule_based”)



58
59
60
# File 'lib/fact_db/extractors/base.rb', line 58

def extraction_method
  self.class.name.split("::").last.sub("Extractor", "").underscore
end