# 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](http://search.cpan.org/perldoc?Text::Metaphone), [Text::DoubleMetaphone](http://search.cpan.org/perldoc?Text::DoubleMetaphone), [Text::Soundex](http://search.cpan.org/perldoc?Text::Soundex)
and also implements some other algorithms such as 
[Text::Phonetic::DaitchMokotoff](http://search.cpan.org/perldoc?Text::Phonetic::DaitchMokotoff), [Text::Phonetic::Koeln](http://search.cpan.org/perldoc?Text::Phonetic::Koeln),
[Text::Phonetic::Phonem](http://search.cpan.org/perldoc?Text::Phonetic::Phonem) and [Text::Phonetic::Phonix](http://search.cpan.org/perldoc?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](http://search.cpan.org/perldoc?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-&gt;_do_compare($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 methods:

## _do_encode

 $RESULT = $obj->_do_encode($STRING);

This method does the actual encoding. It should return either a string or
an array reference.

## _do_compare

 $RETURN_STRING = $obj->_do_compare($RESULT1,$RESULT2);
 

If your `_do_encode` method doesn't return a single scalar value you also 
might need to implement a comparison method. It takes two results as returned
by `_do_encode` and returns an integer value between 98 and 0 
(see L<"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](http://search.cpan.org/perldoc?Moose) to declare attributes.

## Helper class methods

- _is_inlist

 Text::Phonetic::_is_inlist($STRING,@LIST);
 OR
 Text::Phonetic::_is_inlist($STRING,$LIST_REF);
 

Returns a true value if $STRING is in the supplied list. Otherwise returns
false.

- _compare_list

 Text::Phonetic::_compare_list($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 _do_encode {
     my ($self,$string) = @_;
     # Do something
     return $phonetic_representation;
 }
 1;

# SEE ALSO

[DBIx::Class::PhoneticSearch](http://search.cpan.org/perldoc?DBIx::Class::PhoneticSearch) (Build phonetic indices via DBIx::Class),
[Text::Phonetic::VideoGame](http://search.cpan.org/perldoc?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.