Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 删除停止字并保存新文件Perl_Regex_Perl_Split_Stop Words - Fatal编程技术网

Regex 删除停止字并保存新文件Perl

Regex 删除停止字并保存新文件Perl,regex,perl,split,stop-words,Regex,Perl,Split,Stop Words,我创建了一个Perl文件,以加载到一个“停止字”数组中 然后我将包含“.ner”文件的目录加载到其中。 每个文件被打开,每个单词被分割并与停止文件中的单词进行比较。 如果该单词与该单词匹配,则会将其更改为“”(无内容并被删除) 然后我将文件复制到另一个位置。因此,我可以区分有停止词的文件和没有停止词的文件。 但是这是否会将文件更改为现在不包含停止字,还是会恢复为原始文件 #!/usr/bin/perl #use strict; #use warnings; my @stops; my @fi

我创建了一个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;
#/usr/bin/perl
#严格使用;
#使用警告;
我的@stops;
我的@文件;
使用文件::复制;
打开(STOPWORD,“/Users/jen/stopWordList.txt”)或死“无法打开:$!\n”;
@停止=;
while()#将每一行读入$_
{
chomp@stops;#从中删除换行符$_
按@stops,$\u;#将该行添加到@triggers
}
关闭停止字;
$dirtoget=“/Users/jen/temp/”;
opendir(IMD,$dirtoget)| | die(“无法打开目录”);
@thefiles=readdir(IMD);
foreach$f(@thefiles){
如果($f=~m/\.ner$/){
打印$f,“\n”;
打开(文件“/Users/jen/temp/$f”)或死“无法打开文件”;
如果(文件eq“”){
关闭文件;
}
否则{
而(){
foreach$word(拆分(/\\124;/)){
外汇兑换$x(@站){
如果($x=~m/\b\Q$word\E\b/){
$word='';
复制(“/Users/jen/temp/$f”,“/Users/jen/correct/$f”)或死“复制失败:$!”;
关闭文件;
} 
}
}
}
}
}
}
closedir(IMD);
出口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|'
“| NN | O Woman | NNP | O跳跃| VBD | O for | IN | O life | NN | O firebomb | NN | O攻击| O-| | | O国家| NNP | I-ORG新闻| NNP | I-ORG | | I-ORG | | I-ORG | | I-ORG | | I-ORG | | I-ORG | I-ORG | | | I-ORG | I

我是否应该概述单词的拆分位置,即:split(/|/)?

没有参数的
split
相当于
split(“”,$)

由于希望在
|
上拆分行,因此需要执行以下操作:

split/\|/
您应始终使用: 严格使用; 使用警告

使用三个参数打开并测试打开是否失败

如前所述,codaddict
不带参数的拆分相当于拆分(“”,$。

这是一个完成这项工作的建议(据我所知,你想要什么)

#/usr/bin/perl
严格使用;
使用警告;
使用5.10.1;
我的@stops=qw(把你的停止词放在这里);
我的%stops=map{$\=>1}@stops;
我的文件;
my$path='/Users/jen/temp/';
my$out=$path.outputfile';
打开我的$fout,“>”,$out或die“无法打开用于写入的$out:$!”;
foreach my$文件(@thefiles){
下一步除非$file=~/\.ner$/;
打开我的$fh,“@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”)| | die(“cant”);打印文件$whole|u文件;

这将从您的文件中删除stops并创建一个副本。只需调用give$duplicate a name:)

这段代码是否可以编译?它似乎缺少一些结束括号。请添加完整代码并指定更好一点的问题是什么?目前似乎没有任何地方写入更改的内容。@superflin完整代码是上面关于格式的问题很抱歉:-)我有
#!/usr/bin/perl使用strict;使用warnings;使用5.10.1;
在我的代码中,我只是不认为把它放在我的问题中是相关的。写在一个新文件中怎么样?或者附加这个文件,我想现在我只是将原始文件复制到另一个文件夹,但我想复制文件文件减去停止字后,放入新文件夹。?!
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;