2016-06-23 23 views
1

などの単語の種類を取得するためのPerlプログラム、私はこのようになり、入力ファイル(INPUT.TXT)からの出力として単語の種類を取得しようとしています出力

入力ファイル

John N N 
loved V 
Mary N N 
. S 

He N 
was V 
eating V 
in P P 
a A A 
restaurant N 
. S 

The A A 
cats N N 
killed V 
the A A 
rats N N 
. S 

I N 
am V 
playing V 
. S 

入力ファイルには3つの列があります。最初の列は単語で、次の2つの列は単語の種類です。すべての列はタブで区切られ、その間には空白行があります。 プログラムの目的は、 "ing"、 "ed"、 "s"などの単語の終わりと一致させ、4番目の列に単語の種類を印刷することです。予想される出力は

の予想される出力

John N N 
loved V  V 
Mary N N 
. S 

He N 
was V 
eating V  V 
in P P 
a A A 
restaurant N 
. S 

The A A 
cats N N N 
killed V  V 
the A A 
rats N N N 
. S 

I N 
am V 
playing V  V 
. S 

私は、入力ファイル自体を取得していますように私は何か間違ったことをやっていると信じてしかし、私は使用していたコードは、このです

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

open my $fh, '<' , 'input.txt' or die $!; 
while (<$fh>) { 
    chomp ; 
    print $_; 
    if (/ing\s*$/ or /ed\s*$/) { 
     print ' V'; 
    } 
    if (/s\s*$/) { 
     print ' N'; 
    } 
    print "\n"; 
    } 
close($fh); 

になります出力として。いくつかの指示で私を助けてください。前もって感謝します。

+2

'/^\ w * ing \ s/'や'/^ \'のようなものは、行末ではなく最初の単語の最後にあります。 w * ed \ s/'は仕事をするだろうか? – Dada

+0

@Dadaご返信ありがとうございます。しかし、それは役に立たなかった。私はハッシュの単語の最初の列を格納し、特に単語の終わりとそれらを比較しようとすると思います。それがうまくいくかどうかは分かりません。 – Nandini143

+0

@Dadaあなたの提案はうまくいきます。あなたはOPのスクリプトの '/...$/'問題を正しく見つけました。 – PerlDuck

答えて

3

あなたはほとんど正しく、Dadaは彼のコメントで正しい方向にあなたを指摘しました。

パターン任意の空白が続くストリング'ing'ため/ing\s*$/チェック(\s*)、次いで、エンド・オブ・ライン($)。たとえば、次のように入力すると、入力した内容と一致しません。 'eating'行が終了する前にタブおよびの文字がVにあります。

このパターンを/^\w*ing\b/に変更する必要があります。それはラインの

  • 開始^
  • (AZ、0-9のように)いくつかのオプションの単語文字\w*
  • 文字列'ing'
  • 単語の境界を意味し、非する手紙からの変化、すなわち手紙\b

スクリプト:

#!/usr/bin/env perl 

use strict; 
use warnings; 

open my $fh, '<', 'input.txt' or die $!; 
while (<$fh>) { 
    chomp; 
    print $_; 
    if (/^\w*ing\b/ or /^\w*ed\b/) { 
     print "\tV"; 
    } 
    if (/^\w*s\b/) { 
     print "\tN"; 
    } 
    print "\n"; 
} 
close($fh); 

これはほとんど所望の出力を与えるが、'was'で失敗:それは名詞と考えられているので、sで終了し、それは別の問題です:ところで

John N N 
loved V V 
Mary N N 
. S 

He N 
was V N 
eating V V 
in P P 
a A A 
restaurant N 
. S 

The A A 
cats N N N 
killed V V 
the A A 
rats N N N 
. S 

I N 
am V 
playing V V 
. S 

Dada's suggestionが同じになります結果。彼は/^\w*ing\b/の代わりに/^\w*ing\s/というパターンを提案しました。これは'ing'の後に入力すると常に空白\sがあるためです。

関連する問題