2012-11-19 99 views
1

我有一個正在讀取的文件,然後將其更改爲數組,然後將其計數並放入哈希表中。然後,我讀入另一個文件,該文件將數據停用在單詞中。我想取停止詞的數組並將其與哈希表進行比較,如果停用詞中的單詞是匹配的,則將其從哈希表中刪除。將數組與哈希映射進行比較,並從哈希中刪除哈希元素

我很好奇我可以用perl來實現這個功能。我不會發布我的代碼,因爲我不想讓別人寫我的代碼。我只是想知道我該如何解決這個問題。如果有人有一個很好的網站,我可以參考,可以幫助。

+0

如果你不發佈代碼,但是你至少可以解釋你嘗試過的東西,這很困難。就個人而言,我會從數組中刪除停用詞,然後製作散列。 – gpojd

+0

@gpojd你爲什麼喜歡這樣做?我可以做到這一點。只需移動數組即可散列。將數組與數組進行比較並更容易地刪除元素? –

回答

3

試試這個:

my %table = some_sub_to_populate_table(); 
my @stop_words = some_sub_to_get_stopwords(); 
for my $stop_word (@stop_words) { 
    delete $table{ $stop_word }; 
} 
+0

我會試試這個,我問別人他們說比較容易比較數組和數組,但我認爲比較一個數組和哈希表並且刪除哈希而不是每次限制一個數組似乎更合乎邏輯。 –

1

這應該工作,太

open FH,"<".$PATH or die $!; 
my $table={}; 
while(<FH>){ 
    $table->{$_}=VALUE 
} 
close FH; 
open FH,"<".$PATH2 or die $!; 
my @arr=<FH>; 
close $FH; 
delete $table{$_} foreach(@arr); 

問候

+2

你應該使用'open'的三個參數版本以及詞法文件句柄。因此,例如'打開我的$ fh,'<',$ filename或者死亡$ !;' – dgw

+1

您正在構建一個hashref,然後嘗試刪除一個散列中的鍵,在您的示例中應該更精確。 – dgw

1

我最初將使用簡單的循環液,但我也有興趣在其他方式去做吧。也許你可以試試這個嗎?

my %new_table = map { $_ => $old_table{$_} } grep { not $_ ~~ @stop_words } keys %old_table; 

1:它使用grep的得到所有的哈希鍵不@stop_words:

grep { not $_ ~~ @stop_words } keys %old_table; 

2:使用那些按鍵,它將使用地圖一個新的哈希:

my %new_table = map { $_ => $old_table{$_} } 

如果你想將它們轉換爲數組,你可以使用array_minus Array::Utils