// Copyright 2018 The Chromium Authors // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef COMPONENTS_ASSIST_RANKER_EXAMPLE_PREPROCESSING_H_ #define COMPONENTS_ASSIST_RANKER_EXAMPLE_PREPROCESSING_H_ #include "components/assist_ranker/proto/example_preprocessor.pb.h" #include "components/assist_ranker/proto/ranker_example.pb.h" #include "third_party/protobuf/src/google/protobuf/map.h" namespace assist_ranker { // Preprocessor for preprocessing RankerExample into formats that is needed by // Ranker Predictors. class ExamplePreprocessor { … }; // An iterator that goes through all features of a RankerExample and converts // each field as a struct Field{full_name, value, error}. // (1) A numeric feature (bool_value, int32_value, float_value) is converted // to {feature_name, float(original_value), kSuccess}. // (2) A string feature is converted to // {feature_name_string_value, 1.0, kSuccess}. // (3) A string_value from a string list feature is converted to // {feature_name_string_value, 1.0, error_code} where non-empty list // gets error_code kSuccess, empty list gets kInvalidFeatureListIndex. // Example: // std::vector<float> ExampleToStdFloat(const RankerExample& example, // const Map& feature_indices) { // std::vector<float> vectorized(feature_indices.size()); // for (const auto& field : ExampleFloatIterator(example)) { // if (field.error == ExamplePreprocessor::kSuccess) { // const int index = feature_indices[field.fullname]; // vectorized[index] = field.value; // } // } // return vectorized; // } class ExampleFloatIterator { … }; } // namespace assist_ranker #endif // COMPONENTS_ASSIST_RANKER_EXAMPLE_PREPROCESSING_H_