Dict::Lexed - Lexed wrapper


Dict-Lexed documentation Contained in the Dict-Lexed distribution.

Index


Code Index:

NAME

Top

Dict::Lexed - Lexed wrapper

VERSION

Top

Version 0.2.2

DESCRIPTION

Top

This module is a perl wrapper around Lexed, a lexicalizer developed at INRIA (http://www.lionel-clement.net/lexed)

SYNOPSIS

Top

    use Dict::Lexed;

    Dict::Lexed->create_dict($wordlist);

    my $dict = Dict::Lexed->new();

    $dict->check('foo');
    $dict->suggest('foo');

Class methods

Top

Dict::Lexed->create_dict($wordlist, $options, $mode_options)

Creates a dictionnary from $wordlist suitable for use with lexed.

Optional parameters:

$options

general options passed to lexed

$mode_options

specific build options passed to lexed

Constructor

Top

Dict::Lexed->new($options, $mode_options)

Creates and returns a new Dict::Lexed object.

Optional parameters:

$options

general options passed to lexed

$mode_options

specific consultation options passed to lexed

Methods

Top

$dict->check($word)

Check the dictionnary for exact match of word $word. Returns a true value if word is present in the dictionnary, false otherwise.

$dict->suggest($word)

Check the dictionnary for approximate match of word $word. Returns a list of approximated words from the dictionnary, according to parameters passed when creating the object.

$dict->query($word)

Query the dictionnary for word $word. Returns the raw result of the query, as a list of words.

COPYRIGHT AND LICENSE

Top

AUTHOR

Top

Guillaume Rousse <grousse@cpan.org>


Dict-Lexed documentation Contained in the Dict-Lexed distribution.
# $Id: Lexed.pm,v 1.14 2006/08/22 13:09:14 rousse Exp $

package Dict::Lexed;

use IPC::Open2;
use IO::Handle;
use strict;
use warnings;

our $VERSION = '0.2.2';

my $unknown   = "\001";
my $delimiter = "\002";

sub create_dict {
    my ($class, $wordlist, $options, $mode_options) = @_;
    $options ||= "";
    $mode_options ||= "";
    my $command = "lexed $options build $mode_options 2>/dev/null";
    open(LEXED, "| $command") or die "Can't run $command: $!";
    foreach my $word (@{$wordlist}) {
        print LEXED $word . "\t" . $word . "\n";
    }
    close(LEXED);
}

sub new {
    my ($class, $options, $mode_options) = @_;
    my $self = bless {
        _in  => IO::Handle->new(),
        _out => IO::Handle->new()
    }, $class;
    $options ||= "";
    $mode_options ||= "";
    my $command = "lexed $options consult -f '' '$delimiter' '\n' '$unknown' $mode_options 2>/dev/null";
    open2($self->{_out}, $self->{_in}, "$command") or die "Can't run $command: $!";
    return $self;
}

sub DESTROY {
    my ($self) = @_;
    # close external process handles
    $self->{_in}->close() if $self->{_in};
    $self->{_out}->close() if $self->{_out};
}

sub check {
    my ($self, $word) = @_;

    my @query = $self->query($word);
    return (@query) ?
    grep { /^\Q$word\E$/ } @query :
    0;
}

sub suggest {
    my ($self, $word) = @_;

    my @query = $self->query($word);
    return (@query) ?
        grep { ! /^$word$/ } @query :
        ();
}

sub query {
    my ($self, $word) = @_;

    my ($in, $out) = ($self->{_in}, $self->{_out});
    print $in $word . "\n";
    my $line = <$out>;
    chomp $line;

    return $line eq $unknown ?
        () :
        split(/$delimiter/, $line);
}

1;