我有一个问题是计算每对字符串的多数selectedresult。我的代码:如果用户选择sysA,sysB或两者而不考虑字符串对,似乎只计算。我也有一个问题需要进行多重比较并为每对配对7个用户。
( $file = <INFILE> ) {
@field = parse_csv($file);
chomp(@field);
@query = $field[1];
for($i=0;$i<@query;++$i) {
if ( ($field[2] eq $method) || ($field[3] eq $method)){
if ( $field[4] eq $field[2]) {
print "$query[$i]: $field[2], $field[3], $field[4]\n";
$counta++;
}
if ( $field[4] eq $field[3]) {
print "$query[$i]: $field[2], $field[3]: $field[4]\n";
$countb++;
}
if ( $field[4] eq ($field[2] && $field[3])) {
#print "$query[$i]: $field[2]$field[3]\n";
$countc++;
}
数据:对于每个查询,我有3种不同的字符串比较组合。
一对的示例数据(每个对评估7个用户):
需要输出示例:查询1:男性健身模型
非常感谢任何帮助。
答案 0 :(得分:2)
好吧,如果没有比你要求的更复杂,这就是我想出的可能方法。
#!/usr/bin/perl
use strict;
my %counter = ( "A" => 0, "B" => 0, "AB" => 0, "majority" => 0);
while(<DATA>){
chomp;
next unless $_;
my ($workerId,$query,$sys1,$sys2,$resultSelected) = split(',');
$counter{$resultSelected}++;
}
$counter{'majority'} = (sort {$counter{$b} <=> $counter{$a}} keys %counter)[0];
print "A: $counter{'A'} B: $counter{'B'} both(AB): $counter{'AB'} majority: $counter{'majority'}\n";
__END__
user1,male,A,B,A
user2,male,A,B,AB
user3,male,A,B,B
user4,male,A,B,A
user5,male,A,B,A
这个输出是: 答:3 B:1两者(AB):1多数:A
我不觉得我的榜样完全解决了“多数”类型不止一种的想法。例如,如果A和B都是9,我希望它们都列在那里。因为你没有问过,所以我没有那么费心,但希望这会让你走上正确的道路。
答案 1 :(得分:-1)
open( INFILE, "compare.csv" ) or die("Can not open input file: $!");
while ( $file = <INFILE> ) {
@field = parse_csv($file);
chomp(@field);
@query = $field[1];
for($i=0;$i<@query;++$i) {
if ( ($field[2] eq $method) || ($field[3] eq $method)){
if ( $field[4] eq $field[2]) {
print "$query[$i]: $field[2], $field[3], $field[4]\n";
$counta++;
}
if ( $field[4] eq $field[3]) {
print "$query[$i]: $field[2], $field[3]: $field[4]\n";
$countb++;
}
if ( $field[4] eq ($field[2] && $field[3])) {
#print "$query[$i]: $field[2]$field[3]\n";
$countc++;
}
}
}
sub parse_csv { 我的$ text = shift; 我的@new =(); $($,$ +)同时$ text = ~m { “([^ \” \] (?:\。[^ \ “\] )*)” ,? | ([^,] +),? | , } GX; push(@ new,undef)if substr($ text,-1,1)eq','; 返回@new; }`