我实际上有这个数据结构(多维哈希表):
$VAR1 = {
'cat' => {
"félin" => '0.500000',
'chat' => '0.600000'
},
'rabbit' => {
'lapin' => '0.600000'
},
'canteen' => {
"ménagère" => '0.400000',
'cantine' => '0.600000'
}
};
我的目标是阅读一个标记化的文本,并为每个单词我需要找到翻译。对于我的令牌,我阅读了我的文本并创建了一个类似的数组:
##store each word to translate in a table
while(my $text_to_translate = <TEXTTOTRANSLATE>)
{
my @temp = split(/ /, $text_to_translate);
push(@tokens, @temp);
}
我的问题是找到最好的方式(并且最快)查找bidimensionnal哈希表并打印可能的翻译:
我爱我的猫[聊天;félin]和我的兔子[lapin]。
现在,我已经创建了这个循环,但它确实运行不好,我认为这不是最好的方法:
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;
}
}
}
}
感谢您的帮助。
答案 0 :(得分:1)
我会做什么:
#!/usr/bin/env perl
use strict; use warnings;
my $hash = {
'cat' => {
"félin" => '0.500000',
'chat' => '0.600000'
},
'rabbit' => {
'lapin' => '0.600000'
},
'canteen' => {
"ménagère" => '0.400000',
'cantine' => '0.600000'
}
};
my $text = "I love my cat and my rabbit canteen !\n";
foreach my $word (split /\s/, $text) {
print $word;
exists $hash->{$word}
and print "[" . join(";", keys %{ $hash->{$word} }) . "]";
print " ";
}
print "\n";
输出:
I love my cat[chat;félin] and my rabbit[lapin] canteen[cantine;ménagère] !