Changeset 19dfa5c for app/src/dgp/dgc


Ignore:
Timestamp:
04/24/08 12:36:13 (17 years ago)
Author:
pawelk <pawelk@…>
Branches:
master, help
Children:
12d8443
Parents:
a5fdde9
git-author:
pawelk <pawelk@…> (04/24/08 12:36:13)
git-committer:
pawelk <pawelk@…> (04/24/08 12:36:13)
Message:

gph i dgc obsluguja configi

git-svn-id: svn://atos.wmid.amu.edu.pl/utt@33 e293616e-ec6a-49c2-aa92-f4a8b91c5d16

File:
1 edited

Legend:

Unmodified
Added
Removed
  • app/src/dgp/dgc

    r0214596 r19dfa5c  
    66#author:        Tomasz Obrebski 
    77 
     8# wymaga niejawnie programu canonize!!!! 
    89#use lib "ENV{HOME}/.utt/lib/perl"; 
    9 #use strict; 
     10 
     11use strict; 
    1012use Getopt::Long; 
    1113use Data::Dumper; 
    1214 
    1315use attr; 
    14 #use File::HomeDir; 
     16use File::HomeDir; 
     17 
     18my $systemconfigfile='/usr/local/etc/utt/dgc.conf'; 
     19my $userconfigfile=home()."/.utt/dgc.conf"; 
     20 
     21Getopt::Long::Configure('no_ignore_case_always'); 
    1522 
    1623my $help=0; 
     
    1825my $dicfile=0; 
    1926my $gramfile=0; 
     27my $outputfile=0; 
     28 
     29#read configuration files########################### 
     30my $file; 
     31foreach $file ($systemconfigfile, $userconfigfile){ 
     32  if(open(CONFIG, $file)){ 
     33        while (<CONFIG>) { 
     34                chomp; 
     35                s/#.*//; 
     36                s/^\s+//; 
     37                s/\s+$//; 
     38                next unless length; 
     39                my ($name, $value) = split(/\s*=\s*/, $_, 2); 
     40                if(($name eq "catfile")or($name eq "c")){ 
     41                        $catfile=$value; 
     42                } 
     43                elsif(($name eq "dicfile")or($name eq "d")){ 
     44                        $dicfile=$value; 
     45                } 
     46                elsif(($name eq "gramfile")or($name eq "g")){ 
     47                        $gramfile=$value; 
     48                } 
     49                elsif(($name eq "outputfile")or($name eq "o")){ 
     50                        $outputfile=$value; 
     51                } 
     52                elsif(($name eq "help")or($name eq "h")){ 
     53                        $help=1; 
     54                } 
     55 
     56        } 
     57        close CONFIG; 
     58  } 
     59} 
     60######################################################### 
     61 
     62GetOptions("help|h" => \$help, 
     63           "catfile|c=s" => \$catfile, 
     64           "dicfile|d=s" => \$dicfile, 
     65           "gramfile|g=s" => \$gramfile, 
     66           "outputfile|o=s" => \$outputfile); 
     67 
     68if($help) 
     69{ 
     70    print <<'END' 
     71Usage: dgc [OPTIONS] 
     72 
     73Options: 
     74   --catfile -c filename        List of syntactic categories. 
     75   --dicfile -d filename        Dictionary. 
     76   --gramfile -g filename       List of grammar rules. 
     77   --outputfile -o filename     Output filename. 
     78   --help -h                    Help. 
     79END 
     80; 
     81    exit 0; 
     82} 
     83 
     84die("At least one of --cats and --dic must be given.\n") if !$catfile && !$dicfile; 
    2085 
    2186my $ncat=0; 
     
    2792my $nlink=0; 
    2893 
    29 GetOptions("help|h" => \$help, 
    30            "catfile|c=s" => \$catfile, 
    31            "dicfile|d=s" => \$dicfile, 
    32            "gramfile|g=s" => \$gramfile); 
    33  
    34 if($help) 
    35 { 
    36     print <<'END' 
    37 Usage: dgpcompile [OPTIONS] 
    38  
    39 Options: 
    40    --cats -c filename           List of syntactic categories. 
    41    --dic  -d filename           Dictionary. 
    42    --help -h                    Help. 
    43 END 
    44 ; 
    45     exit 0; 
    46 } 
    47  
    48 die("At least one of --cats and --dic must be given.\n") if !$catfile && !$dicfile; 
    49  
    5094my %cats; 
    5195my %roles; 
     
    5397my %gov; 
    5498 
     99if(!$outputfile) { 
     100        *OUTPUT = *STDOUT; 
     101} 
     102elsif($outputfile eq "-") { 
     103    *OUTPUT = *STDOUT; 
     104} 
     105else { 
     106        open(OUTPUT, ">$outputfile") or die("Can't open output file: $outputfile!"); 
     107} 
     108 
     109 
     110 
    55111loadcats($catfile) if $catfile; 
    56112extractcats($dicfile) if $dicfile; 
    57113 
    58114 
    59 $cats_re = qr/(?:$attr::cat_re\s*(?:,\s*$attr::cat_re)*)/; 
     115my $cats_re = qr/(?:$attr::cat_re\s*(?:,\s*$attr::cat_re)*)/; 
    60116 
    61117# class parse_class: 
    62118# /$attr::cat_re/g; 
    63119 
    64 while(<>) 
     120 
     121if(!$gramfile) {  
     122        *INPUT = *STDIN; 
     123} 
     124elsif($gramfile eq "-"){ 
     125    *INPUT = *STDIN; 
     126} 
     127else { 
     128        open(INPUT, $gramfile) or die("Unable to open: $gramfile!"); 
     129} 
     130 
     131while(<INPUT>) 
    65132{ 
    66133    if(/^\s*AGR\s+(\S+)\s+(\S+)\s*$/) 
     
    75142    { 
    76143        $roles{$_}=1; 
    77         print; 
     144        print OUTPUT; 
    78145    } 
    79146    elsif(/^\s*SGL\s+\S+\s*$/) 
    80147    { 
    81148        ++$nsgl; 
    82         print; 
     149        print OUTPUT; 
    83150    } 
    84151    elsif(/^\s*REQ\s+(\S+)\s+(\S+)\s*$/) 
    85152    { 
    86         print "#$_"; 
     153        print OUTPUT "#$_"; 
    87154        my $cat = attr::parse $1; 
    88155        for my $atomcat (keys %cats) 
     
    90157            if(attr::match @$cat, @{$cats{$atomcat}}) 
    91158            { 
    92                 print "REQ ".$atomcat." $2\n"; 
     159                print OUTPUT "REQ ".$atomcat." $2\n"; 
    93160                ++$nreq; 
    94161            } 
     
    98165    { 
    99166        ++$nleft; 
    100         print; 
     167        print OUTPUT; 
    101168    } 
    102169    elsif(/^\s*RIGHT\s+\S+\s*$/) 
    103170    { 
    104171        ++$nright; 
    105         print; 
    106     } 
    107     elsif(($hs,$ds,$r) = /^\s*LINK\s+($cats_re)\s+($cats_re)\s+(\S+)\s*$/) 
    108     { 
    109         print "#$_"; 
    110         for $h ($hs =~ /$attr::cat_re/g) 
    111         { 
    112             for $d ($ds =~ /$attr::cat_re/g) 
     172        print OUTPUT; 
     173    } 
     174    elsif(my ($hs,$ds,$r) = /^\s*LINK\s+($cats_re)\s+($cats_re)\s+(\S+)\s*$/) 
     175    { 
     176        print OUTPUT "#$_"; 
     177        for my $h ($hs =~ /$attr::cat_re/g) 
     178        { 
     179            for my $d ($ds =~ /$attr::cat_re/g) 
    113180            { 
    114181                addlinks($h,$d,$r); 
     
    119186    else 
    120187    { 
    121         print; 
     188        print OUTPUT; 
    122189    } 
    123190} 
     
    126193sub addlinks 
    127194{ 
    128     ($h,$d,$r) = @_; 
    129  
    130     for my $a (@{$agr{$r}}) { print "#AGR $r $a\n"; } 
    131     for my $c (@{$gov{$r}}) { print "#GOV $r ".attr::unparse(@$c)."\n"; } 
     195    my ($h,$d,$r) = @_; 
     196 
     197    for my $a (@{$agr{$r}}) { print OUTPUT "#AGR $r $a\n"; } 
     198    for my $c (@{$gov{$r}}) { print OUTPUT "#GOV $r ".attr::unparse(@$c)."\n"; } 
    132199    my $head = attr::parse $h; 
    133200    my $dep = attr::parse $d; 
     
    152219                } 
    153220                 
    154                 print "LINK "; 
    155                 print $atomhead." "; 
    156                 print $atomdep." $r\n"; 
     221                print OUTPUT "LINK "; 
     222                print OUTPUT $atomhead." "; 
     223                print OUTPUT $atomdep." $r\n"; 
    157224                ++$nlink; 
    158225                 
     
    180247        while(/,([^[:space:];]+)/g) 
    181248        { 
    182             $cat=$1; 
     249            my $cat=$1; 
    183250            next if !$cat || exists $cats{$cat}; 
    184251            $ncat++; 
    185             print "CAT $1\n"; 
     252            print OUTPUT "CAT $1\n"; 
    186253            $cats{$cat}=attr::parse($cat); 
    187254        } 
     
    199266        tr/ \t\n//d; 
    200267        next if !$_ || exists $cats{$_}; 
    201         print "CAT $_\n"; 
     268        print OUTPUT "CAT $_\n"; 
    202269        ++$ncat; 
    203270        $cats{$_}=attr::parse($_); 
     
    205272    close CATFILE; 
    206273} 
     274 
Note: See TracChangeset for help on using the changeset viewer.