sub MI { my( $string_es, $string_en, $hash_es, $hash_en ) = @_; my $prob_es = ( @{ $hash_es{ $string_es } } ) / 6939873; my $prob_en = ( @{ $hash_en{ $string_en } } ) / 6939873; my $intersection = Intersection( $hash_es{ $string_es }, $hash_en{ $string_en } ); my $prob_es_en = ( $intersection ) / 6939873; $prob_es_en = ( $prob_es_en + ( $prob_es * $prob_en * 0.1) ) / 1.1; my $mi = $prob_es_en * log( $prob_es_en / ( $prob_es * $prob_en ) ); return $mi; } sub Intersection { my( $refA, $refB ) = @_; my %counts; ++$counts{ $_ } for @$refA; ++$counts{ $_ } for @$refB; my $intersects = 0; $counts{ $_ } > 1 and ++$intersects for keys %counts; return $intersects; }