line |
stmt |
bran |
cond |
sub |
pod |
time |
code |
1
|
|
|
|
|
|
|
package Lingua::RU::NameParse; |
2
|
|
|
|
|
|
|
|
3
|
1
|
|
|
1
|
|
7654
|
use 5.008; |
|
1
|
|
|
|
|
3
|
|
|
1
|
|
|
|
|
40
|
|
4
|
1
|
|
|
1
|
|
6
|
use strict; |
|
1
|
|
|
|
|
2
|
|
|
1
|
|
|
|
|
36
|
|
5
|
1
|
|
|
1
|
|
5
|
use warnings; |
|
1
|
|
|
|
|
6
|
|
|
1
|
|
|
|
|
106
|
|
6
|
|
|
|
|
|
|
|
7
|
|
|
|
|
|
|
|
8
|
|
|
|
|
|
|
our $VERSION = '0.02'; |
9
|
|
|
|
|
|
|
|
10
|
|
|
|
|
|
|
|
11
|
0
|
|
|
0
|
0
|
|
sub new { my $class = shift; |
12
|
0
|
|
|
|
|
|
bless {}, $class; } |
13
|
|
|
|
|
|
|
|
14
|
|
|
|
|
|
|
|
15
|
|
|
|
|
|
|
|
16
|
|
|
|
|
|
|
|
17
|
|
|
|
|
|
|
=item normalize NAME |
18
|
|
|
|
|
|
|
|
19
|
|
|
|
|
|
|
Given a first name and a patronymic, returns the name and patronymic in the nominative |
20
|
|
|
|
|
|
|
case. |
21
|
|
|
|
|
|
|
|
22
|
|
|
|
|
|
|
=cut |
23
|
|
|
|
|
|
|
|
24
|
|
|
|
|
|
|
|
25
|
|
|
|
|
|
|
sub normalize { |
26
|
|
|
|
|
|
|
|
27
|
|
|
|
|
|
|
|
28
|
|
|
|
|
|
|
|
29
|
0
|
|
|
0
|
1
|
|
my ( $self, $testme ) = @_; |
30
|
|
|
|
|
|
|
|
31
|
1
|
|
|
1
|
|
1605
|
use utf8; |
|
1
|
|
|
|
|
13
|
|
|
1
|
|
|
|
|
7
|
|
32
|
|
|
|
|
|
|
|
33
|
|
|
|
|
|
|
# voodo to set the string's UTF8 flag |
34
|
0
|
|
|
|
|
|
$testme = pack 'U*', unpack( 'U*', $testme ); |
35
|
|
|
|
|
|
|
|
36
|
0
|
|
|
|
|
|
my ( $w1, $w2 ) = split m/\s+/, $testme; |
37
|
|
|
|
|
|
|
|
38
|
|
|
|
|
|
|
|
39
|
|
|
|
|
|
|
################## |
40
|
|
|
|
|
|
|
# ACCUSATIVE |
41
|
|
|
|
|
|
|
################## |
42
|
0
|
0
|
|
|
|
|
if ( $w2 =~ /[чк]а$/ ) { |
|
|
0
|
|
|
|
|
|
|
|
0
|
|
|
|
|
|
|
|
0
|
|
|
|
|
|
|
|
0
|
|
|
|
|
|
|
|
0
|
|
|
|
|
|
|
|
0
|
|
|
|
|
|
|
|
0
|
|
|
|
|
|
|
|
0
|
|
|
|
|
|
|
|
0
|
|
|
|
|
|
43
|
0
|
|
|
|
|
|
$w2 =~ s/а$//g; |
44
|
0
|
|
|
|
|
|
$w1 =~ s/а$//g; |
45
|
0
|
|
|
|
|
|
$w1 =~ s/я$/й/g; |
46
|
|
|
|
|
|
|
} |
47
|
|
|
|
|
|
|
|
48
|
|
|
|
|
|
|
elsif ( $w2 =~ /овну\b/ ) { |
49
|
0
|
|
|
|
|
|
$w2 =~ s/у\b/а/; |
50
|
0
|
|
|
|
|
|
$w1 =~ s/ью\b/ья/; |
51
|
0
|
|
|
|
|
|
$w1 =~ s/ию\b/ия/; |
52
|
|
|
|
|
|
|
} |
53
|
|
|
|
|
|
|
|
54
|
|
|
|
|
|
|
################ |
55
|
|
|
|
|
|
|
# DATIVE |
56
|
|
|
|
|
|
|
################ |
57
|
|
|
|
|
|
|
elsif ( $w2 =~ /не\b/ ) { |
58
|
0
|
|
|
|
|
|
$w2 =~ s/е\b/а/; |
59
|
0
|
|
|
|
|
|
$w1 =~ s/ье\b/ья/; |
60
|
0
|
|
|
|
|
|
$w1 =~ s/е\b/а/; |
61
|
0
|
|
|
|
|
|
$w1 =~ s/ии\b/ия/; |
62
|
|
|
|
|
|
|
} |
63
|
|
|
|
|
|
|
|
64
|
|
|
|
|
|
|
elsif ( $w2 =~ /че\b/ ) { |
65
|
0
|
|
|
|
|
|
$w2 =~ s/е$//; |
66
|
0
|
|
|
|
|
|
$w1 =~ s/ее\b/ей/; # aleksei |
67
|
|
|
|
|
|
|
} |
68
|
|
|
|
|
|
|
|
69
|
|
|
|
|
|
|
# Константину Левину |
70
|
|
|
|
|
|
|
elsif ( $w2 =~ /[нч]у$/ ) { |
71
|
0
|
|
|
|
|
|
$w2 =~ s/у$//; |
72
|
0
|
|
|
|
|
|
$w1 =~ s/у\b//; |
73
|
0
|
|
|
|
|
|
$w1 =~ s/([еи])ю\b/$1й/; |
74
|
|
|
|
|
|
|
} |
75
|
|
|
|
|
|
|
|
76
|
|
|
|
|
|
|
|
77
|
|
|
|
|
|
|
################### |
78
|
|
|
|
|
|
|
# INSTRUMENTAL |
79
|
|
|
|
|
|
|
################### |
80
|
|
|
|
|
|
|
# Верой Павловною |
81
|
|
|
|
|
|
|
elsif ( $w2 =~ /но[юй]$/ ) { |
82
|
|
|
|
|
|
|
|
83
|
0
|
|
|
|
|
|
$w2 =~ s/ою$/а/; |
84
|
0
|
|
|
|
|
|
$w2 =~ s/ой$/а/; |
85
|
0
|
|
|
|
|
|
$w1 =~ s/ой$/а/; |
86
|
0
|
|
|
|
|
|
$w1 =~ s/ею/я/; |
87
|
0
|
|
|
|
|
|
$w1 =~ s/ей/я/; |
88
|
|
|
|
|
|
|
} |
89
|
|
|
|
|
|
|
|
90
|
|
|
|
|
|
|
|
91
|
|
|
|
|
|
|
elsif ( $w2 =~ /ем$/ ) { |
92
|
0
|
|
|
|
|
|
$w2 =~ s/ем\b//; |
93
|
0
|
|
|
|
|
|
$w1 =~ s/ом\b//; |
94
|
0
|
|
|
|
|
|
$w1 =~ s/еем\b/ей/; |
95
|
|
|
|
|
|
|
} |
96
|
|
|
|
|
|
|
|
97
|
|
|
|
|
|
|
elsif ( $w2 =~ /ым\b/ ) { |
98
|
0
|
|
|
|
|
|
$w2 =~ s/ым/ый/; |
99
|
|
|
|
|
|
|
} |
100
|
|
|
|
|
|
|
|
101
|
|
|
|
|
|
|
################### |
102
|
|
|
|
|
|
|
# GENITIVE |
103
|
|
|
|
|
|
|
################### |
104
|
|
|
|
|
|
|
elsif ( $w2 =~ /ны$/ ) { |
105
|
0
|
|
|
|
|
|
$w2 =~ s/ы$/а/g; |
106
|
0
|
|
|
|
|
|
$w1 =~ s/ы$/а/g; |
107
|
0
|
|
|
|
|
|
$w1 =~ s/ьи$/ья/; |
108
|
|
|
|
|
|
|
} |
109
|
|
|
|
|
|
|
|
110
|
|
|
|
|
|
|
elsif ( $w2 =~ /ого$/ ) { |
111
|
0
|
|
|
|
|
|
$w2 =~ s/ого\b/ий/g; |
112
|
0
|
|
|
|
|
|
$w1 =~ s/а$//g; |
113
|
|
|
|
|
|
|
} |
114
|
|
|
|
|
|
|
|
115
|
0
|
|
|
|
|
|
$w1 =~ s/вл\b/вел/; # pavel |
116
|
|
|
|
|
|
|
|
117
|
0
|
|
|
|
|
|
return "$w1 $w2"; |
118
|
|
|
|
|
|
|
} |
119
|
|
|
|
|
|
|
|
120
|
|
|
|
|
|
|
=item transliterate STRING |
121
|
|
|
|
|
|
|
|
122
|
|
|
|
|
|
|
Transliterates the string from Cyrillic to Latin. |
123
|
|
|
|
|
|
|
|
124
|
|
|
|
|
|
|
=cut |
125
|
|
|
|
|
|
|
|
126
|
|
|
|
|
|
|
|
127
|
|
|
|
|
|
|
sub transliterate { |
128
|
0
|
|
|
0
|
1
|
|
my ( $self, $in ) = @_; |
129
|
|
|
|
|
|
|
|
130
|
|
|
|
|
|
|
|
131
|
0
|
|
|
|
|
|
for ( $in ) { |
132
|
0
|
|
|
|
|
|
s/ц/ts/gi; |
133
|
0
|
|
|
|
|
|
s/ш/sh/gi; |
134
|
0
|
|
|
|
|
|
s/щ/shch/gi; |
135
|
0
|
|
|
|
|
|
s/ж/zh/gi; |
136
|
0
|
|
|
|
|
|
s/я/ya/gi; |
137
|
0
|
|
|
|
|
|
s/я\b/ya/gi; |
138
|
0
|
|
|
|
|
|
s/ч/ch/g; |
139
|
0
|
|
|
|
|
|
s/ч\b/ch/g; |
140
|
0
|
|
|
|
|
|
s/ю/yu/gi; |
141
|
|
|
|
|
|
|
|
142
|
0
|
|
|
|
|
|
tr/йукнгзхфывапролдэсмитеьбБЙУКЕНГЗХФЫВАПРОЛДЭСМИТ/jukngzhfyvaproldesmite'bBJUKENGZHFYVAPROLDESMIT/; |
143
|
|
|
|
|
|
|
} |
144
|
|
|
|
|
|
|
|
145
|
|
|
|
|
|
|
|
146
|
0
|
|
|
|
|
|
return $in; |
147
|
|
|
|
|
|
|
|
148
|
|
|
|
|
|
|
} |
149
|
|
|
|
|
|
|
|
150
|
|
|
|
|
|
|
1; |
151
|
|
|
|
|
|
|
__END__ |