2011-03-16 5 views
0

문장에서 단어를 일치시키는 5000 개의 항목이 포함 된 해시를 사용하고 있는데 일치하는 경우 예 : if($hash{$word}){Do Something} 가끔 단어에 마침표가 나타나고 마침표가 일치하면 일치하지 않는 결과를 찾습니다. 해시와 일치 할 때 어떤 구두점을 무시하도록 수행 할 수 있습니까?Perl에서 해시로 검색

+0

. 당신이 좋아하는 규칙들을 생각 해냈다면 입력 단어에 적용하여 해쉬에서 그들을 찾기 전에 구두점이 아닌 모든 것을 제거하십시오. –

+0

@Jim 나는 또한 그 라인들에 대해서 생각하고있다. 그러나 문제는 문장의 구두점을 제거 할 수 없기 때문에 문장 경계 검출을 위해서 마침표가 필요하다는 것이다. –

+1

더 많은 샘플 코드를 제공 할 수 있습니까? 해결책은 단어를 파싱하는 방법에 있거나 해시를 채우는 방법에있을 수 있습니다. – RickF

답변

4

구두점을 제외하기 위해 찾는 단어를 다시 정의해야합니다 (예 : 대시 및 아포스트로피는 사용하고 작은 따옴표는 사용하지 않을 수도 있음).

조 기술 - 구두점을 인식하지 것은 :

$key = $word; 
$key ~= s/\W//g; # Any non-word characters are removed 
if (defined $hash{$key}) { DoSomething; } 

당신은 당신의 요구를 충족하기 위해 대체 명령을 구체화 할 수 있습니다.

그러나 해시 키가 일치하는지 확인하는 유일한 방법은 해시 된 키가 일치하는지 확인하는 것입니다. 따라서 제공하는 내용과 일치해야합니다.

+0

감사합니다. @Jonathan. –

0

시도 :

당신이 포함 된 견적 문장 부호인지 아닌지 O'Malley``같은 상황을 고려하여 결정해야합니다
my $s = $word; 
$s =~ s/\W//g; 
my $k; 
for (keys %hash){ 
    s/\W//g; 
    if($_ eq $s){ 
     $k = $_; 
     last; 
    } 
} 
if(defined $k){ 
    # Do Something 
} 
관련 문제