Skip to content

Commit

Permalink
Fixed error with dup and clone
Browse files Browse the repository at this point in the history
  • Loading branch information
ankane committed Jun 7, 2023
1 parent 253190e commit ebee831
Show file tree
Hide file tree
Showing 9 changed files with 12 additions and 55 deletions.
4 changes: 4 additions & 0 deletions CHANGELOG.md
@@ -1,3 +1,7 @@
## 0.2.2 (unreleased)

- Fixed error with `dup` and `clone`

## 0.2.1 (2022-06-12)

- Added `tokenize` and `tokenize_file` methods
Expand Down
8 changes: 1 addition & 7 deletions lib/mitie/binary_relation_detector.rb
Expand Up @@ -5,13 +5,12 @@ def initialize(path = nil, pointer: nil)
# better error message
raise ArgumentError, "File does not exist" unless File.exist?(path)
@pointer = FFI.mitie_load_binary_relation_detector(path)
@pointer.free = FFI["mitie_free"]
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

def name
Expand Down Expand Up @@ -75,10 +74,5 @@ def extract_relation(doc, entity1, entity2)
ensure
FFI.mitie_free(relation) if relation
end

def self.finalize(pointer)
# must use proc instead of stabby lambda
proc { FFI.mitie_free(pointer) }
end
end
end
8 changes: 1 addition & 7 deletions lib/mitie/binary_relation_trainer.rb
Expand Up @@ -2,8 +2,7 @@ module Mitie
class BinaryRelationTrainer
def initialize(ner, name: "")
@pointer = FFI.mitie_create_binary_relation_trainer(name, ner.pointer)

ObjectSpace.define_finalizer(self, self.class.finalize(@pointer))
@pointer.free = FFI["mitie_free"]
end

def add_positive_binary_relation(tokens, range1, range2)
Expand Down Expand Up @@ -78,10 +77,5 @@ def check_add(tokens, range1, range2)
def entities_overlap?(range1, range2)
FFI.mitie_entities_overlap(range1.begin, range1.size, range2.begin, range2.size) == 1
end

def self.finalize(pointer)
# must use proc instead of stabby lambda
proc { FFI.mitie_free(pointer) }
end
end
end
7 changes: 1 addition & 6 deletions lib/mitie/document.rb
Expand Up @@ -87,20 +87,15 @@ def tokenize
else
offsets_ptr = Fiddle::Pointer.malloc(Fiddle::SIZEOF_VOIDP)
tokens_ptr = FFI.mitie_tokenize_with_offsets(text, offsets_ptr)
tokens_ptr.free = FFI["mitie_free"]

ObjectSpace.define_finalizer(tokens_ptr, self.class.finalize(tokens_ptr))
ObjectSpace.define_finalizer(offsets_ptr, self.class.finalize_ptr(offsets_ptr))

[tokens_ptr, offsets_ptr]
end
end
end

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

def self.finalize_ptr(pointer)
# must use proc instead of stabby lambda
proc { FFI.mitie_free(pointer.ptr) }
Expand Down
8 changes: 1 addition & 7 deletions lib/mitie/ner.rb
Expand Up @@ -7,13 +7,12 @@ def initialize(path = nil, pointer: nil)
# better error message
raise ArgumentError, "File does not exist" unless File.exist?(path)
@pointer = FFI.mitie_load_named_entity_extractor(path)
@pointer.free = FFI["mitie_free"]
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

def tags
Expand Down Expand Up @@ -44,10 +43,5 @@ def tokens(text)
def tokens_with_offset(text)
doc(text).tokens_with_offset
end

def self.finalize(pointer)
# must use proc instead of stabby lambda
proc { FFI.mitie_free(pointer) }
end
end
end
8 changes: 1 addition & 7 deletions lib/mitie/ner_trainer.rb
Expand Up @@ -3,8 +3,7 @@ class NERTrainer
def initialize(filename)
raise ArgumentError, "File does not exist" unless File.exist?(filename)
@pointer = FFI.mitie_create_ner_trainer(filename)

ObjectSpace.define_finalizer(self, self.class.finalize(@pointer))
@pointer.free = FFI["mitie_free"]
end

def add(instance)
Expand Down Expand Up @@ -42,10 +41,5 @@ def train

Mitie::NER.new(pointer: extractor)
end

def self.finalize(pointer)
# must use proc instead of stabby lambda
proc { FFI.mitie_free(pointer) }
end
end
end
8 changes: 1 addition & 7 deletions lib/mitie/ner_training_instance.rb
Expand Up @@ -7,8 +7,7 @@ def initialize(tokens)

@pointer = FFI.mitie_create_ner_training_instance(tokens_pointer)
raise Error, "Unable to create training instance. Probably ran out of RAM." if @pointer.null?

ObjectSpace.define_finalizer(self, self.class.finalize(@pointer))
@pointer.free = FFI["mitie_free"]
end

def add_entity(range, label)
Expand Down Expand Up @@ -36,10 +35,5 @@ def overlaps_any_entity?(range)

FFI.mitie_overlaps_any_entity(@pointer, range.begin, range.size) == 1
end

def self.finalize(pointer)
# must use proc instead of stabby lambda
proc { FFI.mitie_free(pointer) }
end
end
end
8 changes: 1 addition & 7 deletions lib/mitie/text_categorizer.rb
Expand Up @@ -5,13 +5,12 @@ def initialize(path = nil, pointer: nil)
# 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

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

def categorize(text)
Expand Down Expand Up @@ -39,10 +38,5 @@ def save_to_disk(filename)
end
nil
end

def self.finalize(pointer)
# must use proc instead of stabby lambda
proc { FFI.mitie_free(pointer) }
end
end
end
8 changes: 1 addition & 7 deletions lib/mitie/text_categorizer_trainer.rb
Expand Up @@ -3,8 +3,7 @@ class TextCategorizerTrainer
def initialize(filename)
raise ArgumentError, "File does not exist" unless File.exist?(filename)
@pointer = FFI.mitie_create_text_categorizer_trainer(filename)

ObjectSpace.define_finalizer(self, self.class.finalize(@pointer))
@pointer.free = FFI["mitie_free"]
end

def add(text, label)
Expand Down Expand Up @@ -44,10 +43,5 @@ def train

Mitie::TextCategorizer.new(pointer: categorizer)
end

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

0 comments on commit ebee831

Please sign in to comment.