
Security News
New Website “Is It Really FOSS?” Tracks Transparency in Open Source Distribution Models
A new site reviews software projects to reveal if they’re truly FOSS, making complex licensing and distribution models easy to understand.
= Tree Representation Module
This module supports the creation, search, manipulation, and serialization of tree structures.
Trees are implemented with Treebank::Node objects. Each Node has a writable label that may be any arbitrary object and a list of other child Node objects.
require 'treebank' => true p = Treebank::Node.new('parent') => <Treebank::Node parent []> p.create_child!('child1') => <Treebank::Node child1 []> p.create_child!('child2') => <Treebank::Node child2 []>
Node has a subclass Treebank::ParentedNode that keeps track of the parent of the given node and has methods for iterating up the ancestor tree.
Node objects support breadth- and depth-first iteration. The functions each_depth_first and each_breadth_first yield a node and its descendants in the specified order. The functions depth_first_enumerator and breadth_first_enumerator wrap these functions inside Enumerator[http://www.ruby-doc.org/core/classes/Enumerable/Enumerator.html] objects. See the function documentation for details as to how the enumeration may be controlled.
The default stringification method writes a node and all its children in a bracketed tree format.
puts p (parent (child1 ) (child2 ))
Bracketed tree strings can be used to create Node trees.
t = Treebank::Node.from_s('(parent (child1) (child2))') => <Treebank::Node parent [child1 child2]> puts t (parent (child1 ) (child2 ))
The bracketed tree format is the one used by the {Penn Treebank Project}[http://www.cis.upenn.edu/~treebank] to annotate linguistic structure.
The children of a node can be dereferenced with the array operator using a list of child offsets. For example:
> t = Treebank::Node.from_s("(A (B b) (C (D d) (E e)))")
=> <Treebank::Node A [B C]>
> t[1,0]
=> <Treebank::Node D [d]>
Here the index (1,0) finds the 0th child of the node's 1st child, which is the node (D d).
= History
1-0-0:: First release 1-1-0:: Removed unnecessary fsa dependency from gemspec 2-0-0:: Changed from_s initialization 2-1-0:: Add indented multiline stringification; Add preterminal? 3-0-0:: Add Node.children function. Add child deferencing by index. The each_depth_first and each_breadth_first functions now yield nodes instead of returning private enumerator objects. To get enumerator objects, use depth_first_enumerator and breadth_first_enumerator instead. Likewise, the each_parent function in the ParentedNode class yields nodes, while parent_enumerator returns an enumerator.
= See Also
Lingua::Treebank[http://search.cpan.org/~kahn/Lingua-Treebank/] implements similar functionality in Perl.
= Copyright
Copyright 2006-2008, William Patrick McNeill
This program is distributed under the GNU General Public License.
= Author
W.P. McNeill mailto:billmcn@u.washington.edu
FAQs
Unknown package
We found that treebank demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
A new site reviews software projects to reveal if they’re truly FOSS, making complex licensing and distribution models easy to understand.
Security News
Astral unveils pyx, a Python-native package registry in beta, designed to speed installs, enhance security, and integrate deeply with uv.
Security News
The Latio podcast explores how static and runtime reachability help teams prioritize exploitable vulnerabilities and streamline AppSec workflows.