Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 0a9c3f30 authored by Keisuke Kuroyanagi's avatar Keisuke Kuroyanagi
Browse files

Add method to encode probability.

Bug: 14425059
Change-Id: I3e5d359ba5fa38f1669f0e98dfae792ff53efbf8
parent c2ba0ce4
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -84,6 +84,7 @@ LATIN_IME_CORE_SRC_FILES := \
        forgetting_curve_utils.cpp \
        format_utils.cpp \
        mmapped_buffer.cpp \
        probability_utils.cpp \
        sparse_table.cpp \
        trie_map.cpp ) \
    suggest/policyimpl/gesture/gesture_suggest_policy_factory.cpp \
@@ -135,6 +136,7 @@ LATIN_IME_CORE_TEST_FILES := \
    suggest/policyimpl/dictionary/utils/buffer_with_extendable_buffer_test.cpp \
    suggest/policyimpl/dictionary/utils/byte_array_utils_test.cpp \
    suggest/policyimpl/dictionary/utils/format_utils_test.cpp \
    suggest/policyimpl/dictionary/utils/probability_utils_test.cpp \
    suggest/policyimpl/dictionary/utils/sparse_table_test.cpp \
    suggest/policyimpl/dictionary/utils/trie_map_test.cpp \
    suggest/policyimpl/utils/damerau_levenshtein_edit_distance_policy_test.cpp \
+23 −0
Original line number Diff line number Diff line
/*
 * Copyright (C) 2014, The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

#include "suggest/policyimpl/dictionary/utils/probability_utils.h"

namespace latinime {

const float ProbabilityUtils::PROBABILITY_ENCODING_SCALER = 8.58923700372f;

} // namespace latinime
+15 −0
Original line number Diff line number Diff line
@@ -17,6 +17,9 @@
#ifndef LATINIME_PROBABILITY_UTILS_H
#define LATINIME_PROBABILITY_UTILS_H

#include <algorithm>
#include <cmath>

#include "defines.h"

namespace latinime {
@@ -47,8 +50,20 @@ class ProbabilityUtils {
                + static_cast<int>(static_cast<float>(bigramProbability + 1) * stepSize);
    }

    // Encode probability using the same way as we are doing for main dictionaries.
    static AK_FORCE_INLINE int encodeRawProbability(const float rawProbability) {
        const float probability = static_cast<float>(MAX_PROBABILITY)
                + log2f(rawProbability) * PROBABILITY_ENCODING_SCALER;
        if (probability < 0.0f) {
            return 0;
        }
        return std::min(static_cast<int>(probability + 0.5f), MAX_PROBABILITY);
    }

 private:
    DISALLOW_IMPLICIT_CONSTRUCTORS(ProbabilityUtils);

    static const float PROBABILITY_ENCODING_SCALER;
};
}
#endif /* LATINIME_PROBABILITY_UTILS_H */
+33 −0
Original line number Diff line number Diff line
/*
 * Copyright (C) 2014 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

#include "suggest/policyimpl/dictionary/utils/probability_utils.h"

#include <gtest/gtest.h>

#include "defines.h"

namespace latinime {
namespace {

TEST(ProbabilityUtilsTest, TestEncodeRawProbability) {
    EXPECT_EQ(MAX_PROBABILITY, ProbabilityUtils::encodeRawProbability(1.0f));
    EXPECT_EQ(MAX_PROBABILITY - 9, ProbabilityUtils::encodeRawProbability(0.5f));
    EXPECT_EQ(0, ProbabilityUtils::encodeRawProbability(0.0f));
}

}  // namespace
}  // namespace latinime