~jtv/corpusfiltergraph/cross-python

« back to all changes in this revision

Viewing changes to trunk/lib/corpusfg/graphs/sa-champollion/zh_cn/utf8-num2arabic

  • Committer: tahoar
  • Date: 2012-05-02 15:46:23 UTC
  • Revision ID: svn-v4:bc069b21-dff4-4e29-a776-06a4e04bad4e::266
new layout. need to update code to use the new layout

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
#!/usr/bin/perl
 
2
#
 
3
# Usage: utf8-num2arabic <utf8 text>
 
4
# Author:  Xiaoyi Ma, LDC, 03/09/2006
 
5
# Purpose:     translates Chinese numbers in utf8  into their Arabic
 
6
#              equivalents, where possible
 
7
#
 
8
$| = 1; # disable Perl output buffering
 
9
 
 
10
use utf8;
 
11
 
 
12
if (@ARGV == 1) {
 
13
    open STDIN, "<$ARGV[0]" or die "$0: cannot open $ARGV[0]!\n";
 
14
}
 
15
 
 
16
binmode STDIN, ":utf8";
 
17
binmode STDOUT, ":utf8";
 
18
 
 
19
$int = "(○|零|一|二|三|四|五|六|七|八|九|十|百|千|万|亿){2,}";
 
20
$dec = "(○|零|一|二|三|四|五|六|七|八|九|十|百|千|万|亿)+点(○|零|一|二|三|四|五|六|七|八|九|十|百|千|万|亿)+";
 
21
 
 
22
 
 
23
while (<STDIN>) {
 
24
    s/$int|$dec/&cn2arabic($&)/eg;
 
25
    print;
 
26
}
 
27
 
 
28
sub cn2arabic{
 
29
    my ($cn) = @_;
 
30
 
 
31
    $cn =~ s/○/0/g;
 
32
    $cn =~ s/零/0/g;
 
33
    $cn =~ s/一/1/g;
 
34
    $cn =~ s/二/2/g;
 
35
    $cn =~ s/三/3/g;
 
36
    $cn =~ s/四/4/g;
 
37
    $cn =~ s/五/5/g;
 
38
    $cn =~ s/六/6/g;
 
39
    $cn =~ s/七/7/g;
 
40
    $cn =~ s/八/8/g;
 
41
    $cn =~ s/九/9/g;
 
42
    $cn =~ s/十/s/g; # ten
 
43
    $cn =~ s/百/b/g; # hundred
 
44
    $cn =~ s/千/q/g; # thousand
 
45
    $cn =~ s/万/w/g; # ten thousand
 
46
    $cn =~ s/亿/y/g; # 100 million
 
47
    $cn =~ s/点/\./g;
 
48
 
 
49
    return &mid2arabic($cn);
 
50
}
 
51
 
 
52
sub mid2arabic{
 
53
    my ($cn) = @_;
 
54
    my ($int,$fra,$multi,$remain);
 
55
    
 
56
    return if $cn eq "";
 
57
 
 
58
    if ($cn =~ /\./) {
 
59
        $int = &mid2arabic($`);
 
60
        $fra = &mid2arabic($');
 
61
        return $int.".".$fra;
 
62
    } elsif ($cn =~ /y/) {
 
63
        $multi = &mid2arabic($`);
 
64
        $remain = &mid2arabic($');
 
65
        return $multi*100000000+$remain;
 
66
    } elsif ($cn =~ /w/) {
 
67
        $multi = &mid2arabic($`);
 
68
        $remain = &mid2arabic($');
 
69
        return $multi*10000+$remain;
 
70
    } elsif ($cn =~ /q/) {
 
71
        $multi = &mid2arabic($`);
 
72
        $remain = &mid2arabic($');
 
73
        return $multi*1000+$remain;
 
74
    } elsif ($cn =~ /b/) {
 
75
        $multi = &mid2arabic($`);
 
76
        $remain = &mid2arabic($');
 
77
        return $multi*100+$remain;
 
78
    } elsif ($cn =~ /s/) {
 
79
        if($` eq "") {
 
80
            $multi = 1;
 
81
        } else {
 
82
            $multi = &mid2arabic($`);
 
83
        }
 
84
        $remain = &mid2arabic($');
 
85
        return $multi*10+$remain;
 
86
    } else {
 
87
        $cn =~ s/\D//g;
 
88
        return $cn;
 
89
    }
 
90
}
 
91
 
 
92