Поиск с помощью Hash в Perl - PullRequest
0 голосов
/ 16 марта 2011

Я использую хеш, содержащий 5000 элементов, для сопоставления слов в предложении, так бывает, что когда я сопоставляю, например: if($hash{$word}){Do Something}, иногда случается, что точка встречается в слове, и даже если это совпадение, присутствует результатов периода в несоответствии. Можно ли что-нибудь сделать, чтобы игнорировать любые знаки препинания при сопоставлении с хешами?

Ответы [ 2 ]

4 голосов
/ 16 марта 2011

Вам нужно будет переопределить слова, которые вы ищите, чтобы исключить пунктуацию, помня, что вы можете или не захотите удалить все знаки препинания (например, вы можете захотеть сохранить тире и апострофы - но не одиночные кавычки).

Грубый метод - не распознавать пунктуацию:

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

Вы можете уточнить команду замены, чтобы удовлетворить ваши потребности.

Но единственный способ убедиться, чтоСовпадение хеш-ключей должно гарантировать, что хеш-ключи совпадают, поэтому вам нужно соответствовать тому, что вы предоставляете.

0 голосов
/ 16 марта 2011

Попробуйте:

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
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...