Text::Tx - Perl interface to Tx by OKANOHARA Daisuke


Text-Tx documentation Contained in the Text-Tx distribution.

Index


Code Index:

NAME

Top

Text::Tx - Perl interface to Tx by OKANOHARA Daisuke

SYNOPSIS

Top

  use Text::Tx; 
  my $td     = Text::Tx->open("words.tx");
  my $newstr = $td->gsub($str, sub{ 
     qq(<a href="http://dictionary.com/browse/$_[0]">$_[0]</a>)
  }); # link'em all!

DESCRIPTION

Top

Tx is a library for a compact trie data structure by OKANOHARA Daisuke. Tx requires 1/4 - 1/10 of the memory usage compared to the previous implementations, and can therefore handle quite a large number of keys (e.g. 1 billion) efficiently.

Suppose words.tx is a pre-built tx by txbuild command which contains foo, bar, and baz,

  $newstr = $td->gsub($str, sub{"<$_[0]>"});

is equivalent to

  my $newstr = $str;
  $newstr = s{ (foo|bar|baz) }{ "<<$1>" }msgex;

Sounds less convenient? But what happens if the alteration contains thousands of words? It takes a whole lot of time and memory just to compile the regexp. Tx and Text::Tx does just that.

REQUIREMENT

Top

Tx 0.04 or above. Available at

http://www-tsujii.is.s.u-tokyo.ac.jp/~hillbig/tx.htm

To install, just

  fetch http://www-tsujii.is.s.u-tokyo.ac.jp/~hillbig/software/tx-0.04.tar.gz
  tar zxvf tx-0.04.tar.gz
  cd tx-0.04
  configure
  make
  sudo make install

EXPORT

None.

SEE ALSO

Top

http://www-tsujii.is.s.u-tokyo.ac.jp/~hillbig/tx.htm

Regexp::Assemble

AUTHOR

Top

Dan Kogai, <dankogai@dan.co.jp>

COPYRIGHT AND LICENSE

Top


Text-Tx documentation Contained in the Text-Tx distribution.

package Text::Tx;
use strict;
use warnings;
use Carp;
our $VERSION = sprintf "%d.%02d", q$Revision: 0.2 $ =~ /(\d+)/g;
our $DEBUG = 0;

require XSLoader;
XSLoader::load('Text::Tx', $VERSION);

sub open{
    my $pkg = shift;
    my $filename = shift;
    my $errfh;
    if (!$DEBUG){
	# temporary close STDERR to suppress messages from tx_tool::tx::read;
	open $errfh, '>&', \*STDERR or die "Can't dup STDERR: $!";
	close STDERR;
    }
    my $dpi = xs_open($filename);
    if (!$DEBUG){
	# and restore STDERR
	open STDERR, '>&', $errfh or die "Can't dup OLDERR: $!";
    }
    carp __PACKAGE__, " cannot open $filename" unless $dpi;
    bless \$dpi, $pkg;
}

sub DESTROY{
    if ($DEBUG){
	no warnings 'once';
	require Data::Dumper;
	local $Data::Dumper::Terse  = 1;
	local $Data::Dumper::Indent = 0;
	warn "DESTROY:", Data::Dumper::Dumper($_[0]);
    }
    xs_free(${$_[0]});
}

sub gsub{
    my $cbstr = $_[2];
    no warnings 'uninitialized';
    my $cb = ref $cbstr ? $cbstr : sub { $cbstr };
    xs_gsub(${$_[0]}, $_[1], $cb);
}


if ($0 eq __FILE__){
    my $tx = __PACKAGE__->open(shift);
    sub say { print @_, "\n" };
    say $tx->gsub("The quick brown fox jumps over the black lazy dog",
		  sub{"<$_[0]>"});
    print STDERR "wow\n"; # make sure STDERR is restored
}

1;
__END__
# Below is stub documentation for your module. You'd better edit it!