in reply to String Variables ....

Strange, I changed your code slightly to allow a test run without the Wordnet modules and it works, see below. It might be a problem with WordNet

#!/usr/bin/perl use warnings; use strict; my $Infile1 = shift; my $Infile2 = shift; open (INPUT, "$Infile1") || die "can't open the input file1"; chomp (my @words1 = <INPUT>); close (INPUT) ; open (INPUT, "$Infile2") || die "can't open the input file2"; chomp (my @words2 = <INPUT>); close (INPUT) ; for my $i (0 .. $#words1) { if ($words1[$i] =~ /\#n$/){ for my $j ( 0 .. $#words2) { if ($words2[$j] =~ /\#n$/){ my $value = getRelatedness("$words1[$i]#1", "$words2[$j]# +1"); print "similarity of $words1[$i] and $words2[$j] = $value\n";} }}} sub getRelatedness { print join(':',@_),"\n"; return 4; } OUTPUT: July#n#1:July#n#1 similarity of July#n and July#n = 4 July#n#1:Macdonough#n#1 similarity of July#n and Macdonough#n = 4 Macdonough#n#1:July#n#1 similarity of Macdonough#n and July#n = 4 Macdonough#n#1:Macdonough#n#1 similarity of Macdonough#n and Macdonough#n = 4

Replies are listed 'Best First'.
Re^2: String Variables ....
by Anonymous Monk on Jan 23, 2009 at 15:45 UTC
    could not be because of wordnet since when i put the string in getrelatedness it gives me correct answer

      So... if:

      my $value = $measure->getRelatedness("cat#n#1", "dog#n#1");
      works, but:
      my $value = $measure->getRelatedness("$words1[$i]#1", "$words2[$j]#1 +");
      does not, then whatever "$words1[$i]#1" and "$words2[$j]#1" yield, it isn't what you think it is. The trick is to check, carefully, looking out for odd things like stray CR or even LF characters... I suggest:
      sub show { my ($s) = @_ ; $s =~ s/([\x00-\x1F\x7F-\xA0])/sprintf("\\x%02X", ord($1))/eg ; return $s ; } ;
      and then add replace your print statement with:
      print "similarity of '", show("$words1[$i]#1"), "' and '", show("$wo +rds2[$j]#1"), "' = $value\n";
      and check whether anything "odd" shows up.

        Flexible alternative:

        use Data::Dumper; sub show { my ($s) = @_ ; local $Data::Dumper::Indent = 0; local $Data::Dumper::Terse = 1; local $Data::Dumper::Useqq = 1; return Dumper($s); }

        And you don't need to add quotes anymore:

        print "similarity of ", show("$words1[$i]#1"), " and ", show("$words2[$j]#1"), " = $value\n";