1

「ストップワード」の配列をロードするPerlファイルを作成しました。

次に、「。ner」ファイルが含まれているディレクトリにロードします。各ファイルが開かれ、各単語が分割され、停止ファイル内の単語と比較されます。単語が単語と一致する場合は、「」に変更されます(何もありません-削除されます)。次に、ファイルを別の場所にコピーします。したがって、ストップワードのあるファイルとストップワードのないファイルを区別できます。しかし、これによりファイルがストップワードを含まないように変更されますか、それとも元に戻りますか?

#!/usr/bin/perl

#use strict;
#use warnings;

my @stops;
my @file;

use File::Copy;

open( STOPWORD, "/Users/jen/stopWordList.txt" ) or die "Can't Open: $!\n";

@stops = <STOPWORD>;
while (<STOPWORD>)    #read each line into $_
{
    chomp @stops;     # Remove newline from $_
    push @stops, $_;  # add the line to @triggers
}

close STOPWORD;

$dirtoget="/Users/jen/temp/";

opendir(IMD, $dirtoget) || die("Cannot open directory");

@thefiles= readdir(IMD);

foreach $f (@thefiles){
    if ($f =~ m/\.ner$/){
        print $f,"\n";

        open (FILE, "/Users/jen/temp/$f")or die"Cannot open FILE"; 

        if ( FILE eq "" ) {
            close FILE;
        }
        else{
            while (<FILE>) {

               foreach $word(split(/\|/)){

                    foreach $x (@stops) {
                       if  ($x =~ m/\b\Q$word\E\b/) {
                            $word = '';   
             copy("/Users/jen/temp/$f","/Users/jen/correct/$f")or die "Copy failed: $!";
                    close FILE;
                    } 
                    }
                }
            }
        }
    }
}
closedir(IMD);
exit 0;

分割して比較しているファイルの形式は次のとおりです。

'<title>|NN|O Woman|NNP|O jumped|VBD|O for|IN|O life|NN|O after|IN|O firebomb|NN|O attack|NN|O -|:|O National|NNP|I-ORG News|NNP|I-ORG ,|,|I-ORG Frontpage|NNP|I-ORG -|:|I-ORG Independent.ie</title>|NNP|'

単語を分割する場所、つまりsplit(/ | /)の概要を説明する必要がありますか?

4

3 に答える 3

2

常に使用する必要があります:厳密に使用します。警告を使用します。

3つのargsopenを使用し、openingの失敗をテストします。

言ったようにcodaddictA split with no arguments is equivalent to split(' ', $_).

これがその仕事を達成するための提案です(私があなたが何を望んでいたかをよく理解している限り)。

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

my @stops = qw(put here your stop words);
my %stops = map{$_ => 1} @stops;

my @thefiles;

my $path = '/Users/jen/temp/';
my $out = $path.'outputfile';
open my $fout, '>', $out or die "can't open '$out' for writing : $!";

foreach my $file(@thefiles) {
    next unless $file =~ /\.ner$/;
    open my $fh, '<', $path.$file or die "can't open '$file' for reading : $!";
    my @lines = <$file>;
    close $fh;
    foreach my $line(@lines) {
        my @words = split/\|/,$line;
        foreach my $word(@words) {
            $word = '' if exists $stops{$word};
        }
        print $fout join '|',@words;
    }
}
close $out;
于 2011-03-02T13:05:32.130 に答える
1

引数のないAsplitは、と同等split(' ', $_)です。

行を分割したいので、次の|ことを行う必要があります。

split/\|/
于 2011-03-02T11:58:54.563 に答える
0

@ jenniem001、

open FILE, ("<$fh")||die("cant");undef $/;my $whole_file = <FILE>;foreach my $word (@words){$whole_file=~s/\b\Q$word\E\b//ig;}open FILE (">>$duplicate")||die("cant");print FILE $whole_file;

これにより、ファイルからストップが削除され、重複が作成されます。$duplicateに名前を付けるだけです:)

于 2011-03-08T16:46:57.503 に答える