开发者

Using perl, how do I search a text file for _NN (at the end of a word) and print the word in front?

开发者 https://www.devze.com 2023-03-03 10:23 出处:网络
This gives the whole line: #!/usr/bin/perl $file = \'output.txt\'; open(txt, $file); while($lin开发者_如何学编程e = <txt>) {

This gives the whole line:

#!/usr/bin/perl

$file = 'output.txt';
open(txt, $file);
while($lin开发者_如何学编程e = <txt>) {
  print "$line" if $line =~ /_NN/;
}
close(txt);


#!/usr/bin/perl
use strict;
use warnings FATAL => "all";
binmode(STDOUT, ":utf8") || die;

my $file = "output.txt";
open(TEXT, "< :utf8", $file)  || die "Can't open $file: $!";
while(<TEXT>) {
    print "$1\n" while /(\w+)_NN\b/g;
}
close(TEXT)                  || die "Can't close $file: $!";


Your answer script reads a bit awkwardly, and has a couple of potential errors. I'd rewrite the main logic loop like so:

foreach my $line (grep { /expend_VB/ } @sentences) {
   my @nouns = grep { /_NN/ } split /\s+/, $line; 
   foreach my $word (@nouns) {
      $word =~ s/_NN//;
      print "$word\n";
   }
   print "$line\n" if scalar(@nouns);
}

You need to put the my declaration inside the loop - otherwise it will persist longer than you want it to, and could conceivably cause problems later.

foreach is a more common perl idiom for iterating over a list.


print "$1" if $line =~ /(\S+)_NN/;


#!/usr/bin/perl
use strict;
use warnings FATAL => "all";
my $search_key = "expend";       ## CHANGE "..." to <>

open(my $tag_corpus, '<', "ch13tagged.txt") or die $!;

my @sentences = <$tag_corpus>; # This breaks up each line into list
my @words;

for (my $i=0; $i <= @sentences; $i++) {
    if ( defined( $sentences[$i] ) and $sentences[$i] =~ /($search_key)_VB.*/i) {
        @words = split /\s/,$sentences[$i]; ## \s is a whitespace

        for (my $j=0; $j <= @words; $j++) {  
#FILTER if word is noun:            
            if ( defined( $words[$j] ) and $words[$j] =~ /_NN/) {


#PRINT word and sentence:
                print "**",split(/_\S+/,$words[$j]),"**", "\n";
                print split(/_\S+/,$sentences[$i]), "\n"

            }
        } ## put print sentences here to print each sentence after all the nouns inside
    }
}

close $tag_corpus     || die "Can't close $tag_corpus: $!";
0

精彩评论

暂无评论...
验证码 换一张
取 消