File Coverage

blib/lib/Lingua/KO/TypoCorrector.pm
Criterion Covered Total %
statement 15 15 100.0
branch n/a
condition n/a
subroutine 5 5 100.0
pod 0 2 0.0
total 20 22 90.9


line stmt bran cond sub pod time code
1             package Lingua::KO::TypoCorrector;
2              
3 2     2   22672 use 5.008001;
  2         6  
  2         68  
4 2     2   8 use strict;
  2         2  
  2         127  
5 2     2   22 use warnings;
  2         3  
  2         930  
6              
7             require Exporter;
8              
9             our @ISA = qw(Exporter);
10              
11             our @EXPORT = qw( to_hangul );
12             our %EXPORT_TAGS = ( 'all' => [@EXPORT ] );
13             our @EXPORT_OK = ( @{ $EXPORT_TAGS{'all'} } );
14              
15             our $VERSION = '0.06';
16              
17             our $en_h = "rRseEfaqQtTdwWczxvg";
18              
19             our $reg_h = "[" . $en_h . "]";
20              
21             our $en_b = {
22             k => 0, #ㅏ
23             o => 1, #ㅐ
24             i => 2, #ㅑ
25             O => 3, #ㅒ
26             j => 4, #ㅓ
27             p => 5, #ㅖ
28             u => 6, #ㅕ
29             P => 7, #ㅖ
30             h => 8, #ㅗ
31             hk => 9, #ㅘ
32             ho => 10, #ㅙ
33             hl => 11, #ㅚ
34             y => 12, #ㅛ
35             n => 13, #ㅜ
36             nj => 14, #ㅝ
37             np => 15, #ㅞ
38             nl => 16, #ㅟ
39             b => 17, #ㅠ
40             m => 18, #ㅡ
41             ml => 19, #ㅢ
42             l => 20, #
43             };
44              
45             my $reg_b = "hk|ho|hl|nj|np|nl|ml|k|o|i|O|j|p|u|P|h|y|n|b|m|l";
46              
47             my $en_f = {
48             "" => 0, # 받침없음
49             r => 1, # ㄱ
50             R => 2, # ㄲ
51             rt => 3, # ㄱㅅ
52             s => 4, # ㄴ
53             sw => 5, # ㄴㅈ
54             sg => 6, # ㄴㅎ
55             e => 7, # ㄷ
56             f => 8, # ㄹ
57             fr => 9, # ㄹㄱ
58             fa => 10, # ㄹㅁ
59             fq => 11, # ㄹㅂ
60             ft => 12, # ㄹㅅ
61             fx => 13, # ㄹㅌ
62             fv => 14, # ㄹㅍ
63             fg => 15, # ㄹㅎ
64             a => 16, # ㅁ
65             q => 17, # ㅂ
66             qt => 18, # ㅂㅅ
67             t => 19, # ㅅ
68             T => 20, # ㅆ
69             d => 21, # ㅇ
70             w => 22, # ㅈ
71             c => 23, # ㅊ
72             z => 24, # ㅋ
73             x => 25, # ㅌ
74             v => 26, # ㅍ
75             g => 27, # ㅎ
76             };
77              
78             my $reg_f = "rt|sw|sg|fr|fa|fq|ft|fx|fv|fg|qt|r|R|s|e|f|a|q|t|T|d|w|c|z|x|v|g|";
79              
80             my $reg_exp = "(".$reg_h.")(".$reg_b.")((?:".$reg_f.")(?=(?:".$reg_h.")(?:".$reg_b."))|(?:".$reg_f."))";
81              
82             sub to_hangul {
83 2     2 0 13 my $text = shift;
84 2         197 $text =~ s/$reg_exp/replace($1,$2,$3)/ge;
  10         23  
85 2         18 return $text;
86             }
87              
88             sub replace {
89 10     10 0 27 my ($h,$b,$f) = @_;
90 10         73 return chr(index($en_h, $h)*21*28 + $en_b->{$b} * 28 + $en_f->{$f} + 44032);
91             }
92              
93             1;
94             __END__