Loading native/jni/Android.mk +6 −1 Original line number Original line Diff line number Diff line Loading @@ -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 Loading Loading @@ -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 Loading native/jni/src/suggest/policyimpl/typing/scoring_params.cpp 0 → 100644 +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 native/jni/src/suggest/policyimpl/typing/scoring_params.h 0 → 100644 +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 native/jni/src/suggest/policyimpl/typing/typing_scoring.cpp 0 → 100644 +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 native/jni/src/suggest/policyimpl/typing/typing_scoring.h 0 → 100644 +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
native/jni/Android.mk +6 −1 Original line number Original line Diff line number Diff line Loading @@ -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 Loading Loading @@ -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 Loading
native/jni/src/suggest/policyimpl/typing/scoring_params.cpp 0 → 100644 +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
native/jni/src/suggest/policyimpl/typing/scoring_params.h 0 → 100644 +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
native/jni/src/suggest/policyimpl/typing/typing_scoring.cpp 0 → 100644 +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
native/jni/src/suggest/policyimpl/typing/typing_scoring.h 0 → 100644 +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