#!/usr/local/bin/perl -w
use utf8;

# Program for sentenvce alignment evaluation

$numLine =0;
$tagOpen = "<";
$tagClose = ">";
$sentStartTag = "alignment";
$sentEndTag = "/alignment";
$space = " ";
$equals = "=";
$articleEnds = "</article>";

$line =0 ;

@charArray = ();
@lineArray = ();
$modAr = 0;
@modAr = ();
@modA = ();
$fileFlag = -1;

$size = 0;

foreach $file (@ARGV) {

open(FILE, $file);
$fileFlag++;
%hashLanguageOne =();
%hashLanguageTwo = ();
@lineArray = ();
$numSentences=0;
$languageTag =0;

	while (<FILE>) {
		chomp;	
		$temp =0;

		next if /^$/;	
		@charArray = ();
				
		if (/$articleEnds/) {
			$languageTag = 1;
			$numSentences = 0;
		}


		if (/$sentStartTag ([0-9]*=[ 0-9]*)/) {
		

			if (!$languageTag){

			 	$line = $&;
				$line=~m/[0-9]*=[ 0-9]*/;
		  		$line = $&;

				$line =~/$equals/;
	   			$temp  = $`;
			    	$temp =~ s/$space//g;			    

		    		@charArray = (@charArray, $temp);
	    			$line = $';
				$line =~ s/^$space//g;	
				$line =~ s/$space$//g;	
				@charArray= (@charArray,split(/$space/,$line));

				for ($i = 0; $i < $#charArray+1 ; $i++)	{

					$charArray[$i] =~ s/$space//g;
					if ($i > 0) {
						if ((defined $charArray[$i]) && ($charArray[$i] ne $space)) {
							$lineArray[$numLine][0] = $charArray[0];	
							$lineArray[$numLine][1] = $charArray[$i];
							$numLine++;
						}
					}
			 	}
		  	}

		}

		if (/$sentStartTag ([0-9]*=[ 0-9]*)/) {
			$totalchars = 0;
			$sentenceFlag = 1;
			$numSentences++;
		}	
		elsif (/$sentEndTag/) {


			if (!$languageTag) {
				$hashLanguageOne{$numSentences} = $totalchars ;
			}
			elsif ($languageTag) {
				$hashLanguageTwo{$numSentences} = $totalchars ;
			}
	
			$sentenceFlag = 0;
			$totalchars = 0;
		}
		@charArray= ();
		if ((!/^$tagOpen/) && (!/$tagClose$/)) { 

					$size = length($_);				
				if ($sentenceFlag) {
					$totalchars+= $size; 
				}
			
			}

	}  # while ends here...................

		for ($i =0 ; $i < $#lineArray +1 ; $i++)  {

				if (defined($lineArray[$i][0]) && defined($lineArray[$i][1]) ) {
					if (defined($hashLanguageOne{$lineArray[$i][0]})) {
						if (defined($hashLanguageTwo{$lineArray[$i][1]})) {
							if (!$fileFlag) {
								$modAr += $hashLanguageOne{$lineArray[$i][0]}*$hashLanguageTwo{$lineArray[$i][1]} ; 
							}
							else {
								$modA += $hashLanguageOne{$lineArray[$i][0]}*$hashLanguageTwo{$lineArray[$i][1]} ; 

							}

						}	
					}
				 }
			}






close(FILE);
}

result();

sub result {

my ($min);
$min =0;
$recall = 0;
$precision = 0;
$fMeasure = 0;

if ((!$modAr) || (!$modA)) {
	print " $ARGV[0]\t 0\n";
	exit;
}

	if ($modAr < $modA) {
		$min = $modAr;
	}
	else {
		$min = $modA;
	}
	
	$recall = $min / $modAr;
	$precision = $min / $modA;

	$fMeasure = 2 * ($recall * $precision)/($recall+$precision);

	print "  $ARGV[0]\t$fMeasure \n ";

}
