я на самом деле имеют эту структуру данных (многомерный хэш-таблицы):поиска в многомерном хэш Perl
$VAR1 = {
'cat' => {
"félin" => '0.500000',
'chat' => '0.600000'
},
'rabbit' => {
'lapin' => '0.600000'
},
'canteen' => {
"ménagère" => '0.400000',
'cantine' => '0.600000'
}
};
Моя цель состоит в том, чтобы читать токенизированный текст, и для каждого слова мне нужно найти перевод (s). Для моих лексем, я прочитал мой текст и создать массив так:
##store each word to translate in a table
while(my $text_to_translate = <TEXTTOTRANSLATE>)
{
my @temp = split(/ /, $text_to_translate);
push(@tokens, @temp);
}
Моя проблема заключается, чтобы найти лучший способ (и самый быстрый) для поиска в bidimensionnal хэш-таблицы и печать возможный вариант перевода (s):
Я люблю свою кошку [chat; félin] и мой кролик [lapin].
На данный момент у меня было создать эту петлю, но он did'nt работать хорошо, и я думаю, что это не самый лучший способ:
foreach my $source (sort keys %hash) {
foreach my $target (keys %{ $hash{$source} }) {
my $val = $source;
##loop into each tokens
foreach (@tokens) {
my $actualWord = $_;
if($val eq $actualWord){
print $actualWord."==>".$target."\n";
}
else{
print $actualWord."\n";
next;
}
}
}
}
Благодарим за вашу помощь.
Он хорошо работает с Hash, который вы создаете выше цикла; но когда я использую этот код для автоматического заполнения моего хеша, он не работает. Это мой код: 'my% hash; в то время как (мой $ текст =) { \t если ($ текст = ~ /(^(.+) \ | \ | \ | \ (+.) | \ | \ | (. +) $) /) \t { \t my $ sourceWord = $ 2; \t \t my $ targetWord = $ 3; \t \t my $ freq = $ 4; \t \t \t \t $ hash {$ sourceWord} {$ targetWord} = $ freq; \t \t} } ' –
Поскольку мой сценарий использует' ссылки' perl. См. Http://pastebin.com/AEcsdsgM –
См. Http://perldoc.perl.org/perlref.html и http://perldoc.perl.org/perlreftut.html –