aurelian-ruby-ahocorasick 0.3.3 → 0.4.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/ext/ruby-ahocorasick.c +16 -8
- data/spec/ahocorasick_spec.rb +8 -1
- metadata +1 -1
data/ext/ruby-ahocorasick.c
CHANGED
@@ -75,7 +75,7 @@ rb_kwt_init(VALUE self)
|
|
75
75
|
* Document-method: make
|
76
76
|
* call-seq: make
|
77
77
|
*
|
78
|
-
* It freezes the current KeywordTree.
|
78
|
+
* It freezes the current KeywordTree.
|
79
79
|
*
|
80
80
|
* ==== Note: This method is called internally by search
|
81
81
|
*
|
@@ -93,14 +93,20 @@ rb_kwt_make(VALUE self)
|
|
93
93
|
struct kwt_struct_data *kwt_data;
|
94
94
|
KeywordTree(self, kwt_data);
|
95
95
|
|
96
|
-
|
97
|
-
|
98
|
-
|
96
|
+
if(kwt_data->is_frozen == 1)
|
97
|
+
return Qtrue;
|
98
|
+
|
99
|
+
if(ac_prep( kwt_data->tree ) == 1) {
|
100
|
+
kwt_data->is_frozen = 1;
|
101
|
+
return Qtrue;
|
102
|
+
}
|
103
|
+
|
104
|
+
rb_raise(rb_eRuntimeError, "Cannot freeze the tree");
|
99
105
|
}
|
100
106
|
|
101
107
|
/*
|
102
|
-
* Document-method:
|
103
|
-
* call-seq:
|
108
|
+
* Document-method: find_all
|
109
|
+
* call-seq: find_all
|
104
110
|
*
|
105
111
|
* Search the current tree.
|
106
112
|
*
|
@@ -142,7 +148,8 @@ rb_kwt_find_all(int argc, VALUE *argv, VALUE self)
|
|
142
148
|
KeywordTree(self, kwt_data);
|
143
149
|
// freeze the tree, if not already
|
144
150
|
if(kwt_data->is_frozen == 0) {
|
145
|
-
ac_prep( kwt_data->tree )
|
151
|
+
if(ac_prep( kwt_data->tree ) == 0)
|
152
|
+
rb_raise(rb_eRuntimeError, "Cannot freeze the tree");
|
146
153
|
kwt_data->is_frozen = 1;
|
147
154
|
}
|
148
155
|
// prepare the return value
|
@@ -165,7 +172,8 @@ rb_kwt_find_all(int argc, VALUE *argv, VALUE self)
|
|
165
172
|
rb_ary_push( v_results, v_result );
|
166
173
|
free(result);
|
167
174
|
}
|
168
|
-
//
|
175
|
+
// reopen the tree
|
176
|
+
kwt_data->is_frozen= 0;
|
169
177
|
return v_results;
|
170
178
|
}
|
171
179
|
|
data/spec/ahocorasick_spec.rb
CHANGED
@@ -170,6 +170,13 @@ describe KeywordTree do
|
|
170
170
|
lambda{kwt << "foo"}.should raise_error(RuntimeError)
|
171
171
|
end
|
172
172
|
|
173
|
+
it "should work to add entries on the tree after a search" do
|
174
|
+
kwt= KeywordTree.from_file File.dirname(__FILE__) + "/data/dict0.txt"
|
175
|
+
kwt.find_all("foo-bar not found")
|
176
|
+
kwt.add_string("not found")
|
177
|
+
kwt.find_all("foo-bar not found").size.should == 1
|
178
|
+
end
|
179
|
+
|
173
180
|
end
|
174
181
|
|
175
182
|
describe "Benchmarks. Loading from a file" do
|
@@ -187,7 +194,7 @@ describe KeywordTree do
|
|
187
194
|
load_time= Time.now
|
188
195
|
results= k.find_all( File.read( File.dirname(__FILE__) + "/data/melville-moby_dick.txt" ) )
|
189
196
|
puts "\n%d words re-loaded in %s seconds.\nGot %d results in %s seconds" % [k.size, (load_time - start), results.size, (Time.now-load_time)]
|
190
|
-
(Time.now-load_time).should < 1.
|
197
|
+
(Time.now-load_time).should < 1.3
|
191
198
|
end
|
192
199
|
end
|
193
200
|
|