【问题标题】:Searching with Hash in Perl在 Perl 中使用哈希进行搜索
【发布时间】:2011-07-16 21:28:42
【问题描述】:

我正在使用包含 5000 个项目的哈希来匹配句子中的单词,当我匹配例如:if($hash{$word}){Do Something} 时,有时会发生句点出现在单词中,即使它是匹配的存在期间导致不匹配。与哈希匹配时,可以做些什么来忽略任何标点符号吗?

【问题讨论】:

  • 您需要考虑像O'Malley 这样的情况,并确定嵌入的引号是否是标点符号。当你想出一组你喜欢的规则时,然后将它们应用于输入的单词以消除所有不是标点符号的内容,然后再在哈希中查找它们。
  • @Jim 我也在考虑这些行,但问题是我需要句点以便在匹配后进行句子边界检测,所以我无法删除句子中的任何标点符号。跨度>
  • 能否提供更多示例代码?解决方案可能在于您如何解析单词,也可能在于您如何填充哈希...

标签: perl string hash


【解决方案1】:

您必须重新定义要查找的单词以排除标点符号,记住您可能希望也可能不希望消除所有标点符号(例如,您可能希望保留破折号和撇号 - 但不是单引号)。

粗略的技巧 - 不识别任何标点符号是:

$key = $word;
$key ~= s/\W//g;  # Any non-word characters are removed
if (defined $hash{$key}) { DoSomething; }

您可以细化替代命令以满足您的需要。

但确保散列键匹配的唯一方法是确保散列键匹配 - 因此您需要与您提供的内容保持一致。

【讨论】:

    【解决方案2】:

    试试:

    my $s = $word;
    $s =~ s/\W//g;
    my $k;
    for (keys %hash){
        s/\W//g;
        if($_ eq $s){
            $k = $_;
            last;
        }
    }
    if(defined $k){
        # Do Something
    }
    

    【讨论】:

      猜你喜欢
      • 2013-04-06
      • 2013-09-26
      • 1970-01-01
      • 1970-01-01
      • 2014-04-07
      • 2015-07-20
      • 1970-01-01
      • 2015-03-12
      • 1970-01-01
      相关资源
      最近更新 更多