Class: Mitie::TextCategorizer

Inherits:
Object
  • Object
show all
Defined in:
lib/mitie/text_categorizer.rb

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(path = nil, pointer: nil) ⇒ TextCategorizer

Returns a new instance of TextCategorizer.



3
4
5
6
7
8
9
10
11
12
13
14
15
# File 'lib/mitie/text_categorizer.rb', line 3

def initialize(path = nil, pointer: nil)
  if path
    # better error message
    raise ArgumentError, "File does not exist" unless File.exist?(path)
    @pointer = FFI.mitie_load_text_categorizer(path)
  elsif pointer
    @pointer = pointer
  else
    raise ArgumentError, "Must pass either a path or a pointer"
  end

  ObjectSpace.define_finalizer(self, self.class.finalize(@pointer))
end

Class Method Details

.finalize(pointer) ⇒ Object



43
44
45
46
# File 'lib/mitie/text_categorizer.rb', line 43

def self.finalize(pointer)
  # must use proc instead of stabby lambda
  proc { FFI.mitie_free(pointer) }
end

Instance Method Details

#categorize(text) ⇒ Object



17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
# File 'lib/mitie/text_categorizer.rb', line 17

def categorize(text)
  tokens = text.is_a?(Array) ? text : Mitie.tokenize(text)
  tokens_pointer = Utils.array_to_pointer(tokens)
  text_tag = Fiddle::Pointer.malloc(Fiddle::SIZEOF_VOIDP)
  text_score = Fiddle::Pointer.malloc(Fiddle::SIZEOF_DOUBLE)

  if FFI.mitie_categorize_text(@pointer, tokens_pointer, text_tag, text_score) != 0
    raise Error, "Unable to categorize"
  end

  {
    tag: text_tag.ptr.to_s,
    score: Utils.read_double(text_score)
  }
ensure
  # text_tag must be freed
  FFI.mitie_free(text_tag.ptr) if text_tag
end

#save_to_disk(filename) ⇒ Object



36
37
38
39
40
41
# File 'lib/mitie/text_categorizer.rb', line 36

def save_to_disk(filename)
  if FFI.mitie_save_text_categorizer(filename, @pointer) != 0
    raise Error, "Unable to save model"
  end
  nil
end