~jtv/corpusfiltergraph/cross-python

« back to all changes in this revision

Viewing changes to trunk/lib/corpusfg/graphs/sa-champollion/en/english_stemmer.pl

  • 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/env perl -w
 
2
#
 
3
# Purpose: A light English stemmer
 
4
# Author: Xiaoyi Ma, LDC
 
5
# Date:   September 17, 2003
 
6
# Input: English text
 
7
# Output: English text with words stemmed
 
8
#
 
9
$| = 1; # disable Perl output buffering
 
10
 
 
11
## Modified 2012-01-22:
 
12
# Changed morph file to parameter not environment variable
 
13
# Added binmode for utf8 STDIN and STDOUT
 
14
## Modified 2012-01-22:
 
15
# Added $| = 1;
 
16
 
 
17
#binmode(STDIN, ":utf8");
 
18
#binmode(STDOUT, ":utf8");
 
19
 
 
20
use DB_File;
 
21
use Fcntl qw(O_RDONLY O_RDWR O_CREAT);
 
22
 
 
23
my $eng_morph_txt = "./morph.en";
 
24
 
 
25
while (@ARGV) {
 
26
        $_ = shift;
 
27
        /^-m$/ && ($eng_morph_txt = shift, next);
 
28
        /^-h$/ && ($HELP = 1, next);
 
29
}
 
30
 
 
31
if ($HELP) {
 
32
        print "Usage ./english_stemmer.pl ( -m eng_morph_txt ) < textfilein > stemmedfileout\n";
 
33
        exit;
 
34
}
 
35
 
 
36
$eng_morph = "$eng_morph_txt.db";
 
37
&make_eng_morph_db($eng_morph_txt, $eng_morph);
 
38
tie %eng_morph, "DB_File", $eng_morph,O_RDONLY,0444 || die "$0: Cannot open dbmfile $eng_morph!\n";
 
39
 
 
40
while (<>) {
 
41
    if (/<seg id=(\d+)>(.*)<\/seg>/) {
 
42
        $segid = $1; $seg = $2;
 
43
 
 
44
        $stemmed_seg = "";
 
45
        @_ = split ' ', $seg;
 
46
        foreach (@_) {
 
47
            if (defined $eng_morph{$_}) {
 
48
                $stemmed_seg .= "$eng_morph{$_} ";
 
49
            } else {
 
50
                $stemmed_seg .= "$_ ";
 
51
            }
 
52
        }
 
53
        print "<seg id=$segid>$stemmed_seg</seg>\n";
 
54
    } else {
 
55
        $stemmed_seg = "";
 
56
        @_ = split ' ', $_;
 
57
        foreach (@_) {
 
58
            if (defined $eng_morph{$_}) {
 
59
                $stemmed_seg .= "$eng_morph{$_} ";
 
60
            } else {
 
61
                $stemmed_seg .= "$_ ";
 
62
            }
 
63
        }
 
64
        print "$stemmed_seg\n";
 
65
    }
 
66
}
 
67
untie %eng_morph;
 
68
 
 
69
sub make_eng_morph_db {
 
70
    my ($eng_morph_txt, $eng_morph) = @_;
 
71
 
 
72
    return if -f $eng_morph;
 
73
 
 
74
    print STDERR "Making English Morph DBM file ...\n";
 
75
    tie %eng_morph, "DB_File", $eng_morph, O_CREAT|O_RDWR, 0664|| die "Cannot open dbmfile $eng_morph";
 
76
    open F,"<$eng_morph_txt" || die "English Morph file $eng_morph not found";
 
77
    while (<F>) {
 
78
        chomp;
 
79
        @_ = split;
 
80
        $eng_morph{$_[0]}  = $_[1];
 
81
    }
 
82
    close(F);
 
83
    untie %eng_morph;
 
84
}