2016-06-23 2 views
1

내가 입력 파일과 같습니다 (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 

입력 파일에는 세 개의 열이 있습니다. 첫 번째 열은 단어이고 다음 두 열은 단어 유형입니다. 모든 열은 탭으로 구분되며 사이에 빈 줄이 있습니다. 프로그램의 목적은 "ing", "ed"및 "s"와 같은 단어 끝을 일치시키고 네 번째 열에 단어 유형을 인쇄하는 것입니다. 예상 출력이 예상 출력

될 것

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

'ing'또는 'ed'는 줄의 끝에 있지 않고 첫 단어의 끝에 있으므로'/^\ w * ing \ s /'와'/^승 * ed \ s /'어쩌면 그 일을 할 것 인가? – Dada

+0

@Dada 답장을 보내 주셔서 감사합니다. 그러나 그것은 도움이되지 않았습니다.나는 해시에 단어의 첫 번째 열을 저장하고 그들을 특히 단어 결말과 비교하려고 노력해야한다고 생각한다. 그게 효과가 있는지 확실하지 않습니다. – Nandini143

+0

@Dada 귀하의 제안은 정상적으로 작동합니다. OP 스크립트에서'/...$/ '문제를 정확하게 발견했습니다. – PerlDuck

답변

3

당신은 거의 옳았으며 Dada은 그의 의견에 올바른 방향으로 당신을 지적했습니다. 다음 선택적 공백 (\s*) 및 뒤에 문자열 'ing'위한

패턴 검사 /ing\s*$/ 줄 끝 ($). 예를 들어 다음과 같으므로 입력 한 내용과 일치하지 않습니다. 'eating' 행이 끝나기 전에 V 문자가 붙은 탭 이 있습니다.

이 패턴을 /^\w*ing\b/으로 변경해야합니다. 그것은 (AZ처럼, 0-9) \w*

  • 문자열 'ing'
  • 단어 경계, 즉 편지에서 변화가이 비 라인의

    • 시작 ^
    • 일부 선택적인 단어 문자를 의미합니다 문자 \b

    스크립트 :

    ,653,210

    거의 원하는 출력을 제공하지만 'was'에 실패 그것은 명사 간주 따라서 s 끝나고하지만 다른 문제가있다 : Btw는

    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 있기 때문입니다.