Lingua-RU-NameParse

 view release on metacpan or  search on metacpan

NameParse.pm  view on Meta::CPAN

package Lingua::RU::NameParse;

use 5.008;
use strict;
use warnings;


our $VERSION = '0.02';


sub new { my $class = shift; 
		  bless {}, $class; }




=item normalize NAME

Given a first name and a patronymic, returns the name and patronymic in the nominative
case.

=cut


sub normalize {
	
	
	
	my ( $self, $testme ) = @_;
	
	use utf8;

	# voodo to set the string's UTF8 flag
	$testme = pack 'U*', unpack( 'U*', $testme ); 
 
	my ( $w1, $w2 ) = split m/\s+/, $testme;
	
	
	##################
	# 	 ACCUSATIVE
	##################
	if (  $w2 =~ /[чк]а$/ ) {
		$w2 =~ s/а$//g;
		$w1 =~ s/а$//g;
		$w1 =~ s/я$/й/g;
	}
	
	elsif ( $w2 =~ /овну\b/ ) {
		$w2 =~ s/у\b/а/;
		$w1 =~ s/ью\b/ья/;
		$w1 =~ s/ию\b/ия/;
	}
	
	################
	# 	 DATIVE
	################
	elsif (  $w2 =~ /не\b/ ) {
		$w2 =~ s/е\b/а/;
		$w1 =~ s/ье\b/ья/;
		$w1 =~ s/е\b/а/;
		$w1 =~ s/ии\b/ия/;
	}
	
	elsif (  $w2 =~ /че\b/ ) {
		$w2 =~ s/е$//;
		$w1 =~ s/ее\b/ей/;  # aleksei
	}
	
	# Константину Левину
	elsif (  $w2 =~ /[нч]у$/ ) {
		$w2 =~ s/у$//;
		$w1 =~ s/у\b//;
		$w1 =~ s/([еи])ю\b/$1й/;
	}
	

	###################
	#   INSTRUMENTAL
	###################
	# Верой Павловною
	elsif (  $w2 =~ /но[юй]$/ ) {

		$w2 =~ s/ою$/а/;
		$w2 =~ s/ой$/а/;
		$w1 =~ s/ой$/а/;
		$w1 =~ s/ею/я/;
		$w1 =~ s/ей/я/;
	}
	

	elsif (  $w2 =~ /ем$/ ) {
		$w2 =~ s/ем\b//;
		$w1 =~ s/ом\b//;
		$w1 =~ s/еем\b/ей/;		
	}
	



( run in 0.915 second using v1.01-cache-2.11-cpan-71847e10f99 )