【问题标题】:Compare Key-value pairs in a hash in perl在 perl 中比较哈希中的键值对
【发布时间】:2014-08-19 12:10:41
【问题描述】:

我有一个带有键值作为标量字符串的散列。该值是另一个散列,它以字符串中的单词为键,以它们的频率为值。

结构:

 { 
  doc1 => { w1 => freq1 , w2 => freq2, .....} ,
  doc2 => { w1 => freq1 , w2 => freq2, .....} ,
  .
  .
  .
}

我想比较两个键(doc1、doc2...)并找到两个文档之间的常用词。对于所有文档对,所需的输出是两个文档之间常用词的频率总和。

最好的方法是什么?

【问题讨论】:

  • 你试过什么?你遇到了什么问题?请显示您的 Perl 代码,以及输入和所需输出的示例。请阅读How do I ask a good question?

标签: perl compare hash


【解决方案1】:

类似

#!/usr/bin/perl
use strict;
use warnings;

# Sum of frequencies
my @frequencies;

# First doc
my $doc1 = {
    w1 => 1 , w2 => 5, w3 => 1
};

# Second doc
my $doc2 = {
    w1 => 3 , w2 => 2, w3 => 1, w4 => 12
};

# see first doc
foreach my $word (keys %{$doc1}) {
    if (exists $doc2->{$word}) {
        push (@frequencies, {$word => $doc1->{$word} + $doc2->{$word}});
    }
    else {
        push (@frequencies, {$word => $doc1->{$word}});
    }

    delete $doc2->{$word};
}

# see second doc
foreach my $word (keys %{$doc2}) {
    push (@frequencies, {$word => $doc2->{$word}});
}

# See sum of frequencies
print join "\n", map {sprintf("%s: %s", keys %$_, values %$_)} @frequencies;

1;

输出

$ perl compare.pl
w3: 2
w1: 4
w2: 7
w4: 12

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-02-05
    • 1970-01-01
    • 2011-09-12
    • 1970-01-01
    • 2018-06-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多