ヘッダスクリプトに一致するPerlルールに「例外」単語を追加する

ヘッダスクリプトに一致するPerlルールに「例外」単語を追加する

私はこのPerlスクリプト(Jeff Schallerのおかげで)を使って、2つの別々のcsvファイルのタイトルフィールドにある3つ以上の単語を次のように一致させました。

別のcsvファイル内のフィールドに3つ以上の単語を一致させます。

スクリプトは次のとおりです。

#!/usr/bin/env perl

my @csv2 = ();
open CSV2, "<csv2" or die;
@csv2=<CSV2>;
close CSV2;

my %csv2hash = ();
for (@csv2) {
  chomp;
  my ($title) = $_ =~ /^.+?,\s*([^,]+?),/; #/ match the title 
  $csv2hash{$_} = $title;
}

open CSV1, "<csv1" or die;
while (<CSV1>) {
  chomp;
  my ($title) = $_ =~ /^.+?,\s*([^,]+?),/; #/ match the title 
  my @titlewords = split /\s+/, $title;    #/ get words
  my $desired = 3;
  my $matched = 0;
  foreach my $csv2 (keys %csv2hash) {
    my $count = 0;
    my $value = $csv2hash{$csv2};
    foreach my $word (@titlewords) {
      ++$count if $value =~ /\b$word\b/i;
      last if $count >= $desired;
    }
    if ($count >= $desired) {
      print "$csv2\n";
      ++$matched;
    }
  }
  print "$_\n" if $matched;
}
close CSV1;

タイトルの間の特定の単語を無視し、一致する単語として分類したくないことに気づきました。比較する前に、sedを使用してcsvファイルを削除しましたが、プロセスからデータが失われるため、理想的ではありません。このPerlスクリプトに例外と見なされる単語をどのように追加しますか?たとえば、スクリプトがタイトルを一致させるときに3つの個々の単語を無視してルールの例外になるようにしたいとしますand ifthe

ベストアンサー1

旅行後

my @titlewords = split /\s+/, $title;    #/ get words

配列から単語を削除するコードを追加します。

my @new;
foreach my $t (@titlewords){
    push(@new, $t) if $t !~ /^(and|if|the)$/i;
}
@titlewords = @new;

おすすめ記事