Печать Хэшей Массивов Хэшей Массивов - PullRequest
0 голосов
/ 18 ноября 2018

Я пытаюсь создать перевернутый указатель слов и их размещения в заданном корпусе документов.Пример структуры данных, к которой я стремлюсь, выглядит примерно так:

+----------+--------------------------------------------------------------+
|   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 ...

Я не могу понять, как напечатать номер документа рядом с местом в указанном документе

1 Ответ

0 голосов
/ 19 ноября 2018

Ваша структура данных выбросила информацию, которую вы ищете.

Просто сделайте это:

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 $worldlist{Sstr}->@*, {
            docno => $docno,
            location => $location
        };
    }
}

Это делает работу по распечатке вашей структуры данных тривиальной.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...