#!/local/bin/perl -w

# reads the mapping from WN 1.7 to WN 1.5 to Sensus
# written by Diana Inkpen

use strict;


my(%M_ADJ, %M_VERB, %M_NOUN, %M_ADV);

# change the parameter to point to the directory where the mapping is:
read_mapping("");

  # example use:  
  print map_17_Sensus("08044814","n"),  "\n";

sub map_17_Sensus
{ my $off = shift;
  my $pos = shift;
  my $TT;
  if ($pos eq "n") {$TT = \%M_NOUN;}
  elsif ($pos eq "v") {$TT = \%M_VERB;}
  elsif ($pos eq "a") {$TT = \%M_ADJ;}
  elsif ($pos eq "r") {$TT = \%M_ADV;}
  else {print "Err wrong pos in map_17_Sensus\n";}

  return ${$TT}{$off}; 
 
}

sub read_mapping
{ my $base = shift;
 my($line, $o15, $o16, $k);
 my($sense, $w16, $w15, $pos, $con);

open(F,"<$base"."log.17_15_Sensus.adj") || 
   die("Cannot open mapping log.17_15_Sensus.adj file\n$!");
while($line = <F>)
{ chomp $line;
  if ($line =~ /^(\d+) ([^ ]+)/o)
  { $o16 = $1; $w16 = $2; $line = $';
    #print $o16,"-",$w16,"-";
    while ($line =~ / (\d+) ([^ ]+) ((\|.+?\|)|([^ ]+))/go)
     {  $o15 = $1; $w15 = $2; $con = $3;  
        #print $o15,"-",$w15,"-",$con,"-";
        if ($con ne "")
         { if(defined($M_ADJ{$o16})) {$M_ADJ{$o16} .= $con." ";}
           else {$M_ADJ{$o16} = $con." ";}
         }
        else { print "$line Error\n";}      
     }
   #print "\n";
  }else {print "Error in log.adj  $line\n";}
}
close(F);

# there lines for which there is no Sensus concept, such as "80th#a#2"

#foreach $k (keys % M_ADJ)
#  { print $k, " ", $M_ADJ{$k},"\n";}

open(F,"<$base"."log.17_15_Sensus.adv") || 
   die("Cannot open mapping log.17_15_Sensus.adv file\n$!");
while($line = <F>)
{ chomp $line;
  if ($line =~ /^(\d+) ([^ ]+)/o)
  { $o16 = $1; $w16 = $2; $line = $';
    #print $o16," ",$w16," ";
    while ($line =~ / (\d+) ([^ ]+) ((\|.+?\|)|([^ ]+))/go)
     {  $o15 = $1; $w15 = $2; $con = $3;  
        #print $o15," ",$w15," ",$con," ";
        if ($con ne "")
         {if (defined($M_ADV{$o16})) {$M_ADV{$o16} .= $con." ";}
          else {$M_ADV{$o16} = $con." ";}
         }
        else { print "$line Error\n";}      
     }
   #print "\n";
  }else {print "Error in log.adv  $line\n";}
}
close(F);

#foreach $k (keys % M_ADV)
#  { print $k, " ", $M_ADV{$k},"\n";}


open(F,"<$base"."log.17_15_Sensus.verb") || 
   die("Cannot open mapping log.17_15_Sensus.verb file\n$!");
while($line = <F>)
{ chomp $line;
  if ($line =~ /^(\d+) ([^ ]+)/o)
  { $o16 = $1; $w16 = $2; $line = $';
    #print $o16," ",$w16," ";
    while ($line =~ / (\d+) ([^ ]+) ((\|.+?\|)|([^ ]+))/go)
     {  $o15 = $1; $w15 = $2; $con = $3;  
       # print $o15," ",$w15," ",$con," ";
        if ($con ne "")
         {if (defined($M_VERB{$o16})) {$M_VERB{$o16} .= $con." ";}
          else {$M_VERB{$o16} = $con." ";}
         }
        else { print "$line Error\n";}      
     }
   #print "\n";
  }else {print "Error in log.verb  $line\n";}
}
close(F);

#foreach $k (keys % M_VERB)
#  { print $k, " ", $M_VERB{$k},"\n";}

open(F,"<$base"."log.17_15_Sensus.noun") || 
   die("Cannot open mapping log.17_15_Sensus.noun file\n$!");
while($line = <F>)
{ chomp $line;
  if ($line =~ /^(\d+) ([^ ]+)/o)
  { $o16 = $1; $w16 = $2; $line = $';
    #print $o16," ",$w16," ";
    while ($line =~ / (\d+) ([^ ]+) ((\|.+?\|)|([^ ]+))/go)
     {  $o15 = $1; $w15 = $2; $con = $3;  
       # print $o15," ",$w15," ",$con," ";
        if ($con ne "")
         {if (defined($M_NOUN{$o16})){ $M_NOUN{$o16} .= $con." ";}
          else { $M_NOUN{$o16} = $con." ";}
         }
        else { print "$line Error\n";}      
     }
   #print "\n";
  }else {print "Error in log.noun  $line\n";}
}
close(F);

#foreach $k (keys % M_NOUN)
#  { print $k, " ", $M_NOUN{$k},"\n";}

}

