Changeset 7406


Ignore:
Timestamp:
2004-05-25T10:05:28+12:00 (20 years ago)
Author:
davidb
Message:

Two changes made: the first to allow compact nodes to be formed ignoring
case sensitivity; the second allows for the metadata field to be a comma
separated list in the same way AZList allows.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/gsdl/perllib/classify/AZCompactList.pm

    r7175 r7406  
    147147             q^maxcompact/.*/30^, \$maxcompact,
    148148             q^doclevel/.*/top^, \$doclevel,
    149              q^onlyfirst/.*/0^, \$onlyfirst,
     149             q^onlyfirst^, \$onlyfirst,
    150150             q^freqsort/.*/0^, \$freqsort,
    151151             q^recopt/.*/-1^, \$recopt,  # Used in nested metadata such as -metadata Year/Organisation
     
    169169    $self->{'list'} = {};
    170170    $self->{'listmetavalue'} = {};
     171    $self->{'list_mvpair'} = {};
    171172    $self->{'reclassify'} = {};
    172173    $self->{'reclassifylist'} = {};
     
    214215    $self->{'list'} = {};
    215216    $self->{'listmetavalue'} = {};
     217    $self->{'list_mvpair'} = {};
    216218    $self->{'reclassify'} = {};
    217219    $self->{'reclassifylist'} = {};
     
    234236
    235237    $metaname =~ s/(\/.*)//; # grab first name in n1/n2/n3 list
     238    my @commameta_list = split(/,/, $metaname);
    236239
    237240    if ($self->{'doclevel'} =~ /^top(level)?/i)
     
    255258        = ($thissection ne "") ? "$doc_OID.$thissection" : $doc_OID;
    256259
    257     if (defined $self->{'list'}->{$full_doc_OID})
     260    if (defined $self->{'list_mvpair'}->{$full_doc_OID})
    258261    {
    259262        print $outhandle "WARNING: AZCompactList::classify called multiple times for $full_doc_OID\n";
     
    261264    $self->{'list'}->{$full_doc_OID} = []; 
    262265    $self->{'listmetavalue'}->{$full_doc_OID} = [];
    263 
    264     my $metavalues = $doc_obj->get_metadata($thissection,$metaname);
     266    $self->{'list_mvpair'}->{$full_doc_OID} = [];
     267
     268    my $metavalues = [];
     269    foreach my $cmn (@commameta_list) {
     270        my $cmvalues = $doc_obj->get_metadata($thissection,$cmn);
     271        push(@$metavalues,@$cmvalues) if (defined $cmvalues);
     272    }
     273
    265274    my $metavalue;
    266275    foreach $metavalue (@$metavalues)
     
    301310            $formatted_metavalue="";
    302311        }
     312
     313        my $mv_pair = { 'mv' => $metavalue, 'fmv' => $formatted_metavalue };
    303314        push(@{$self->{'list'}->{$full_doc_OID}},$formatted_metavalue);
    304315        push(@{$self->{'listmetavalue'}->{$full_doc_OID}} ,$metavalue);
     316        push(@{$self->{'list_mvpair'}->{$full_doc_OID}},$mv_pair);
     317
    305318
    306319        last if ($self->{'onlyfirst'});
     
    324337    map
    325338    {
    326     my $mv;
    327     foreach $mv (@{$self->{'listmetavalue'}->{$_}} )
     339    foreach my $mvp (@{$self->{'list_mvpair'}->{$_}} )
    328340    {
    329         $mtfreq{$mv}++;
     341###     print STDERR "*** plain mv = $mvp->{'mv'}\n";
     342###     print STDERR "*** format mv = $mvp->{'fmv'}\n";
     343
     344        my $metavalue = $mvp->{'mv'};
     345        $mtfreq{$metavalue}++;
    330346    }
    331347    } @$classlist_ref;
     
    336352    my $i = 1;
    337353    my $metavalue;
    338     foreach $metavalue (@{$self->{'listmetavalue'}->{$_}})
     354    foreach my $mvp (@{$self->{'list_mvpair'}->{$_}})
    339355    {
     356        my $metavalue = $mvp->{'mv'};
     357        my $cs_metavalue = $mvp->{'mv'}; # case sensative
    340358        if ($mtfreq{$metavalue} >= $self->{'mingroup'})
    341359        {
     360###     print STDERR "*** pushing on $cs_metavalue\n";
     361
    342362        push(@multiple_classlist,[$_,$i,$metavalue]);
    343363        }
    344364        else
    345365        {
    346         push(@single_classlist,[$_,$metavalue]);
     366        push(@single_classlist,[$_,$cs_metavalue]);
    347367        $metavalue =~ tr/[A-Z]/[a-z]/;
    348368        $self->{'reclassifylist'}->{"Metavalue_$i.$_"} = $metavalue;
     
    437457            if (!$formatted_node) {next;}
    438458        }
    439        
     459
    440460        $formatted_node = $self->format_metadata_for_sorting($self->{'metaname'}, $formatted_node);
    441461
     
    470490    foreach $dm_pair (@$multiple_cl_ref)
    471491    {
    472     my ($doc_OID,$mdoffset,$metavalue) = @$dm_pair;
     492    my ($doc_OID,$mdoffset,$metavalue,$cs_metavalue) = @$dm_pair;
    473493        my $listclassobj;
    474494
     
    582602    my $self = shift (@_);
    583603
    584     my @classlist =keys %{$self->{'list'}}; # list all doc oids
     604    my @classlist =keys %{$self->{'list_mvpair'}}; # list all doc oids
    585605
    586606    my ($single_cl_ref,$multiple_cl_ref) = $self->reinit(\@classlist);
     
    684704    $title =~ s/^\W+//g; # remove leading non-word chars
    685705
    686 # only want first character for classification
     706    # only want first character for classification
    687707    $title =~ m/^(.)/;
    688708    if ($1) {
Note: See TracChangeset for help on using the changeset viewer.