NAME
Text::Phonetic - A base class for phonetic algorithms
SYNOPSIS
use Text::Phonetic::Metaphone;
my $phonetic = Text::Phonetic::Metaphone->new();
$encoded_string = $phonetic->encode($string);
@encoded_list = $phonetic->encode(@list);
my $same = $phonetic->compare($string1,$string2);
Or
use Text::Phonetic;
my $phonetic = Text::Phonetic->load( algorithm => 'Phonix' );
$encoded_string = $phonetic->encode($string);
This module provides an easy and convinient way to encode names with various phonetic algorithms. It acts as a wrapper arround other phonetic algorithm modules like Text::Metaphone, Text::DoubleMetaphone, Text::Soundex and also implements some other algorithms such as Text::Phonetic::DaitchMokotoff, Text::Phonetic::Koeln, Text::Phonetic::Phonem and Text::Phonetic::Phonix.
The module can easily be subclassed.
DESCRIPTION
Constructors
new
$obj = Text::Phonetic::SUBCLASS->new(%PARAMETERS)
You can pass arbitrary attributes to the constructor. The only global attribute is "unidecode" which defaults to 1 if not set. This attribute controlls if non-latin characters should be transliterated to A-Z (see also Text::Unidecode).
Additional attributes may be defined by the various implementation classes.
load
$obj = Text::Phonetic->new(algorithm => $algorithm, %PARAMETERS)
Alternative constructor which also loads the requested algorithm subclass.
Methods
encode
$RETURN_STRING = $obj->encode($STRING);
OR
@RETURN_LIST = $obj->encode(@LIST);
OR
$RETURN_LIST_REF = $obj->encode(@LIST);
Encodes the given string or list of strings. Returns a single value, array or array reference depending on the caller context and parameters.
Returns undef on an empty/undefined/whitespace only string.
compare
$RETURN_CODE = $obj->compare($STRING1,$STRING2);
The return code is an integer between 100 and 0 indicating the likelihood that the to results are the same. 100 means that the strings are completely identical. 99 means that the strings match after all non-latin characters have been transliterated. Values in between 98 and 1 usually mean that the given strings match. 0 means that the used alogorithm couldn't match the two strings at all. "compare" is a shortcut to the "$obj->docompare($CODE1,$CODE2)" method.
Class Methods
available_algorithms
my @available = Text::Phonetic->available_algorithms;
Returns a list of all available/installed algorithms
SUBLCASSING
You can easily subclass Text::Phonetic and add your own phonetic algorithm. All subclasses must use Text::Phonetic as their base class, reside in the Text::Phonetic namespace, and implement the following
doencode
$RESULT = $obj->doencode($STRING);
This method does the actual encoding. It should return either a string or an array reference.
docompare
$RETURN_STRING = $obj->docompare($RESULT1,$RESULT2);
If your "doencode" method doesn't return a single scalar value you also might need to implement a comparison method. It takes two results as returned by "doencode" and returns an integer value between 98 and 0 (see "compare").
predicates
Third party modules can be marked as predicates by adding the
"predicates" method whick should return al list of package names. All
predicates will be loaded if installed. If missing an exception will be
thrown.
Object structure
Text::Phonetic uses Moose to declare attributes.
Helper class methods
isinlist
Text::Phonetic::isinlist($STRING,@LIST);
OR
Text::Phonetic::isinlist($STRING,$LIST_REF);
Returns a true value if $STRING is in the supplied list. Otherwise
returns false.
comparelist
Text::Phonetic::comparelist($LIST1_REF,$LIST2_REF);
Compares the two arrays and returns true if at least one element is
equal (ignoring the position) in both lists.
Example class
package Text::Phonetic::MyAlgorithm;
use Moose;
extends qw(Text::Phonetic);
has someattribute => (
is => 'rw',
isa => 'Str',
);
__PACKAGE__->meta->make_immutable;
sub doencode {
my ($self,$string) = @;
# Do something
return $phoneticrepresentation;
}
1;
SEE ALSO
DBIx::Class::PhoneticSearch (Build phonetic indices via DBIx::Class), Text::Phonetic::VideoGame (Phonetic encoding for video game titles)
SUPPORT
Please report any bugs or feature requests to "text-phonetic@rt.cpan.org", or through the web interface at <http://rt.cpan.org/Public/Bug/Report.html?Queue=Text::Phonetic>. I will be notified, and then you'll automatically be notified of progress on your report as I make changes.
AUTHOR
Maroš Kollár
CPAN ID: MAROS
maros [at] k-1.com
http://www.k-1.com
COPYRIGHT
Text::Phonetic is Copyright (c) 2006,2007 Maroš. Kollár.
This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
The full text of the license can be found in the LICENSE file included with this module.