Changeset 16206


Ignore:
Timestamp:
2008-06-26T13:52:53+12:00 (16 years ago)
Author:
mdewsnip
Message:

Added support for a "-split_greenstone_dates" option that builds a hierarchy from Greenstone "YYYYMMDD" date metadata values.

Location:
gsdl/trunk/src/recpt
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • gsdl/trunk/src/recpt/dynamicclassifieraction.cpp

    r16196 r16206  
    198198  text_t classifier_node_OID = args["dcn"];
    199199  text_t classifier_node_metadata_value = classifier_node_OID;
     200  text_t classifier_node_metadata_value_filter = classifier_node_metadata_value + "|*";
    200201
    201202  // Split the classifier node OID into its components, then remove any we've already dealt with
     
    206207    classifier_node_OID_parts_remaining.pop_front();
    207208
    208     // Update classifier_node_metadata_value to remove any grouping node components
     209    // Update classifier_node_metadata_value (and consequently the filter) to remove the grouping node component
    209210    joinchar (classifier_node_OID_parts_remaining, '|', classifier_node_metadata_value);
     211    classifier_node_metadata_value_filter = classifier_node_metadata_value + "|*";
    210212  }
    211213  if (classifier_options["-use_hlist_at_top"] == "1")
    212214  {
    213215    classifier_node_OID_parts_remaining.pop_front();
     216  }
     217
     218  // If "-split_greenstone_dates" is on the metadata value and filter doesn't quite match the OID -- fix this
     219  if (classifier_options["-split_greenstone_dates"] == "1")
     220  {
     221    classifier_node_metadata_value.replace("|", "");
     222    classifier_node_metadata_value_filter = classifier_node_metadata_value;
     223    classifier_node_metadata_value_filter += ((classifier_node_metadata_value_filter.size() == 8) ? "|*" : "*");
    214224  }
    215225
     
    217227  if (classifier_node_metadata_value == "")
    218228  {
    219     output_child_classifier_nodes (classifier_node_OID, classifier_node_metadata_value, current_metadata_value_filter, classifier_node_indent, classifier_options, args, collectproto, browsers, disp, outconvert, textout, logout);
     229    output_child_classifier_nodes (classifier_node_OID, "", current_metadata_value_filter, classifier_node_indent, classifier_options, args, collectproto, browsers, disp, outconvert, textout, logout);
    220230  }
    221231
     
    227237
    228238    // Output the child classifier nodes
    229     text_t metadata_value_filter = classifier_node_metadata_value + "|*";
    230     output_child_classifier_nodes (classifier_node_OID, classifier_node_metadata_value, metadata_value_filter, classifier_node_indent, classifier_options, args, collectproto, browsers, disp, outconvert, textout, logout);
     239    output_child_classifier_nodes (classifier_node_OID, classifier_node_metadata_value, classifier_node_metadata_value_filter, classifier_node_indent, classifier_options, args, collectproto, browsers, disp, outconvert, textout, logout);
    231240
    232241    // Get the document nodes at this level
     
    316325  while (metadata_value_iterator != metadata_values_response.docInfo.end())
    317326  {
    318     text_t metadata_value = (*metadata_value_iterator).OID;
    319 
    320     // Is this metadata value hierarchical?
    321     text_t::iterator hierarchy_split_position = findchar(metadata_value.begin(), metadata_value.end(), '|');
    322     if (hierarchy_split_position != metadata_value.end())
    323     {
    324       // Yes, so use the first part of the hierarchy only
    325       metadata_value = substr(metadata_value.begin(), hierarchy_split_position);
    326     }
    327 
    328     // Create a node for this metadata value if we haven't seen it before
    329     if (hlist_classifier_nodes.find(metadata_value) == hlist_classifier_nodes.end())
    330     {
    331       hlist_classifier_nodes[metadata_value] = 0;
     327    text_t hierarchical_metadata_value = split_metadata_value ((*metadata_value_iterator).OID, classifier_options);
     328
     329    // Assume for now we're always at the top
     330    text_t hlist_metadata_value = hierarchical_metadata_value;
     331
     332    // Determine the label for the hlist classifier node from the metadata value
     333    text_tarray hlist_metadata_value_parts;
     334    splitchar (hlist_metadata_value.begin(), hlist_metadata_value.end(), '|', hlist_metadata_value_parts);
     335    text_t hlist_classifier_node_label = hlist_metadata_value_parts.front();
     336
     337    // Create a node for this value if we haven't seen it before
     338    if (hlist_classifier_nodes.find(hlist_classifier_node_label) == hlist_classifier_nodes.end())
     339    {
     340      hlist_classifier_nodes[hlist_classifier_node_label] = 0;
    332341    }
    333342
    334343    // Increment the occurrence count
    335     hlist_classifier_nodes[metadata_value] += (*metadata_value_iterator).result_num;
     344    hlist_classifier_nodes[hlist_classifier_node_label] += (*metadata_value_iterator).result_num;
    336345
    337346    metadata_value_iterator++;
     
    446455  while (metadata_value_iterator != metadata_values_response.docInfo.end())
    447456  {
    448     text_t metadata_value = (*metadata_value_iterator).OID;
     457    text_t hierarchical_metadata_value = split_metadata_value ((*metadata_value_iterator).OID, classifier_options);
     458    text_t classifier_node_hierarchical_metadata_value = split_metadata_value (classifier_node_metadata_value, classifier_options);
    449459
    450460    // We need to remove the current position from the metadata value to leave the child metadata value
    451     text_t child_metadata_value = metadata_value;
    452     if (starts_with(metadata_value, classifier_node_metadata_value + "|"))
    453     {
    454       child_metadata_value = substr(metadata_value.begin() + (classifier_node_metadata_value + "|").size(), metadata_value.end());
     461    text_t child_metadata_value = hierarchical_metadata_value;
     462    if (starts_with(hierarchical_metadata_value, classifier_node_hierarchical_metadata_value + "|"))
     463    {
     464      child_metadata_value = substr(hierarchical_metadata_value.begin() + (classifier_node_hierarchical_metadata_value + "|").size(), hierarchical_metadata_value.end());
    455465    }
    456466
     
    499509
    500510
     511text_t dynamicclassifieraction::split_metadata_value (text_t metadata_value, text_tmap classifier_options)
     512{
     513  text_t hierarchical_metadata_value = metadata_value;
     514
     515  // Add hierarchy separators into Greenstone date values (YYYYMMDD -> YYYY|MM|DD)
     516  if (classifier_options["-split_greenstone_dates"] == "1")
     517  {
     518    if (metadata_value.size() == 4 || metadata_value.size() == 6 || metadata_value.size() == 8)
     519    {
     520      // Add year
     521      hierarchical_metadata_value = substr(metadata_value.begin(), metadata_value.begin() + 4);
     522      if (metadata_value.size() == 6 || metadata_value.size() == 8)
     523      {
     524    // Add month
     525    hierarchical_metadata_value += "|" + substr(metadata_value.begin() + 4, metadata_value.begin() + 6);
     526    if (metadata_value.size() == 8)
     527    {
     528      // Add day
     529      hierarchical_metadata_value += "|" + substr(metadata_value.begin() + 6, metadata_value.begin() + 8);
     530    }
     531      }
     532    }
     533  }
     534
     535  return hierarchical_metadata_value;
     536}
     537
     538
    501539void dynamicclassifieraction::display_classifier_nodes (FilterResponse_t classifier_nodes_response,
    502540                                text_t classifier_nodes_type,
  • gsdl/trunk/src/recpt/dynamicclassifieraction.h

    r16115 r16206  
    9090                      ostream &textout, ostream &logout);
    9191
     92  text_t split_metadata_value (text_t metadata_value, text_tmap classifier_options);
     93
    9294  void display_classifier_nodes (FilterResponse_t classifier_nodes_response,
    9395                 text_t classifier_nodes_type,
Note: See TracChangeset for help on using the changeset viewer.