加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

使用perl创建Excel表格统计数据

发布时间:2020-12-16 00:05:20 所属栏目:大数据 来源:网络整理
导读:use Spreadsheet::WriteExcel;my $path="E:speakRecognizeexperimentdataResultemotion_speaker"; #设置查询的目录opendir(TEMPDIR,$path) or die "can't open it:$!";my @dir = readdir TEMPDIR;#print join "n",@dir;close TEMPDIR;#生成excel

use Spreadsheet::WriteExcel;

my $path="E:speakRecognizeexperimentdataResultemotion_speaker"; #设置查询的目录
opendir(TEMPDIR,$path) or die "can't open it:$!";
my @dir = readdir TEMPDIR;#print join "n",@dir;
close TEMPDIR;

#生成excel&设置输出格式
my $xlName = "Statistic.xls";
my $xl = Spreadsheet::WriteExcel->new($xlName);
my $xlsheet = $xl->add_worksheet("Sheet1");  #引号中为excel工作簿中表的名称
$xlsheet->freeze_panes(2,0); #冻结首行
# Add a format
my @headFormat = ($xl->add_format(size=>'15',bg_color=>'21',align=>'center'),$xl->add_format(size=>'15',bg_color=>'25',align=>'center'));
my @dataFormat = ($xl->add_format(bg_color=>'22',align=>'right'),$xl->add_format(bg_color=>'23',align=>'right'));
my @staticFormat = ($xl->add_format(bg_color=>'21',$xl->add_format(bg_color=>'25',align=>'right'));
my $bgColor = 0;
my @columns = qw(A B C D E F G H I J K L M N O P Q R S T);
my $currCol = 0;

sub getRateFormat{
	my ($slisti,$suttCntPerTarg) = @_;
	my $tempData = (substr($slisti/$suttCntPerTarg,6)*100)."%";
	if(index($tempData,".") == -1){substr($tempData,length($tempData)-1,1)=".00%";}
	$tempData;
}
sub AddRow{
	my ($curColumns,$curRows,$Format,$DataDetail) = @_;
	$xlsheet->write($columns[$curColumns].$curRows,$DataDetail->[0],$Format);
	$xlsheet->write($columns[$curColumns+1].$curRows,$DataDetail->[1],$Format);
	$xlsheet->write($columns[$curColumns+2].$curRows,$DataDetail->[2],$Format);
}

foreach my $filename(@dir){

	my @isResult = split /./,$filename;
	if($isResult[2] eq "result")
	{
		print "ndeal $filename begin……n";
		my $false_reject = 0;#错误拒绝个数
		my $false_recept = 0;#错误接受个数
		my $recordCnt = 0;#记录总数
		my $lastutterance = "0000";#上一个要打分的utterance
		my $utteranceCnt = 0;#utterance总个数
		my $lastTarget = "00";#上一个Target
		my @correctPerTarget = ();#每个Target的正确个数
		my $i = -1;
		my $uttCntPerTarg = 0;#每个Target中句子的个数
		my $firstTarget = 0;

		open(TFH_list,"<$filename");
		while (<TFH_list>)
		{
			my @fileline = split /s+/,$_;	### $_代表文件中当前行
			my @curtarget = split //,$fileline[3];
			
			#错误拒绝(本来是正确的被错误拒绝了)
			if($fileline[1] == $curtarget[0] && $fileline[2] == 0)
			{
				$false_reject++;
			}
			#错误接受(本来是错误的被错误接受了)
			elsif($fileline[1] != $curtarget[0] && $fileline[2] == 1)
			{
				$false_recept++;
			}
			if($curtarget[3] ne $lastutterance)
			{
				$utteranceCnt++;
				$lastutterance = $curtarget[3];
				if(0 == $i && $curtarget[0] ne $lastTarget)
				{
					$uttCntPerTarg = $utteranceCnt-1;
					$firstTarget = $curtarget[0]-1;
				}
			}
			#统计每个目标正确接受的个数
			if($curtarget[0] ne $lastTarget)
			{
				$i++;
				$lastTarget = $curtarget[0];
			}
			if ($fileline[1] == $curtarget[0] && $fileline[2] == 1)
			{
				$correctPerTarget[$i]++;
			}
			
			$recordCnt++;
		}
		close(TFH_list);

		
		#写内容(格式是使用上面添加的表内容格式)
		my @outFile = split /_/,$filename;
		my $row = 1;
		my $sumCorrect = 0;
		$xlsheet->merge_range($columns[$currCol].$row.":".$columns[$currCol+2].$row++,$outFile[0],$headFormat[$bgColor]);#"A1:C1"

		my @comment = ("target","correct","rate");
		AddRow($currCol,$row++,$dataFormat[$bgColor],@comment);
				
		foreach my $listi(@correctPerTarget) {
			my @dataItem = ($firstTarget++,$listi,getRateFormat($listi,$uttCntPerTarg));
			AddRow($currCol,@dataItem);
			$sumCorrect += $listi;
		}
		
		my @sumItem = ("SUM:",$sumCorrect."/".$utteranceCnt,getRateFormat($sumCorrect,$utteranceCnt));
		AddRow($currCol,$staticFormat[$bgColor],@sumItem);
		
		my @FRejItem = ("flsRej:",$false_reject."/".$utteranceCnt,getRateFormat($false_reject,@FRejItem);
		
		my @FRecItem = ("flsRec:",$false_recept."/"."(".$recordCnt."-".$utteranceCnt.")",getRateFormat($false_recept,$recordCnt-$utteranceCnt));
		AddRow($currCol,@FRecItem);
		
		$currCol = $currCol + 3;
		$bgColor = !$bgColor;
		print "deal $filename success!nn";
	}
}

#关闭操作excel的对象.
print "nn"."处理结果已保存至$xlName,正在打开……"."nn";
$xl->close();
system($xlName);

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读