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

Commit 63742fe5 authored by Satoshi Kataoka's avatar Satoshi Kataoka Committed by Android Git Automerger
Browse files

am d2a04e1e: Merge "Move typing policy to AOSP"

* commit 'd2a04e1e':
  Move typing policy to AOSP
parents 6531bcdc d2a04e1e
Loading
Loading
Loading
Loading
+6 −1
Original line number Original line Diff line number Diff line
@@ -31,7 +31,8 @@ LOCAL_C_INCLUDES += \
    $(LATIN_IME_SRC_FULLPATH_DIR)/suggest \
    $(LATIN_IME_SRC_FULLPATH_DIR)/suggest \
    $(LATIN_IME_SRC_FULLPATH_DIR)/suggest/core/dicnode \
    $(LATIN_IME_SRC_FULLPATH_DIR)/suggest/core/dicnode \
    $(LATIN_IME_SRC_FULLPATH_DIR)/suggest/core/policy \
    $(LATIN_IME_SRC_FULLPATH_DIR)/suggest/core/policy \
    $(LATIN_IME_SRC_FULLPATH_DIR)/suggest/core/session
    $(LATIN_IME_SRC_FULLPATH_DIR)/suggest/core/session \
    $(LATIN_IME_SRC_FULLPATH_DIR)/suggest/policyimpl/typing


LOCAL_CFLAGS += -Werror -Wall -Wextra -Weffc++ -Wformat=2 -Wcast-qual -Wcast-align \
LOCAL_CFLAGS += -Werror -Wall -Wextra -Weffc++ -Wformat=2 -Wcast-qual -Wcast-align \
    -Wwrite-strings -Wfloat-equal -Wpointer-arith -Winit-self -Wredundant-decls -Wno-system-headers
    -Wwrite-strings -Wfloat-equal -Wpointer-arith -Winit-self -Wredundant-decls -Wno-system-headers
@@ -69,6 +70,10 @@ LATIN_IME_CORE_SRC_FILES := \
    suggest/core/dicnode/dic_node_utils.cpp \
    suggest/core/dicnode/dic_node_utils.cpp \
    suggest/core/policy/weighting.cpp \
    suggest/core/policy/weighting.cpp \
    suggest/core/session/dic_traverse_session.cpp \
    suggest/core/session/dic_traverse_session.cpp \
    suggest/policyimpl/typing/scoring_params.cpp \
    suggest/policyimpl/typing/typing_scoring.cpp \
    suggest/policyimpl/typing/typing_traversal.cpp \
    suggest/policyimpl/typing/typing_weighting.cpp \
    suggest/gesture_suggest.cpp \
    suggest/gesture_suggest.cpp \
    suggest/typing_suggest.cpp
    suggest/typing_suggest.cpp


+52 −0
Original line number Original line Diff line number Diff line
/*
 * Copyright (C) 2012 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 "scoring_params.h"

namespace latinime {
// TODO: RENAME all
const float ScoringParams::MAX_SPATIAL_DISTANCE = 1.0f;
const int ScoringParams::THRESHOLD_NEXT_WORD_PROBABILITY = 40;
const int ScoringParams::THRESHOLD_NEXT_WORD_PROBABILITY_FOR_CAPPED = 120;
const float ScoringParams::AUTOCORRECT_OUTPUT_THRESHOLD = 1.0f;
const int ScoringParams::MAX_CACHE_DIC_NODE_SIZE = 125;
const int ScoringParams::THRESHOLD_SHORT_WORD_LENGTH = 4;

const float ScoringParams::DISTANCE_WEIGHT_LENGTH = 0.132f;
const float ScoringParams::PROXIMITY_COST = 0.086f;
const float ScoringParams::FIRST_PROXIMITY_COST = 0.104f;
const float ScoringParams::OMISSION_COST = 0.388f;
const float ScoringParams::OMISSION_COST_SAME_CHAR = 0.431f;
const float ScoringParams::OMISSION_COST_FIRST_CHAR = 0.532f;
const float ScoringParams::INSERTION_COST = 0.670f;
const float ScoringParams::INSERTION_COST_SAME_CHAR = 0.526f;
const float ScoringParams::INSERTION_COST_FIRST_CHAR = 0.563f;
const float ScoringParams::TRANSPOSITION_COST = 0.494f;
const float ScoringParams::SPACE_SUBSTITUTION_COST = 0.239f;
const float ScoringParams::ADDITIONAL_PROXIMITY_COST = 0.380f;
const float ScoringParams::SUBSTITUTION_COST = 0.363f;
const float ScoringParams::COST_NEW_WORD = 0.054f;
const float ScoringParams::COST_NEW_WORD_CAPITALIZED = 0.174f;
const float ScoringParams::DISTANCE_WEIGHT_LANGUAGE = 1.123f;
const float ScoringParams::COST_FIRST_LOOKAHEAD = 0.462f;
const float ScoringParams::COST_LOOKAHEAD = 0.092f;
const float ScoringParams::HAS_PROXIMITY_TERMINAL_COST = 0.126f;
const float ScoringParams::HAS_EDIT_CORRECTION_TERMINAL_COST = 0.056f;
const float ScoringParams::HAS_MULTI_WORD_TERMINAL_COST = 0.136f;
const float ScoringParams::TYPING_BASE_OUTPUT_SCORE = 1.0f;
const float ScoringParams::TYPING_MAX_OUTPUT_SCORE_PER_INPUT = 0.1f;
const float ScoringParams::MAX_NORM_DISTANCE_FOR_EDIT = 0.1f;
} // namespace latinime
+66 −0
Original line number Original line Diff line number Diff line
/*
 * Copyright (C) 2012 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.
 */

#ifndef LATINIME_SCORING_PARAMS_H
#define LATINIME_SCORING_PARAMS_H

#include "defines.h"

namespace latinime {

class ScoringParams {
 public:
    // Fixed model parameters
    static const float MAX_SPATIAL_DISTANCE;
    static const int THRESHOLD_NEXT_WORD_PROBABILITY;
    static const int THRESHOLD_NEXT_WORD_PROBABILITY_FOR_CAPPED;
    static const float AUTOCORRECT_OUTPUT_THRESHOLD;
    static const int MAX_CACHE_DIC_NODE_SIZE;
    static const int THRESHOLD_SHORT_WORD_LENGTH;

    // Numerically optimized parameters (currently for tap typing only).
    // TODO: add ability to modify these constants programmatically.
    // TODO: explore optimization of gesture parameters.
    static const float DISTANCE_WEIGHT_LENGTH;
    static const float PROXIMITY_COST;
    static const float FIRST_PROXIMITY_COST;
    static const float OMISSION_COST;
    static const float OMISSION_COST_SAME_CHAR;
    static const float OMISSION_COST_FIRST_CHAR;
    static const float INSERTION_COST;
    static const float INSERTION_COST_SAME_CHAR;
    static const float INSERTION_COST_FIRST_CHAR;
    static const float TRANSPOSITION_COST;
    static const float SPACE_SUBSTITUTION_COST;
    static const float ADDITIONAL_PROXIMITY_COST;
    static const float SUBSTITUTION_COST;
    static const float COST_NEW_WORD;
    static const float COST_NEW_WORD_CAPITALIZED;
    static const float DISTANCE_WEIGHT_LANGUAGE;
    static const float COST_FIRST_LOOKAHEAD;
    static const float COST_LOOKAHEAD;
    static const float HAS_PROXIMITY_TERMINAL_COST;
    static const float HAS_EDIT_CORRECTION_TERMINAL_COST;
    static const float HAS_MULTI_WORD_TERMINAL_COST;
    static const float TYPING_BASE_OUTPUT_SCORE;
    static const float TYPING_MAX_OUTPUT_SCORE_PER_INPUT;
    static const float MAX_NORM_DISTANCE_FOR_EDIT;

 private:
    DISALLOW_IMPLICIT_CONSTRUCTORS(ScoringParams);
};
} // namespace latinime
#endif // LATINIME_SCORING_PARAMS_H
+21 −0
Original line number Original line Diff line number Diff line
/*
 * Copyright (C) 2013 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 "typing_scoring.h"

namespace latinime {
const TypingScoring TypingScoring::sInstance;
}  // namespace latinime
+82 −0
Original line number Original line Diff line number Diff line
/*
 * Copyright (C) 2013 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.
 */

#ifndef LATINIME_TYPING_SCORING_H
#define LATINIME_TYPING_SCORING_H

#include "defines.h"
#include "scoring.h"
#include "scoring_params.h"

namespace latinime {

class DicNode;
class DicTraverseSession;

class TypingScoring : public Scoring {
 public:
    static const TypingScoring *getInstance() { return &sInstance; }

    AK_FORCE_INLINE bool getMostProbableString(
            const DicTraverseSession *const traverseSession, const int terminalSize,
            const float languageWeight, int *const outputCodePoints, int *const type,
            int *const freq) const {
        return false;
    }

    AK_FORCE_INLINE void safetyNetForMostProbableString(const int terminalSize,
            const int maxScore, int *const outputCodePoints, int *const frequencies) const {
    }

    AK_FORCE_INLINE void searchWordWithDoubleLetter(DicNode *terminals,
            const int terminalSize, int *doubleLetterTerminalIndex,
            DoubleLetterLevel *doubleLetterLevel) const {
    }

    AK_FORCE_INLINE float getAdjustedLanguageWeight(DicTraverseSession *const traverseSession,
             DicNode *const terminals, const int size) const {
        return 1.0f;
    }

    AK_FORCE_INLINE int calculateFinalScore(const float compoundDistance,
            const int inputSize, const bool forceCommit) const {
        const float maxDistance = ScoringParams::DISTANCE_WEIGHT_LANGUAGE
                + static_cast<float>(inputSize) * ScoringParams::TYPING_MAX_OUTPUT_SCORE_PER_INPUT;
        return static_cast<int>((ScoringParams::TYPING_BASE_OUTPUT_SCORE
                - (compoundDistance / maxDistance)
                + (forceCommit ? ScoringParams::AUTOCORRECT_OUTPUT_THRESHOLD : 0.0f))
                        * SUGGEST_INTERFACE_OUTPUT_SCALE);
    }

    AK_FORCE_INLINE float getDoubleLetterDemotionDistanceCost(const int terminalIndex,
            const int doubleLetterTerminalIndex,
            const DoubleLetterLevel doubleLetterLevel) const {
        return 0.0f;
    }

    AK_FORCE_INLINE bool doesAutoCorrectValidWord() const {
        return false;
    }

 private:
    DISALLOW_COPY_AND_ASSIGN(TypingScoring);
    static const TypingScoring sInstance;

    TypingScoring() {}
    ~TypingScoring() {}
};
} // namespace latinime
#endif // LATINIME_TYPING_SCORING_H
Loading