From ebee83177e4557f3052fa30cda8026618e7013eb Mon Sep 17 00:00:00 2001 From: Andrew Kane Date: Wed, 7 Jun 2023 14:44:51 -0700 Subject: [PATCH] Fixed error with dup and clone --- CHANGELOG.md | 4 ++++ lib/mitie/binary_relation_detector.rb | 8 +------- lib/mitie/binary_relation_trainer.rb | 8 +------- lib/mitie/document.rb | 7 +------ lib/mitie/ner.rb | 8 +------- lib/mitie/ner_trainer.rb | 8 +------- lib/mitie/ner_training_instance.rb | 8 +------- lib/mitie/text_categorizer.rb | 8 +------- lib/mitie/text_categorizer_trainer.rb | 8 +------- 9 files changed, 12 insertions(+), 55 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5028a5e..63838ca 100644 --- a/CHANGELOG.md +++ b/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 diff --git a/lib/mitie/binary_relation_detector.rb b/lib/mitie/binary_relation_detector.rb index bbaed40..fd47f62 100644 --- a/lib/mitie/binary_relation_detector.rb +++ b/lib/mitie/binary_relation_detector.rb @@ -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 @@ -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 diff --git a/lib/mitie/binary_relation_trainer.rb b/lib/mitie/binary_relation_trainer.rb index 767f17d..3241c0e 100644 --- a/lib/mitie/binary_relation_trainer.rb +++ b/lib/mitie/binary_relation_trainer.rb @@ -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) @@ -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 diff --git a/lib/mitie/document.rb b/lib/mitie/document.rb index c7788fc..f1d2b6e 100644 --- a/lib/mitie/document.rb +++ b/lib/mitie/document.rb @@ -87,8 +87,8 @@ 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] @@ -96,11 +96,6 @@ def tokenize 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) } diff --git a/lib/mitie/ner.rb b/lib/mitie/ner.rb index 76a796a..402ba56 100644 --- a/lib/mitie/ner.rb +++ b/lib/mitie/ner.rb @@ -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 @@ -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 diff --git a/lib/mitie/ner_trainer.rb b/lib/mitie/ner_trainer.rb index 2cfea0f..a3e1d59 100644 --- a/lib/mitie/ner_trainer.rb +++ b/lib/mitie/ner_trainer.rb @@ -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) @@ -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 diff --git a/lib/mitie/ner_training_instance.rb b/lib/mitie/ner_training_instance.rb index 0fbb0e5..9c1086b 100644 --- a/lib/mitie/ner_training_instance.rb +++ b/lib/mitie/ner_training_instance.rb @@ -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) @@ -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 diff --git a/lib/mitie/text_categorizer.rb b/lib/mitie/text_categorizer.rb index 5bca4f3..a04c9ac 100644 --- a/lib/mitie/text_categorizer.rb +++ b/lib/mitie/text_categorizer.rb @@ -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) @@ -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 diff --git a/lib/mitie/text_categorizer_trainer.rb b/lib/mitie/text_categorizer_trainer.rb index f16451c..3260977 100644 --- a/lib/mitie/text_categorizer_trainer.rb +++ b/lib/mitie/text_categorizer_trainer.rb @@ -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) @@ -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