From 21e2380234f5f2bf069239e76b0fa8758b67b6a7 Mon Sep 17 00:00:00 2001 From: Keisuke Kuroyanagi Date: Tue, 28 Jan 2014 16:33:20 +0900 Subject: [PATCH] Improve the double letter word promotion logic. The old logic only checks the top 3 suggestions before the final adjustment. It leads to instability in scores. Bug: 10700674 Change-Id: I986aed2aefd66c1fba6196a8f100fcb5bc838a38 --- .../core/dictionary/suggestions_output_utils.cpp | 10 ++-------- native/jni/src/suggest/core/policy/scoring.h | 8 ++------ .../jni/src/suggest/policyimpl/typing/typing_scoring.h | 10 ++-------- 3 files changed, 6 insertions(+), 22 deletions(-) diff --git a/native/jni/src/suggest/core/dictionary/suggestions_output_utils.cpp b/native/jni/src/suggest/core/dictionary/suggestions_output_utils.cpp index d219757da..b8106377c 100644 --- a/native/jni/src/suggest/core/dictionary/suggestions_output_utils.cpp +++ b/native/jni/src/suggest/core/dictionary/suggestions_output_utils.cpp @@ -58,12 +58,6 @@ const int SuggestionsOutputUtils::MIN_LEN_FOR_MULTI_WORD_AUTOCORRECT = 16; ++outputWordIndex; } - // Initial value of the loop index for terminal nodes (words) - int doubleLetterTerminalIndex = -1; - DoubleLetterLevel doubleLetterLevel = NOT_A_DOUBLE_LETTER; - scoringPolicy->searchWordWithDoubleLetter(terminals, terminalSize, - &doubleLetterTerminalIndex, &doubleLetterLevel); - int maxScore = S_INT_MIN; // Force autocorrection for obvious long multi-word suggestions when the top suggestion is // a long multiple words suggestion. @@ -92,8 +86,8 @@ const int SuggestionsOutputUtils::MIN_LEN_FOR_MULTI_WORD_AUTOCORRECT = 16; if (DEBUG_GEO_FULL) { terminalDicNode->dump("OUT:"); } - const float doubleLetterCost = scoringPolicy->getDoubleLetterDemotionDistanceCost( - terminalIndex, doubleLetterTerminalIndex, doubleLetterLevel); + const float doubleLetterCost = + scoringPolicy->getDoubleLetterDemotionDistanceCost(terminalDicNode); const float compoundDistance = terminalDicNode->getCompoundDistance(languageWeight) + doubleLetterCost; const bool isPossiblyOffensiveWord = diff --git a/native/jni/src/suggest/core/policy/scoring.h b/native/jni/src/suggest/core/policy/scoring.h index 5ae3d2146..783383450 100644 --- a/native/jni/src/suggest/core/policy/scoring.h +++ b/native/jni/src/suggest/core/policy/scoring.h @@ -34,14 +34,10 @@ class Scoring { int *const type, int *const freq) const = 0; virtual void safetyNetForMostProbableString(const int terminalSize, const int maxScore, int *const outputCodePoints, int *const frequencies) const = 0; - // TODO: Make more generic - virtual void searchWordWithDoubleLetter(DicNode *terminals, const int terminalSize, - int *doubleLetterTerminalIndex, DoubleLetterLevel *doubleLetterLevel) const = 0; virtual float getAdjustedLanguageWeight(DicTraverseSession *const traverseSession, DicNode *const terminals, const int size) const = 0; - virtual float getDoubleLetterDemotionDistanceCost(const int terminalIndex, - const int doubleLetterTerminalIndex, - const DoubleLetterLevel doubleLetterLevel) const = 0; + virtual float getDoubleLetterDemotionDistanceCost( + const DicNode *const terminalDicNode) const = 0; virtual bool doesAutoCorrectValidWord() const = 0; virtual bool autoCorrectsToMultiWordSuggestionIfTop() const = 0; virtual bool sameAsTyped(const DicTraverseSession *const traverseSession, diff --git a/native/jni/src/suggest/policyimpl/typing/typing_scoring.h b/native/jni/src/suggest/policyimpl/typing/typing_scoring.h index 186e3ba08..c777e7238 100644 --- a/native/jni/src/suggest/policyimpl/typing/typing_scoring.h +++ b/native/jni/src/suggest/policyimpl/typing/typing_scoring.h @@ -43,11 +43,6 @@ class TypingScoring : public Scoring { 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; @@ -77,9 +72,8 @@ class TypingScoring : public Scoring { return static_cast(score * SUGGEST_INTERFACE_OUTPUT_SCALE); } - AK_FORCE_INLINE float getDoubleLetterDemotionDistanceCost(const int terminalIndex, - const int doubleLetterTerminalIndex, - const DoubleLetterLevel doubleLetterLevel) const { + AK_FORCE_INLINE float getDoubleLetterDemotionDistanceCost( + const DicNode *const terminalDicNode) const { return 0.0f; }