treebank 1.1.0 → 2.0.0
Sign up to get free protection for your applications and to get access to all the features.
- data/README +2 -1
- data/lib/treebank.rb +5 -8
- data/test/test_treebank.rb +12 -12
- metadata +2 -2
data/README
CHANGED
@@ -28,7 +28,7 @@ in a bracketed tree format.
|
|
28
28
|
|
29
29
|
Bracketed tree strings can be used to create Node trees.
|
30
30
|
|
31
|
-
irb(main):006:0> t = Treebank::Node.
|
31
|
+
irb(main):006:0> t = Treebank::Node.from_s('(parent (child1) (child2))')
|
32
32
|
=> <Treebank::Node parent [child1 child2]>
|
33
33
|
irb(main):007:0> puts t
|
34
34
|
(parent (child1) (child2))
|
@@ -42,6 +42,7 @@ linguistic structure.
|
|
42
42
|
|
43
43
|
* 1-0-0 ... First release
|
44
44
|
* 1-1-0 ... Removed unnecessary fsa dependency from gemspec
|
45
|
+
* 2-0-0 ... Changed from_s initialization
|
45
46
|
|
46
47
|
= See Also
|
47
48
|
|
data/lib/treebank.rb
CHANGED
@@ -18,7 +18,7 @@
|
|
18
18
|
# Treebank is the namespace that contains all tree-related functions.
|
19
19
|
module Treebank
|
20
20
|
|
21
|
-
VERSION = "
|
21
|
+
VERSION = "2.0.0"
|
22
22
|
|
23
23
|
# An enumerable list of tokens in a string representation of a tree
|
24
24
|
#
|
@@ -244,14 +244,11 @@ module Treebank
|
|
244
244
|
# * right ... right bracket symbol
|
245
245
|
#
|
246
246
|
# This function uses a Treebank::Parser object to create the tree from
|
247
|
-
# _s_.
|
248
|
-
def from_s(s, left = '(', right = ')')
|
249
|
-
|
250
|
-
nodes = Parser.new(TokenStream.new(s, left, right), self.class).collect
|
247
|
+
# _s_.
|
248
|
+
def Node.from_s(s, left = '(', right = ')')
|
249
|
+
nodes = Parser.new(TokenStream.new(s, left, right), self).collect
|
251
250
|
raise "#{s} defines multiple trees" if nodes.length != 1
|
252
|
-
|
253
|
-
@children = nodes.first.collect
|
254
|
-
self
|
251
|
+
nodes.first
|
255
252
|
end
|
256
253
|
|
257
254
|
# Stringify
|
data/test/test_treebank.rb
CHANGED
@@ -68,7 +68,7 @@ module ParseTreeMixin
|
|
68
68
|
def test_tree_parse
|
69
69
|
p = Treebank::Parser.new(Treebank::TokenStream.new('(A) (B)'), @node_class)
|
70
70
|
trees = p.collect
|
71
|
-
assert_equal [@node_class.
|
71
|
+
assert_equal [@node_class.from_s('(A)'), @node_class.from_s('(B)')], trees
|
72
72
|
assert_kind_of @node_class, trees[0]
|
73
73
|
assert_kind_of @node_class, trees[1]
|
74
74
|
t = Treebank::Parser.new(Treebank::TokenStream.new('(A (B) (C))'), @node_class).collect.first
|
@@ -79,7 +79,7 @@ module ParseTreeMixin
|
|
79
79
|
end
|
80
80
|
|
81
81
|
def test_string_in_constructor
|
82
|
-
assert_equal [@node_class.
|
82
|
+
assert_equal [@node_class.from_s('(A)'), @node_class.from_s('(B)')], Treebank::Parser.new('(A) (B)', @node_class).collect
|
83
83
|
end
|
84
84
|
|
85
85
|
end
|
@@ -133,7 +133,7 @@ module NodeTestMixin
|
|
133
133
|
# Test adding children in the constructor
|
134
134
|
def test_constructor_children
|
135
135
|
t = @node_class.new('a', ['b', 'c', 'd'])
|
136
|
-
assert_equal @node_class.
|
136
|
+
assert_equal @node_class.from_s('(a (b) (c) (d) )'), t, 'Children in constructor'
|
137
137
|
end
|
138
138
|
|
139
139
|
# Add children
|
@@ -163,17 +163,17 @@ module NodeTestMixin
|
|
163
163
|
(N (boy)))
|
164
164
|
(VP
|
165
165
|
(V (ran))))'
|
166
|
-
t = @node_class.
|
166
|
+
t = @node_class.from_s(s)
|
167
167
|
assert_kind_of @node_class, t, 'from_s'
|
168
168
|
assert_equal s, "#{t}", 'to_s'
|
169
|
-
m = @node_class.
|
169
|
+
m = @node_class.from_s(multiline_s)
|
170
170
|
assert_equal t, m, 'Single-/multi-line equal'
|
171
171
|
end
|
172
172
|
|
173
173
|
# Simple enumeration
|
174
174
|
def test_enumeration
|
175
175
|
# Enumerate all children.
|
176
|
-
t = @node_class.
|
176
|
+
t = @node_class.from_s('(a (b (R) (S) ) (c (T) (U)) )')
|
177
177
|
assert_equal ['a', 'b', 'c', 'R', 'S', 'T', 'U'], t.each_breadth_first.collect {|node| node.label}, 'Full breadth first'
|
178
178
|
assert_equal ['a', 'b', 'R', 'S', 'c', 'T', 'U'], t.each_depth_first.collect {|node| node.label}, 'Full depth first'
|
179
179
|
# Enumerate children beneath a node.
|
@@ -188,10 +188,10 @@ module NodeTestMixin
|
|
188
188
|
|
189
189
|
# Tree equivalence
|
190
190
|
def test_equivalence
|
191
|
-
t1 = @node_class.
|
192
|
-
t2 = @node_class.
|
193
|
-
s1 = @node_class.
|
194
|
-
s2 = @node_class.
|
191
|
+
t1 = @node_class.from_s('(a (b (R) (S) ) (c (T) (U)) )')
|
192
|
+
t2 = @node_class.from_s('(a (b (R) (S) ) (c (T) (U)) )')
|
193
|
+
s1 = @node_class.from_s('(a (b (R) (S) ) (c (T) ) )')
|
194
|
+
s2 = @node_class.from_s('(a (c (R) (S) ) (b (T) (U) ) )')
|
195
195
|
assert_equal t1, t2, 'Tree equivalence'
|
196
196
|
assert_not_equal t1, s1, 'Tree non-equivalence: different terminals'
|
197
197
|
assert_not_equal t1, s2, 'Tree non-equivalence: reversed non-terminal labels'
|
@@ -199,7 +199,7 @@ module NodeTestMixin
|
|
199
199
|
end
|
200
200
|
|
201
201
|
def test_leaves
|
202
|
-
t = @node_class.
|
202
|
+
t = @node_class.from_s('(a (b c) (d e))')
|
203
203
|
leaves = t.each_depth_first.collect
|
204
204
|
c = leaves[2]
|
205
205
|
e = leaves[4]
|
@@ -229,7 +229,7 @@ class ParentedNodeTest < Test::Unit::TestCase
|
|
229
229
|
end
|
230
230
|
|
231
231
|
def test_ancestor_enumeration
|
232
|
-
t = @node_class.
|
232
|
+
t = @node_class.from_s('(a (b (R) (S) ) (c (T) (U)) )')
|
233
233
|
assert_equal [t], t.each_parent.collect, 'Ancestors from head'
|
234
234
|
u = t.each_depth_first.find {|node| node.label == 'U'}
|
235
235
|
assert_equal ['U', 'c', 'a'], u.each_parent.collect {|node| node.label}, 'Ancestors from leaf'
|
metadata
CHANGED
@@ -3,8 +3,8 @@ rubygems_version: 0.8.11
|
|
3
3
|
specification_version: 1
|
4
4
|
name: treebank
|
5
5
|
version: !ruby/object:Gem::Version
|
6
|
-
version:
|
7
|
-
date:
|
6
|
+
version: 2.0.0
|
7
|
+
date: 2007-01-12 00:00:00 -08:00
|
8
8
|
summary: Treebank implements support for ordered n-ary branching tree structures
|
9
9
|
require_paths:
|
10
10
|
- lib
|