line |
stmt |
bran |
cond |
sub |
pod |
time |
code |
1
|
|
|
|
|
|
|
package Text::Phonetic::VideoGame; |
2
|
3
|
|
|
3
|
|
3401
|
use warnings; |
|
3
|
|
|
|
|
5
|
|
|
3
|
|
|
|
|
91
|
|
3
|
3
|
|
|
3
|
|
15
|
use strict; |
|
3
|
|
|
|
|
6
|
|
|
3
|
|
|
|
|
108
|
|
4
|
3
|
|
|
3
|
|
19
|
use base 'Text::Phonetic'; |
|
3
|
|
|
|
|
7
|
|
|
3
|
|
|
|
|
3743
|
|
5
|
|
|
|
|
|
|
|
6
|
3
|
|
|
3
|
|
12240
|
use String::Nysiis; |
|
0
|
|
|
|
|
|
|
|
0
|
|
|
|
|
|
|
7
|
|
|
|
|
|
|
use Roman (); |
8
|
|
|
|
|
|
|
use Lingua::EN::Inflect::Number qw( to_S ); |
9
|
|
|
|
|
|
|
use List::MoreUtils qw( uniq ); |
10
|
|
|
|
|
|
|
|
11
|
|
|
|
|
|
|
our $VERSION = '0.05'; |
12
|
|
|
|
|
|
|
my %ordinal = ( |
13
|
|
|
|
|
|
|
'1st' => 'first', |
14
|
|
|
|
|
|
|
'2nd' => 'second', |
15
|
|
|
|
|
|
|
'3rd' => 'third', |
16
|
|
|
|
|
|
|
'4th' => 'fourth', |
17
|
|
|
|
|
|
|
'5th' => 'fifth', |
18
|
|
|
|
|
|
|
'6th' => 'sixth', |
19
|
|
|
|
|
|
|
'7th' => 'seventh', |
20
|
|
|
|
|
|
|
'8th' => 'eighth', |
21
|
|
|
|
|
|
|
'9th' => 'ninth', |
22
|
|
|
|
|
|
|
); |
23
|
|
|
|
|
|
|
my %abbreviation = ( |
24
|
|
|
|
|
|
|
breathe => 'breath', # NYSIIS handles this case poorly |
25
|
|
|
|
|
|
|
bros => 'brothers', |
26
|
|
|
|
|
|
|
csi => 'crime scene investigation', |
27
|
|
|
|
|
|
|
ddr => 'dance dance revolution', |
28
|
|
|
|
|
|
|
doa => 'dead or alive', |
29
|
|
|
|
|
|
|
dora => 'dora the explorer', |
30
|
|
|
|
|
|
|
ff => 'final fantasy', |
31
|
|
|
|
|
|
|
gta => 'grand theft auto', |
32
|
|
|
|
|
|
|
iss => 'international superstar soccer', |
33
|
|
|
|
|
|
|
kotr => 'knights of the old republic', |
34
|
|
|
|
|
|
|
le => 'limited edition', |
35
|
|
|
|
|
|
|
mlb => 'major league baseball', |
36
|
|
|
|
|
|
|
motocross => 'motorcross', |
37
|
|
|
|
|
|
|
mr => 'mister', |
38
|
|
|
|
|
|
|
nam => 'vietnam', |
39
|
|
|
|
|
|
|
ny => 'new york', |
40
|
|
|
|
|
|
|
pbr => 'pro bull riders', |
41
|
|
|
|
|
|
|
pgr => 'project gotham racing', |
42
|
|
|
|
|
|
|
rabbids => 'raving rabbids', |
43
|
|
|
|
|
|
|
spongebob => 'spongebob squarepants', |
44
|
|
|
|
|
|
|
spyro => 'legend spyro', |
45
|
|
|
|
|
|
|
t2 => 'terminator 2', |
46
|
|
|
|
|
|
|
tmnt => 'teenage mutant ninja turtles', |
47
|
|
|
|
|
|
|
w => 'with', # w/ before removing slashes becomes w |
48
|
|
|
|
|
|
|
wwf => 'wwe', |
49
|
|
|
|
|
|
|
xtreme => 'extreme', |
50
|
|
|
|
|
|
|
zelda => 'the legend of zelda', |
51
|
|
|
|
|
|
|
|
52
|
|
|
|
|
|
|
|
53
|
|
|
|
|
|
|
# easier than using a words to numbers module |
54
|
|
|
|
|
|
|
eighteen => 18, |
55
|
|
|
|
|
|
|
|
56
|
|
|
|
|
|
|
# easier than using split_compound_word |
57
|
|
|
|
|
|
|
bustamove => 'bust a move', |
58
|
|
|
|
|
|
|
davinci => 'da vinci', |
59
|
|
|
|
|
|
|
fzero => 'f zero', |
60
|
|
|
|
|
|
|
motogp => 'moto gp', |
61
|
|
|
|
|
|
|
mysims => 'my sims', |
62
|
|
|
|
|
|
|
proam => 'pro am', |
63
|
|
|
|
|
|
|
rtype => 'r type', |
64
|
|
|
|
|
|
|
xmen => 'x men', |
65
|
|
|
|
|
|
|
); |
66
|
|
|
|
|
|
|
my $publishers = join '|', ( |
67
|
|
|
|
|
|
|
'disney', |
68
|
|
|
|
|
|
|
'disneys', |
69
|
|
|
|
|
|
|
'ea', |
70
|
|
|
|
|
|
|
'hasbro', |
71
|
|
|
|
|
|
|
'james camerons', |
72
|
|
|
|
|
|
|
'sega', |
73
|
|
|
|
|
|
|
'tom clancys', |
74
|
|
|
|
|
|
|
'mobile suit', # not a publisher. commonly omitted "gundam" prefix |
75
|
|
|
|
|
|
|
); |
76
|
|
|
|
|
|
|
|
77
|
|
|
|
|
|
|
sub _do_encode { |
78
|
|
|
|
|
|
|
my $self = shift; |
79
|
|
|
|
|
|
|
my $string = lc shift; |
80
|
|
|
|
|
|
|
my $original = $string; |
81
|
|
|
|
|
|
|
|
82
|
|
|
|
|
|
|
$string =~ s{[-/:]}{ }g; # dashes, slashes are like spaces |
83
|
|
|
|
|
|
|
$string =~ s/[&.'",]//g; # most punctuation can be ignored |
84
|
|
|
|
|
|
|
|
85
|
|
|
|
|
|
|
# remove useless publisher names (usually found at the front) |
86
|
|
|
|
|
|
|
$string =~ s/^(?:$publishers)\b//; |
87
|
|
|
|
|
|
|
|
88
|
|
|
|
|
|
|
# expand some common abbreviations |
89
|
|
|
|
|
|
|
my $abbr = join '|', keys(%abbreviation); |
90
|
|
|
|
|
|
|
$string =~ s/\b($abbr)\b/$abbreviation{$1}/ge; |
91
|
|
|
|
|
|
|
|
92
|
|
|
|
|
|
|
$string =~ s/sk8/skate/g; |
93
|
|
|
|
|
|
|
$string =~ s/\b([1-9])(st|nd|rd|th)\b/$ordinal{"$1$2"}/ge; |
94
|
|
|
|
|
|
|
$string =~ s/\bv(\d)\b/volume $1/g; |
95
|
|
|
|
|
|
|
$string =~ s/\b(\d+)gb\b/$1 gb/g; # 40GB -> 40 GB |
96
|
|
|
|
|
|
|
$string =~ s/\b2k([0-9])\b/200$1/ig; # 2K4 -> 2004 |
97
|
|
|
|
|
|
|
$string =~ s/\b(\d+)k\b/${1}000/g; # 40K -> 40000 |
98
|
|
|
|
|
|
|
$string =~ s/(\D)(\d)/$1 $2/g; # "xbox360", "kombat4", etc |
99
|
|
|
|
|
|
|
|
100
|
|
|
|
|
|
|
# remove some noise words |
101
|
|
|
|
|
|
|
$string =~ s/\b(videogame|video game|as|ds|3d)\b//g; |
102
|
|
|
|
|
|
|
$string =~ s/\b(n|a|an|the|and|of|vs|at|in|for|if|game only|with)\b//g; |
103
|
|
|
|
|
|
|
$string =~ s/\b(edition|volume|vol|versus|game|games|used)\b//g; |
104
|
|
|
|
|
|
|
|
105
|
|
|
|
|
|
|
$string =~ s/\s+/ /g; |
106
|
|
|
|
|
|
|
$string =~ s/^\s+|\s+$//g; # remove leading/trailing spaces |
107
|
|
|
|
|
|
|
|
108
|
|
|
|
|
|
|
# do some in-place substitutions |
109
|
|
|
|
|
|
|
my @words = map { $self->split_compound_word($_) } split / /, $string; |
110
|
|
|
|
|
|
|
for my $word (@words) { |
111
|
|
|
|
|
|
|
$word = $self->word2num($word); |
112
|
|
|
|
|
|
|
next if $word eq 'mix'; # looks Roman but is rarely meant that way |
113
|
|
|
|
|
|
|
$word = Roman::arabic($word) if Roman::isroman($word); |
114
|
|
|
|
|
|
|
} |
115
|
|
|
|
|
|
|
|
116
|
|
|
|
|
|
|
my @encodings = map { /^\d+$/ ? $_ : String::Nysiis::nysiis($_) } @words; |
117
|
|
|
|
|
|
|
$string = join ' ', @encodings; |
118
|
|
|
|
|
|
|
|
119
|
|
|
|
|
|
|
# normalize numbers that might be years |
120
|
|
|
|
|
|
|
$string =~ s/\b(7|8|9)([0-9])\b/19$1$2/g; # 97 -> 1997 |
121
|
|
|
|
|
|
|
$string =~ s/\b(0|1|2)([0-9])\b/20$1$2/g; # 03 -> 2003 |
122
|
|
|
|
|
|
|
|
123
|
|
|
|
|
|
|
# remove redundant words |
124
|
|
|
|
|
|
|
$string =~ s/\b(\d+)\s\1\b/$1/g; # 2 2 -> 2 |
125
|
|
|
|
|
|
|
for ($string) { |
126
|
|
|
|
|
|
|
s/\bNANTAND\b// if $original =~ /\bds\b/; # Nintendo <- DS |
127
|
|
|
|
|
|
|
s/\bNANTAND\b// if $original =~ /\bwii\b/; # Nintendo <- Wii |
128
|
|
|
|
|
|
|
s/\bSACAR\b// if $original =~ /\bfifa\b/; # soccer <- FIFA |
129
|
|
|
|
|
|
|
s/\bBASCATBAL\b// if $original =~ /\bnba\b/; # basketball <- NBA |
130
|
|
|
|
|
|
|
s/\bFAT BAL\b// if $original =~ /\bnfl\b/; # football <- NFL |
131
|
|
|
|
|
|
|
s/\bHACY\b// if $original =~ /\bnhl\b/; # hockey <- NHL |
132
|
|
|
|
|
|
|
} |
133
|
|
|
|
|
|
|
for ($string) { |
134
|
|
|
|
|
|
|
s/\bNFL\b// if /\bMAD DAN\b/; # NFL <- Madden |
135
|
|
|
|
|
|
|
s/\bGALF\b// if /\bTAGAR WAD\b/; # golf <- Tiger Woods |
136
|
|
|
|
|
|
|
s/\bFAT BAL\b// if /\bBLAT\b/; # football <- blitz |
137
|
|
|
|
|
|
|
s/\bHAGAG\b// if /\bSANAC\b/; # hedgehog <- Sonic |
138
|
|
|
|
|
|
|
s/\bCABAL\b// if /\bDANGAR HAN\b/; # Cabela's <- Dangerous Hunts |
139
|
|
|
|
|
|
|
s/\bBNX\b// if /\bDAV MAR\b/; # BMX <- Dave Mirra |
140
|
|
|
|
|
|
|
s/\bW\b// if /\bRASTL MAN\b/; # WWE <- Wrestlemania |
141
|
|
|
|
|
|
|
s/\bS\b// if /\bRAN STANPY\b/; # Show <- Ren & Stimpy |
142
|
|
|
|
|
|
|
s/\bSPANG BAB\b// if /\bSGAR PAN\b/; # Sponge Bob <- Square Pants |
143
|
|
|
|
|
|
|
s/\bRASC RANGAR\b// if /\bCAP DAL\b/; # Rescue Rangers <- Chip & Dale |
144
|
|
|
|
|
|
|
s/\bLAR CRAFT\b// if /\bTANB RADAR\b/; # Lara Croft <- Tomb Raider |
145
|
|
|
|
|
|
|
} |
146
|
|
|
|
|
|
|
|
147
|
|
|
|
|
|
|
$string =~ s/X\b/C/g; # "TANX" -> "TANC" etc |
148
|
|
|
|
|
|
|
$string =~ s/\bCRASN\b/CRASAN/g; |
149
|
|
|
|
|
|
|
$string =~ s/\s+/ /g; |
150
|
|
|
|
|
|
|
$string =~ s/^\s+|\s+$//g; # remove leading/trailing spaces |
151
|
|
|
|
|
|
|
|
152
|
|
|
|
|
|
|
# remove duplicates and sort |
153
|
|
|
|
|
|
|
@words = uniq sort split /\s+/, $string; |
154
|
|
|
|
|
|
|
return join ' ', @words; |
155
|
|
|
|
|
|
|
} |
156
|
|
|
|
|
|
|
|
157
|
|
|
|
|
|
|
# returns an arabic numeral representation of number word |
158
|
|
|
|
|
|
|
# ("five" -> 5). If the word is not a number word, returns the word. |
159
|
|
|
|
|
|
|
sub word2num { |
160
|
|
|
|
|
|
|
my ($self, $word) = @_; |
161
|
|
|
|
|
|
|
my %words = ( |
162
|
|
|
|
|
|
|
zero => 0, |
163
|
|
|
|
|
|
|
one => 1, |
164
|
|
|
|
|
|
|
two => 2, |
165
|
|
|
|
|
|
|
three => 3, |
166
|
|
|
|
|
|
|
four => 4, |
167
|
|
|
|
|
|
|
five => 5, |
168
|
|
|
|
|
|
|
six => 6, |
169
|
|
|
|
|
|
|
seven => 7, |
170
|
|
|
|
|
|
|
eight => 8, |
171
|
|
|
|
|
|
|
nine => 9, |
172
|
|
|
|
|
|
|
); |
173
|
|
|
|
|
|
|
return $words{$word} if exists $words{$word}; |
174
|
|
|
|
|
|
|
return $word; |
175
|
|
|
|
|
|
|
} |
176
|
|
|
|
|
|
|
|
177
|
|
|
|
|
|
|
sub split_compound_word { |
178
|
|
|
|
|
|
|
my ( $self, $word ) = @_; |
179
|
|
|
|
|
|
|
|
180
|
|
|
|
|
|
|
# don't produce subwords less than 3 characters |
181
|
|
|
|
|
|
|
my $length = length $word; |
182
|
|
|
|
|
|
|
return $word if $length < 6; |
183
|
|
|
|
|
|
|
|
184
|
|
|
|
|
|
|
# try to split the word into smaller two smaller words |
185
|
|
|
|
|
|
|
for my $i ( 3 .. $length-3 ) { |
186
|
|
|
|
|
|
|
my $front = substr $word, 0, $i; |
187
|
|
|
|
|
|
|
my $back = substr $word, $i; |
188
|
|
|
|
|
|
|
return ( $front, $back ) |
189
|
|
|
|
|
|
|
if $self->is_word($front) |
190
|
|
|
|
|
|
|
and $self->is_word($back); |
191
|
|
|
|
|
|
|
return ( $front, $back ) |
192
|
|
|
|
|
|
|
if $self->is_word( to_S $front ) |
193
|
|
|
|
|
|
|
and $self->is_word( to_S $back ); |
194
|
|
|
|
|
|
|
} |
195
|
|
|
|
|
|
|
|
196
|
|
|
|
|
|
|
return $word; |
197
|
|
|
|
|
|
|
} |
198
|
|
|
|
|
|
|
|
199
|
|
|
|
|
|
|
# a hand picked dictionary of short nouns and adjectives |
200
|
|
|
|
|
|
|
my %dictionary = map { $_ => 1 } qw( |
201
|
|
|
|
|
|
|
acid |
202
|
|
|
|
|
|
|
acme |
203
|
|
|
|
|
|
|
acne |
204
|
|
|
|
|
|
|
acre |
205
|
|
|
|
|
|
|
act |
206
|
|
|
|
|
|
|
aeon |
207
|
|
|
|
|
|
|
aero |
208
|
|
|
|
|
|
|
after |
209
|
|
|
|
|
|
|
age |
210
|
|
|
|
|
|
|
aid |
211
|
|
|
|
|
|
|
air |
212
|
|
|
|
|
|
|
all |
213
|
|
|
|
|
|
|
alpha |
214
|
|
|
|
|
|
|
ammo |
215
|
|
|
|
|
|
|
anal |
216
|
|
|
|
|
|
|
andreas |
217
|
|
|
|
|
|
|
anti |
218
|
|
|
|
|
|
|
apex |
219
|
|
|
|
|
|
|
aqua |
220
|
|
|
|
|
|
|
arch |
221
|
|
|
|
|
|
|
area |
222
|
|
|
|
|
|
|
arm |
223
|
|
|
|
|
|
|
arms |
224
|
|
|
|
|
|
|
army |
225
|
|
|
|
|
|
|
ash |
226
|
|
|
|
|
|
|
assault |
227
|
|
|
|
|
|
|
astro |
228
|
|
|
|
|
|
|
atom |
229
|
|
|
|
|
|
|
aunt |
230
|
|
|
|
|
|
|
aura |
231
|
|
|
|
|
|
|
axe |
232
|
|
|
|
|
|
|
axes |
233
|
|
|
|
|
|
|
axle |
234
|
|
|
|
|
|
|
axon |
235
|
|
|
|
|
|
|
baby |
236
|
|
|
|
|
|
|
back |
237
|
|
|
|
|
|
|
bad |
238
|
|
|
|
|
|
|
bag |
239
|
|
|
|
|
|
|
bail |
240
|
|
|
|
|
|
|
bain |
241
|
|
|
|
|
|
|
bait |
242
|
|
|
|
|
|
|
bald |
243
|
|
|
|
|
|
|
bale |
244
|
|
|
|
|
|
|
ball |
245
|
|
|
|
|
|
|
band |
246
|
|
|
|
|
|
|
bane |
247
|
|
|
|
|
|
|
bang |
248
|
|
|
|
|
|
|
bank |
249
|
|
|
|
|
|
|
bar |
250
|
|
|
|
|
|
|
barb |
251
|
|
|
|
|
|
|
bark |
252
|
|
|
|
|
|
|
barn |
253
|
|
|
|
|
|
|
baru |
254
|
|
|
|
|
|
|
base |
255
|
|
|
|
|
|
|
bass |
256
|
|
|
|
|
|
|
bath |
257
|
|
|
|
|
|
|
bats |
258
|
|
|
|
|
|
|
battle |
259
|
|
|
|
|
|
|
bead |
260
|
|
|
|
|
|
|
beam |
261
|
|
|
|
|
|
|
bean |
262
|
|
|
|
|
|
|
bear |
263
|
|
|
|
|
|
|
beat |
264
|
|
|
|
|
|
|
beef |
265
|
|
|
|
|
|
|
beer |
266
|
|
|
|
|
|
|
beet |
267
|
|
|
|
|
|
|
bell |
268
|
|
|
|
|
|
|
belt |
269
|
|
|
|
|
|
|
best |
270
|
|
|
|
|
|
|
big |
271
|
|
|
|
|
|
|
bike |
272
|
|
|
|
|
|
|
bird |
273
|
|
|
|
|
|
|
bite |
274
|
|
|
|
|
|
|
blade |
275
|
|
|
|
|
|
|
blast |
276
|
|
|
|
|
|
|
blind |
277
|
|
|
|
|
|
|
blob |
278
|
|
|
|
|
|
|
blood |
279
|
|
|
|
|
|
|
blue |
280
|
|
|
|
|
|
|
boar |
281
|
|
|
|
|
|
|
boat |
282
|
|
|
|
|
|
|
bob |
283
|
|
|
|
|
|
|
body |
284
|
|
|
|
|
|
|
bomb |
285
|
|
|
|
|
|
|
bomber |
286
|
|
|
|
|
|
|
bond |
287
|
|
|
|
|
|
|
bone |
288
|
|
|
|
|
|
|
book |
289
|
|
|
|
|
|
|
boom |
290
|
|
|
|
|
|
|
boot |
291
|
|
|
|
|
|
|
boss |
292
|
|
|
|
|
|
|
bot |
293
|
|
|
|
|
|
|
bound |
294
|
|
|
|
|
|
|
bow |
295
|
|
|
|
|
|
|
boy |
296
|
|
|
|
|
|
|
brain |
297
|
|
|
|
|
|
|
brat |
298
|
|
|
|
|
|
|
bread |
299
|
|
|
|
|
|
|
break |
300
|
|
|
|
|
|
|
brew |
301
|
|
|
|
|
|
|
buck |
302
|
|
|
|
|
|
|
bud |
303
|
|
|
|
|
|
|
bull |
304
|
|
|
|
|
|
|
bump |
305
|
|
|
|
|
|
|
bunk |
306
|
|
|
|
|
|
|
burger |
307
|
|
|
|
|
|
|
burner |
308
|
|
|
|
|
|
|
bush |
309
|
|
|
|
|
|
|
bust |
310
|
|
|
|
|
|
|
butt |
311
|
|
|
|
|
|
|
cage |
312
|
|
|
|
|
|
|
cake |
313
|
|
|
|
|
|
|
caliber |
314
|
|
|
|
|
|
|
calibur |
315
|
|
|
|
|
|
|
call |
316
|
|
|
|
|
|
|
camp |
317
|
|
|
|
|
|
|
cane |
318
|
|
|
|
|
|
|
car |
319
|
|
|
|
|
|
|
card |
320
|
|
|
|
|
|
|
cart |
321
|
|
|
|
|
|
|
cat |
322
|
|
|
|
|
|
|
chip |
323
|
|
|
|
|
|
|
chrome |
324
|
|
|
|
|
|
|
chum |
325
|
|
|
|
|
|
|
city |
326
|
|
|
|
|
|
|
clay |
327
|
|
|
|
|
|
|
clod |
328
|
|
|
|
|
|
|
clown |
329
|
|
|
|
|
|
|
club |
330
|
|
|
|
|
|
|
coal |
331
|
|
|
|
|
|
|
coaster |
332
|
|
|
|
|
|
|
coat |
333
|
|
|
|
|
|
|
cog |
334
|
|
|
|
|
|
|
coke |
335
|
|
|
|
|
|
|
comb |
336
|
|
|
|
|
|
|
cook |
337
|
|
|
|
|
|
|
corn |
338
|
|
|
|
|
|
|
corp |
339
|
|
|
|
|
|
|
corps |
340
|
|
|
|
|
|
|
craft |
341
|
|
|
|
|
|
|
crew |
342
|
|
|
|
|
|
|
crib |
343
|
|
|
|
|
|
|
crop |
344
|
|
|
|
|
|
|
cross |
345
|
|
|
|
|
|
|
crow |
346
|
|
|
|
|
|
|
cry |
347
|
|
|
|
|
|
|
cube |
348
|
|
|
|
|
|
|
cup |
349
|
|
|
|
|
|
|
cyan |
350
|
|
|
|
|
|
|
dam |
351
|
|
|
|
|
|
|
dart |
352
|
|
|
|
|
|
|
dash |
353
|
|
|
|
|
|
|
data |
354
|
|
|
|
|
|
|
date |
355
|
|
|
|
|
|
|
dawn |
356
|
|
|
|
|
|
|
day |
357
|
|
|
|
|
|
|
days |
358
|
|
|
|
|
|
|
dead |
359
|
|
|
|
|
|
|
deaf |
360
|
|
|
|
|
|
|
debt |
361
|
|
|
|
|
|
|
deck |
362
|
|
|
|
|
|
|
den |
363
|
|
|
|
|
|
|
dent |
364
|
|
|
|
|
|
|
diet |
365
|
|
|
|
|
|
|
dime |
366
|
|
|
|
|
|
|
dino |
367
|
|
|
|
|
|
|
dock |
368
|
|
|
|
|
|
|
dog |
369
|
|
|
|
|
|
|
dogs |
370
|
|
|
|
|
|
|
donkey |
371
|
|
|
|
|
|
|
doo |
372
|
|
|
|
|
|
|
dope |
373
|
|
|
|
|
|
|
dorm |
374
|
|
|
|
|
|
|
double |
375
|
|
|
|
|
|
|
down |
376
|
|
|
|
|
|
|
drag |
377
|
|
|
|
|
|
|
dragon |
378
|
|
|
|
|
|
|
dream |
379
|
|
|
|
|
|
|
drip |
380
|
|
|
|
|
|
|
drop |
381
|
|
|
|
|
|
|
dry |
382
|
|
|
|
|
|
|
dual |
383
|
|
|
|
|
|
|
duck |
384
|
|
|
|
|
|
|
duct |
385
|
|
|
|
|
|
|
dude |
386
|
|
|
|
|
|
|
due |
387
|
|
|
|
|
|
|
duel |
388
|
|
|
|
|
|
|
dump |
389
|
|
|
|
|
|
|
dust |
390
|
|
|
|
|
|
|
duty |
391
|
|
|
|
|
|
|
ear |
392
|
|
|
|
|
|
|
earth |
393
|
|
|
|
|
|
|
east |
394
|
|
|
|
|
|
|
eat |
395
|
|
|
|
|
|
|
edit |
396
|
|
|
|
|
|
|
eel |
397
|
|
|
|
|
|
|
egg |
398
|
|
|
|
|
|
|
elf |
399
|
|
|
|
|
|
|
elk |
400
|
|
|
|
|
|
|
elm |
401
|
|
|
|
|
|
|
end |
402
|
|
|
|
|
|
|
epic |
403
|
|
|
|
|
|
|
ever |
404
|
|
|
|
|
|
|
excite |
405
|
|
|
|
|
|
|
exit |
406
|
|
|
|
|
|
|
extra |
407
|
|
|
|
|
|
|
eye |
408
|
|
|
|
|
|
|
face |
409
|
|
|
|
|
|
|
fad |
410
|
|
|
|
|
|
|
fake |
411
|
|
|
|
|
|
|
fall |
412
|
|
|
|
|
|
|
fan |
413
|
|
|
|
|
|
|
far |
414
|
|
|
|
|
|
|
fare |
415
|
|
|
|
|
|
|
fat |
416
|
|
|
|
|
|
|
fear |
417
|
|
|
|
|
|
|
feat |
418
|
|
|
|
|
|
|
fest |
419
|
|
|
|
|
|
|
field |
420
|
|
|
|
|
|
|
fighter |
421
|
|
|
|
|
|
|
film |
422
|
|
|
|
|
|
|
fire |
423
|
|
|
|
|
|
|
fit |
424
|
|
|
|
|
|
|
flag |
425
|
|
|
|
|
|
|
flat |
426
|
|
|
|
|
|
|
fly |
427
|
|
|
|
|
|
|
foal |
428
|
|
|
|
|
|
|
foil |
429
|
|
|
|
|
|
|
fold |
430
|
|
|
|
|
|
|
food |
431
|
|
|
|
|
|
|
fool |
432
|
|
|
|
|
|
|
foot |
433
|
|
|
|
|
|
|
force |
434
|
|
|
|
|
|
|
fort |
435
|
|
|
|
|
|
|
fox |
436
|
|
|
|
|
|
|
francisco |
437
|
|
|
|
|
|
|
free |
438
|
|
|
|
|
|
|
front |
439
|
|
|
|
|
|
|
fuel |
440
|
|
|
|
|
|
|
fun |
441
|
|
|
|
|
|
|
fury |
442
|
|
|
|
|
|
|
fuse |
443
|
|
|
|
|
|
|
game |
444
|
|
|
|
|
|
|
garb |
445
|
|
|
|
|
|
|
gash |
446
|
|
|
|
|
|
|
gate |
447
|
|
|
|
|
|
|
geek |
448
|
|
|
|
|
|
|
gem |
449
|
|
|
|
|
|
|
gene |
450
|
|
|
|
|
|
|
germ |
451
|
|
|
|
|
|
|
ghost |
452
|
|
|
|
|
|
|
gig |
453
|
|
|
|
|
|
|
girl |
454
|
|
|
|
|
|
|
glen |
455
|
|
|
|
|
|
|
glue |
456
|
|
|
|
|
|
|
gnat |
457
|
|
|
|
|
|
|
goal |
458
|
|
|
|
|
|
|
goat |
459
|
|
|
|
|
|
|
god |
460
|
|
|
|
|
|
|
gold |
461
|
|
|
|
|
|
|
golden |
462
|
|
|
|
|
|
|
golf |
463
|
|
|
|
|
|
|
good |
464
|
|
|
|
|
|
|
goof |
465
|
|
|
|
|
|
|
grad |
466
|
|
|
|
|
|
|
gram |
467
|
|
|
|
|
|
|
grave |
468
|
|
|
|
|
|
|
gray |
469
|
|
|
|
|
|
|
green |
470
|
|
|
|
|
|
|
grey |
471
|
|
|
|
|
|
|
grid |
472
|
|
|
|
|
|
|
grog |
473
|
|
|
|
|
|
|
ground |
474
|
|
|
|
|
|
|
grub |
475
|
|
|
|
|
|
|
gun |
476
|
|
|
|
|
|
|
guy |
477
|
|
|
|
|
|
|
gym |
478
|
|
|
|
|
|
|
hair |
479
|
|
|
|
|
|
|
halo |
480
|
|
|
|
|
|
|
hand |
481
|
|
|
|
|
|
|
hang |
482
|
|
|
|
|
|
|
harm |
483
|
|
|
|
|
|
|
hat |
484
|
|
|
|
|
|
|
hawk |
485
|
|
|
|
|
|
|
head |
486
|
|
|
|
|
|
|
heart |
487
|
|
|
|
|
|
|
heat |
488
|
|
|
|
|
|
|
heel |
489
|
|
|
|
|
|
|
helm |
490
|
|
|
|
|
|
|
help |
491
|
|
|
|
|
|
|
herb |
492
|
|
|
|
|
|
|
herd |
493
|
|
|
|
|
|
|
high |
494
|
|
|
|
|
|
|
hiss |
495
|
|
|
|
|
|
|
hit |
496
|
|
|
|
|
|
|
hive |
497
|
|
|
|
|
|
|
hobo |
498
|
|
|
|
|
|
|
holy |
499
|
|
|
|
|
|
|
home |
500
|
|
|
|
|
|
|
hot |
501
|
|
|
|
|
|
|
hounds |
502
|
|
|
|
|
|
|
hour |
503
|
|
|
|
|
|
|
house |
504
|
|
|
|
|
|
|
howl |
505
|
|
|
|
|
|
|
hub |
506
|
|
|
|
|
|
|
hunter |
507
|
|
|
|
|
|
|
hurt |
508
|
|
|
|
|
|
|
hymn |
509
|
|
|
|
|
|
|
ice |
510
|
|
|
|
|
|
|
idea |
511
|
|
|
|
|
|
|
idol |
512
|
|
|
|
|
|
|
inch |
513
|
|
|
|
|
|
|
iris |
514
|
|
|
|
|
|
|
isle |
515
|
|
|
|
|
|
|
ivy |
516
|
|
|
|
|
|
|
jade |
517
|
|
|
|
|
|
|
jaw |
518
|
|
|
|
|
|
|
jazz |
519
|
|
|
|
|
|
|
jeep |
520
|
|
|
|
|
|
|
jig |
521
|
|
|
|
|
|
|
jive |
522
|
|
|
|
|
|
|
job |
523
|
|
|
|
|
|
|
joke |
524
|
|
|
|
|
|
|
jot |
525
|
|
|
|
|
|
|
jug |
526
|
|
|
|
|
|
|
jump |
527
|
|
|
|
|
|
|
junk |
528
|
|
|
|
|
|
|
kart |
529
|
|
|
|
|
|
|
keel |
530
|
|
|
|
|
|
|
keep |
531
|
|
|
|
|
|
|
kill |
532
|
|
|
|
|
|
|
king |
533
|
|
|
|
|
|
|
kong |
534
|
|
|
|
|
|
|
kingdom |
535
|
|
|
|
|
|
|
kit |
536
|
|
|
|
|
|
|
kite |
537
|
|
|
|
|
|
|
knob |
538
|
|
|
|
|
|
|
lacy |
539
|
|
|
|
|
|
|
lady |
540
|
|
|
|
|
|
|
lake |
541
|
|
|
|
|
|
|
lamb |
542
|
|
|
|
|
|
|
lamp |
543
|
|
|
|
|
|
|
land |
544
|
|
|
|
|
|
|
lane |
545
|
|
|
|
|
|
|
lank |
546
|
|
|
|
|
|
|
lap |
547
|
|
|
|
|
|
|
law |
548
|
|
|
|
|
|
|
lead |
549
|
|
|
|
|
|
|
leaf |
550
|
|
|
|
|
|
|
leg |
551
|
|
|
|
|
|
|
life |
552
|
|
|
|
|
|
|
light |
553
|
|
|
|
|
|
|
lily |
554
|
|
|
|
|
|
|
limb |
555
|
|
|
|
|
|
|
lime |
556
|
|
|
|
|
|
|
lip |
557
|
|
|
|
|
|
|
list |
558
|
|
|
|
|
|
|
loaf |
559
|
|
|
|
|
|
|
loan |
560
|
|
|
|
|
|
|
lock |
561
|
|
|
|
|
|
|
locked |
562
|
|
|
|
|
|
|
long |
563
|
|
|
|
|
|
|
loot |
564
|
|
|
|
|
|
|
loud |
565
|
|
|
|
|
|
|
love |
566
|
|
|
|
|
|
|
low |
567
|
|
|
|
|
|
|
mad |
568
|
|
|
|
|
|
|
mail |
569
|
|
|
|
|
|
|
man |
570
|
|
|
|
|
|
|
mania |
571
|
|
|
|
|
|
|
mario |
572
|
|
|
|
|
|
|
master |
573
|
|
|
|
|
|
|
mate |
574
|
|
|
|
|
|
|
maze |
575
|
|
|
|
|
|
|
mech |
576
|
|
|
|
|
|
|
mega |
577
|
|
|
|
|
|
|
melt |
578
|
|
|
|
|
|
|
mesh |
579
|
|
|
|
|
|
|
mess |
580
|
|
|
|
|
|
|
metal |
581
|
|
|
|
|
|
|
metroid |
582
|
|
|
|
|
|
|
milk |
583
|
|
|
|
|
|
|
mint |
584
|
|
|
|
|
|
|
mix |
585
|
|
|
|
|
|
|
moat |
586
|
|
|
|
|
|
|
monk |
587
|
|
|
|
|
|
|
monkey |
588
|
|
|
|
|
|
|
moon |
589
|
|
|
|
|
|
|
moss |
590
|
|
|
|
|
|
|
mote |
591
|
|
|
|
|
|
|
motor |
592
|
|
|
|
|
|
|
mud |
593
|
|
|
|
|
|
|
myth |
594
|
|
|
|
|
|
|
name |
595
|
|
|
|
|
|
|
navy |
596
|
|
|
|
|
|
|
night |
597
|
|
|
|
|
|
|
nine |
598
|
|
|
|
|
|
|
ninja |
599
|
|
|
|
|
|
|
north |
600
|
|
|
|
|
|
|
nuke |
601
|
|
|
|
|
|
|
oak |
602
|
|
|
|
|
|
|
oar |
603
|
|
|
|
|
|
|
odd |
604
|
|
|
|
|
|
|
odor |
605
|
|
|
|
|
|
|
off |
606
|
|
|
|
|
|
|
ogre |
607
|
|
|
|
|
|
|
old |
608
|
|
|
|
|
|
|
one |
609
|
|
|
|
|
|
|
out |
610
|
|
|
|
|
|
|
owl |
611
|
|
|
|
|
|
|
pac |
612
|
|
|
|
|
|
|
pack |
613
|
|
|
|
|
|
|
page |
614
|
|
|
|
|
|
|
palm |
615
|
|
|
|
|
|
|
pant |
616
|
|
|
|
|
|
|
paper |
617
|
|
|
|
|
|
|
parents |
618
|
|
|
|
|
|
|
park |
619
|
|
|
|
|
|
|
pawn |
620
|
|
|
|
|
|
|
pay |
621
|
|
|
|
|
|
|
peer |
622
|
|
|
|
|
|
|
pilot |
623
|
|
|
|
|
|
|
ping |
624
|
|
|
|
|
|
|
pint |
625
|
|
|
|
|
|
|
pixy |
626
|
|
|
|
|
|
|
play |
627
|
|
|
|
|
|
|
poem |
628
|
|
|
|
|
|
|
poet |
629
|
|
|
|
|
|
|
pole |
630
|
|
|
|
|
|
|
poll |
631
|
|
|
|
|
|
|
pong |
632
|
|
|
|
|
|
|
power |
633
|
|
|
|
|
|
|
pray |
634
|
|
|
|
|
|
|
prey |
635
|
|
|
|
|
|
|
prime |
636
|
|
|
|
|
|
|
pro |
637
|
|
|
|
|
|
|
puck |
638
|
|
|
|
|
|
|
puff |
639
|
|
|
|
|
|
|
pug |
640
|
|
|
|
|
|
|
pump |
641
|
|
|
|
|
|
|
pun |
642
|
|
|
|
|
|
|
punch |
643
|
|
|
|
|
|
|
pure |
644
|
|
|
|
|
|
|
quiz |
645
|
|
|
|
|
|
|
race |
646
|
|
|
|
|
|
|
rag |
647
|
|
|
|
|
|
|
rage |
648
|
|
|
|
|
|
|
rain |
649
|
|
|
|
|
|
|
ranger |
650
|
|
|
|
|
|
|
rant |
651
|
|
|
|
|
|
|
rap |
652
|
|
|
|
|
|
|
rare |
653
|
|
|
|
|
|
|
rayne |
654
|
|
|
|
|
|
|
realm |
655
|
|
|
|
|
|
|
red |
656
|
|
|
|
|
|
|
rich |
657
|
|
|
|
|
|
|
ride |
658
|
|
|
|
|
|
|
rig |
659
|
|
|
|
|
|
|
riot |
660
|
|
|
|
|
|
|
road |
661
|
|
|
|
|
|
|
rock |
662
|
|
|
|
|
|
|
roll |
663
|
|
|
|
|
|
|
roller |
664
|
|
|
|
|
|
|
roof |
665
|
|
|
|
|
|
|
rook |
666
|
|
|
|
|
|
|
room |
667
|
|
|
|
|
|
|
root |
668
|
|
|
|
|
|
|
rope |
669
|
|
|
|
|
|
|
rose |
670
|
|
|
|
|
|
|
row |
671
|
|
|
|
|
|
|
ruby |
672
|
|
|
|
|
|
|
rump |
673
|
|
|
|
|
|
|
rust |
674
|
|
|
|
|
|
|
rye |
675
|
|
|
|
|
|
|
sack |
676
|
|
|
|
|
|
|
sale |
677
|
|
|
|
|
|
|
salt |
678
|
|
|
|
|
|
|
san |
679
|
|
|
|
|
|
|
sanity |
680
|
|
|
|
|
|
|
sash |
681
|
|
|
|
|
|
|
scab |
682
|
|
|
|
|
|
|
scooby |
683
|
|
|
|
|
|
|
seal |
684
|
|
|
|
|
|
|
seam |
685
|
|
|
|
|
|
|
seat |
686
|
|
|
|
|
|
|
sect |
687
|
|
|
|
|
|
|
self |
688
|
|
|
|
|
|
|
sew |
689
|
|
|
|
|
|
|
shadow |
690
|
|
|
|
|
|
|
shell |
691
|
|
|
|
|
|
|
shift |
692
|
|
|
|
|
|
|
ship |
693
|
|
|
|
|
|
|
shock |
694
|
|
|
|
|
|
|
shoot |
695
|
|
|
|
|
|
|
shore |
696
|
|
|
|
|
|
|
sick |
697
|
|
|
|
|
|
|
side |
698
|
|
|
|
|
|
|
sign |
699
|
|
|
|
|
|
|
silk |
700
|
|
|
|
|
|
|
silo |
701
|
|
|
|
|
|
|
sim |
702
|
|
|
|
|
|
|
sink |
703
|
|
|
|
|
|
|
six |
704
|
|
|
|
|
|
|
skin |
705
|
|
|
|
|
|
|
skit |
706
|
|
|
|
|
|
|
slam |
707
|
|
|
|
|
|
|
slug |
708
|
|
|
|
|
|
|
slum |
709
|
|
|
|
|
|
|
smart |
710
|
|
|
|
|
|
|
smash |
711
|
|
|
|
|
|
|
smog |
712
|
|
|
|
|
|
|
snow |
713
|
|
|
|
|
|
|
soap |
714
|
|
|
|
|
|
|
sock |
715
|
|
|
|
|
|
|
sofa |
716
|
|
|
|
|
|
|
soft |
717
|
|
|
|
|
|
|
soul |
718
|
|
|
|
|
|
|
sound |
719
|
|
|
|
|
|
|
soup |
720
|
|
|
|
|
|
|
sour |
721
|
|
|
|
|
|
|
south |
722
|
|
|
|
|
|
|
speed |
723
|
|
|
|
|
|
|
spider |
724
|
|
|
|
|
|
|
splitter |
725
|
|
|
|
|
|
|
sponge |
726
|
|
|
|
|
|
|
spot |
727
|
|
|
|
|
|
|
spy |
728
|
|
|
|
|
|
|
square |
729
|
|
|
|
|
|
|
star |
730
|
|
|
|
|
|
|
start |
731
|
|
|
|
|
|
|
station |
732
|
|
|
|
|
|
|
steel |
733
|
|
|
|
|
|
|
stem |
734
|
|
|
|
|
|
|
step |
735
|
|
|
|
|
|
|
stew |
736
|
|
|
|
|
|
|
stool |
737
|
|
|
|
|
|
|
story |
738
|
|
|
|
|
|
|
street |
739
|
|
|
|
|
|
|
strike |
740
|
|
|
|
|
|
|
stunt |
741
|
|
|
|
|
|
|
super |
742
|
|
|
|
|
|
|
swim |
743
|
|
|
|
|
|
|
switch |
744
|
|
|
|
|
|
|
tail |
745
|
|
|
|
|
|
|
take |
746
|
|
|
|
|
|
|
talk |
747
|
|
|
|
|
|
|
tall |
748
|
|
|
|
|
|
|
tank |
749
|
|
|
|
|
|
|
tanx |
750
|
|
|
|
|
|
|
task |
751
|
|
|
|
|
|
|
tax |
752
|
|
|
|
|
|
|
team |
753
|
|
|
|
|
|
|
tear |
754
|
|
|
|
|
|
|
tech |
755
|
|
|
|
|
|
|
teck |
756
|
|
|
|
|
|
|
teen |
757
|
|
|
|
|
|
|
temp |
758
|
|
|
|
|
|
|
text |
759
|
|
|
|
|
|
|
thin |
760
|
|
|
|
|
|
|
thru |
761
|
|
|
|
|
|
|
thunder |
762
|
|
|
|
|
|
|
tick |
763
|
|
|
|
|
|
|
tide |
764
|
|
|
|
|
|
|
tiger |
765
|
|
|
|
|
|
|
time |
766
|
|
|
|
|
|
|
toad |
767
|
|
|
|
|
|
|
toe |
768
|
|
|
|
|
|
|
toll |
769
|
|
|
|
|
|
|
tomb |
770
|
|
|
|
|
|
|
tome |
771
|
|
|
|
|
|
|
tot |
772
|
|
|
|
|
|
|
toy |
773
|
|
|
|
|
|
|
trap |
774
|
|
|
|
|
|
|
tree |
775
|
|
|
|
|
|
|
tropic |
776
|
|
|
|
|
|
|
tube |
777
|
|
|
|
|
|
|
tusk |
778
|
|
|
|
|
|
|
twin |
779
|
|
|
|
|
|
|
ultra |
780
|
|
|
|
|
|
|
under |
781
|
|
|
|
|
|
|
user |
782
|
|
|
|
|
|
|
vain |
783
|
|
|
|
|
|
|
veil |
784
|
|
|
|
|
|
|
vein |
785
|
|
|
|
|
|
|
vest |
786
|
|
|
|
|
|
|
vial |
787
|
|
|
|
|
|
|
visa |
788
|
|
|
|
|
|
|
vote |
789
|
|
|
|
|
|
|
vow |
790
|
|
|
|
|
|
|
wage |
791
|
|
|
|
|
|
|
waker |
792
|
|
|
|
|
|
|
walker |
793
|
|
|
|
|
|
|
war |
794
|
|
|
|
|
|
|
ward |
795
|
|
|
|
|
|
|
ware |
796
|
|
|
|
|
|
|
wario |
797
|
|
|
|
|
|
|
warp |
798
|
|
|
|
|
|
|
wart |
799
|
|
|
|
|
|
|
wasp |
800
|
|
|
|
|
|
|
wave |
801
|
|
|
|
|
|
|
weak |
802
|
|
|
|
|
|
|
weal |
803
|
|
|
|
|
|
|
web |
804
|
|
|
|
|
|
|
west |
805
|
|
|
|
|
|
|
wet |
806
|
|
|
|
|
|
|
wheel |
807
|
|
|
|
|
|
|
whip |
808
|
|
|
|
|
|
|
wick |
809
|
|
|
|
|
|
|
wii |
810
|
|
|
|
|
|
|
wind |
811
|
|
|
|
|
|
|
wine |
812
|
|
|
|
|
|
|
wing |
813
|
|
|
|
|
|
|
wise |
814
|
|
|
|
|
|
|
wolf |
815
|
|
|
|
|
|
|
womb |
816
|
|
|
|
|
|
|
wonder |
817
|
|
|
|
|
|
|
wood |
818
|
|
|
|
|
|
|
world |
819
|
|
|
|
|
|
|
worm |
820
|
|
|
|
|
|
|
wrestle |
821
|
|
|
|
|
|
|
yard |
822
|
|
|
|
|
|
|
yarn |
823
|
|
|
|
|
|
|
year |
824
|
|
|
|
|
|
|
york |
825
|
|
|
|
|
|
|
zero |
826
|
|
|
|
|
|
|
zone |
827
|
|
|
|
|
|
|
zoom |
828
|
|
|
|
|
|
|
); |
829
|
|
|
|
|
|
|
sub is_word { |
830
|
|
|
|
|
|
|
my ($self, $word) = @_; |
831
|
|
|
|
|
|
|
return $dictionary{ lc $word }; |
832
|
|
|
|
|
|
|
} |
833
|
|
|
|
|
|
|
|
834
|
|
|
|
|
|
|
1; |
835
|
|
|
|
|
|
|
|
836
|
|
|
|
|
|
|
=head1 NAME |
837
|
|
|
|
|
|
|
|
838
|
|
|
|
|
|
|
Text::Phonetic::VideoGame - phonetic encoding for video game titles |
839
|
|
|
|
|
|
|
|
840
|
|
|
|
|
|
|
=head1 SYNOPSIS |
841
|
|
|
|
|
|
|
|
842
|
|
|
|
|
|
|
use Text::Phonetic::VideoGame; |
843
|
|
|
|
|
|
|
my $phonetic = Text::Phonetic::VideoGame->new; |
844
|
|
|
|
|
|
|
my $first = $phonetic->encode('super smash brothers'); |
845
|
|
|
|
|
|
|
my $second = $phonetic->encode('Super Smash Bros.'); |
846
|
|
|
|
|
|
|
warn "They match\n" if $first eq $second; |
847
|
|
|
|
|
|
|
|
848
|
|
|
|
|
|
|
warn "They match\n" if $phonetic->compare('ff 7', 'final fantasy vii'); |
849
|
|
|
|
|
|
|
|
850
|
|
|
|
|
|
|
This module implements a phonetic algorithm for the comparison of video game |
851
|
|
|
|
|
|
|
titles. It uses L to disambiguate common English typos and |
852
|
|
|
|
|
|
|
adds additional rules which apply specifically to typos in video game titles. |
853
|
|
|
|
|
|
|
|
854
|
|
|
|
|
|
|
The module implements the L interface. See that documentation |
855
|
|
|
|
|
|
|
for details about the interface. |
856
|
|
|
|
|
|
|
|
857
|
|
|
|
|
|
|
=head1 METHODS |
858
|
|
|
|
|
|
|
|
859
|
|
|
|
|
|
|
See L. |
860
|
|
|
|
|
|
|
|
861
|
|
|
|
|
|
|
=head1 VARIATIONS HANDLED |
862
|
|
|
|
|
|
|
|
863
|
|
|
|
|
|
|
=head2 Common English Typos |
864
|
|
|
|
|
|
|
|
865
|
|
|
|
|
|
|
L handles common English typos such as misspellings of proper |
866
|
|
|
|
|
|
|
names which makes titles like "adams family" match "addams family". |
867
|
|
|
|
|
|
|
|
868
|
|
|
|
|
|
|
=head2 Punctuation Variants |
869
|
|
|
|
|
|
|
|
870
|
|
|
|
|
|
|
Most punctuation and its variants are handled correctly. For instance "tom & |
871
|
|
|
|
|
|
|
jerry" and "tom and jerry" or "Lord of the Rings: Two Towers" with and without |
872
|
|
|
|
|
|
|
the colon. |
873
|
|
|
|
|
|
|
|
874
|
|
|
|
|
|
|
=head2 Common Abbreviations |
875
|
|
|
|
|
|
|
|
876
|
|
|
|
|
|
|
Abbreviations such as "bros" for "brothers" and "TMNT" for "Teenage Mutant |
877
|
|
|
|
|
|
|
Ninja Turtles". |
878
|
|
|
|
|
|
|
|
879
|
|
|
|
|
|
|
=head2 Canonical Years |
880
|
|
|
|
|
|
|
|
881
|
|
|
|
|
|
|
The titles "NFL 2004", "NFL '04" and "NFL 2K4" all hash to the same code. |
882
|
|
|
|
|
|
|
|
883
|
|
|
|
|
|
|
=head2 Canonical Numbers |
884
|
|
|
|
|
|
|
|
885
|
|
|
|
|
|
|
Roman numerals, ordinal numbers and spelled out numbers are recognized as |
886
|
|
|
|
|
|
|
being equal. |
887
|
|
|
|
|
|
|
|
888
|
|
|
|
|
|
|
=head2 Compound Words |
889
|
|
|
|
|
|
|
|
890
|
|
|
|
|
|
|
The game titles "mega man" and "megaman" are recognized as being identical. |
891
|
|
|
|
|
|
|
|
892
|
|
|
|
|
|
|
=head2 Word Order |
893
|
|
|
|
|
|
|
|
894
|
|
|
|
|
|
|
The order of certain parts of a title are often confused. For instance, |
895
|
|
|
|
|
|
|
"Sonic Adventure 2: Battle" and "Sonic Adventure: Battle 2" both indicate the |
896
|
|
|
|
|
|
|
same game. |
897
|
|
|
|
|
|
|
|
898
|
|
|
|
|
|
|
=head1 AUTHOR |
899
|
|
|
|
|
|
|
|
900
|
|
|
|
|
|
|
Michael Hendricks, C<< >> |
901
|
|
|
|
|
|
|
|
902
|
|
|
|
|
|
|
=head1 BUGS |
903
|
|
|
|
|
|
|
|
904
|
|
|
|
|
|
|
Please report any bugs or feature requests to C
|
905
|
|
|
|
|
|
|
rt.cpan.org>, or through the web interface at |
906
|
|
|
|
|
|
|
L. I |
907
|
|
|
|
|
|
|
will be notified, and then you'll automatically be notified of progress on |
908
|
|
|
|
|
|
|
your bug as I make changes. |
909
|
|
|
|
|
|
|
|
910
|
|
|
|
|
|
|
The source code is available on GitHub: |
911
|
|
|
|
|
|
|
L Patches and pull requests |
912
|
|
|
|
|
|
|
are welcome. |
913
|
|
|
|
|
|
|
|
914
|
|
|
|
|
|
|
=head1 ACKNOWLEDGEMENTS |
915
|
|
|
|
|
|
|
|
916
|
|
|
|
|
|
|
Thanks to JJGames (L) and Video Game Price Charts |
917
|
|
|
|
|
|
|
(L) for sponsoring development of this module. |
918
|
|
|
|
|
|
|
|
919
|
|
|
|
|
|
|
=head1 COPYRIGHT & LICENSE |
920
|
|
|
|
|
|
|
|
921
|
|
|
|
|
|
|
Copyright 2009 Michael Hendricks, all rights reserved. |
922
|
|
|
|
|
|
|
|
923
|
|
|
|
|
|
|
This program is released under the following license: MIT |