Я пытаюсь создать перевернутый указатель слов и их размещения в заданном корпусе документов.Пример структуры данных, к которой я стремлюсь, выглядит примерно так:
+----------+--------------------------------------------------------------+
| Word | Location |
+----------+--------------------------------------------------------------+
| 'word 1' | 'doc1' 'title', 'doc4' 'text', 'doc7' 'title' 'text' |
+----------+--------------------------------------------------------------+
Где 'title' и 'text' - это возможные местоположения
Мой код для анализа и генерации данных.is:
while (my $line = <$fh>) {
# determine doc no and location within docs
....
#iterate words in a given location within a document
foreach my $str ($line =~ /[[:alpha:]]+/g) {
push @{ $doc{$docno} }, $location;
push @{ $wordlist{$str} }, $doc{$docno};
}
}
В то время как мой код для печати данных:
foreach my $str (reverse sort { $wordlist{$a} <=> $wordlist{$b} } keys %wordlist) {
printf $fo "%-15s %-15s \n", $str, "@{ $wordlist{$str} }";
}
Тем не менее, результат:
+----------+--------------------------------------------------------------+
| Word | Location |
+----------+--------------------------------------------------------------+
| 'word1' | ARRAY(0x66d4508) ARRAY(0x66d4508) ARRAY(0x66d4508) |
+----------+--------------------------------------------------------------+
Где я ошибся?
Редактировать:
Я попытался изменить код печати на:
foreach my $str (reverse sort { $wordlist{$a} <=> $wordlist{$b} } keys %wordlist) {
printf "%-15s", $str;
@arr = @{ $wordlist{$str} };
foreach $arr (@arr)
{
print "@{ $arr }: , ";
}
print "\n";
}
Но результат:
word101 title title text text text text text text ...
Я не могу понять, как напечатать номер документа рядом с местом в указанном документе