Class: Mitie::TextCategorizer

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

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
# 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)
    @pointer.free = FFI["mitie_free"]
  elsif pointer
    @pointer = pointer
  else
    raise ArgumentError, "Must pass either a path or a pointer"
  end
end

Instance Method Details

#categorize(text) ⇒ Object



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

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, Fiddle::RUBY_FREE)
  text_score = Fiddle::Pointer.malloc(Fiddle::SIZEOF_DOUBLE, Fiddle::RUBY_FREE)

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

  {
    tag: text_tag.to_s,
    score: Utils.read_double(text_score)
  }
end

#save_to_disk(filename) ⇒ Object



34
35
36
37
38
39
# File 'lib/mitie/text_categorizer.rb', line 34

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