From a0ac31fcaa01c21592a6e7af243c14dada65cf3e Mon Sep 17 00:00:00 2001
From: satok <satok@google.com>
Date: Wed, 23 May 2012 19:55:27 +0900
Subject: [PATCH] Fix the issue on multiple words suggestion

Bug: 6509844
Change-Id: I823074a2b29befc3e60c63699ab4dc7719105c63
---
 native/jni/src/correction.cpp         | 2 +-
 native/jni/src/defines.h              | 2 ++
 native/jni/src/unigram_dictionary.cpp | 8 ++++++--
 3 files changed, 9 insertions(+), 3 deletions(-)

diff --git a/native/jni/src/correction.cpp b/native/jni/src/correction.cpp
index 5ae34cd029..fe3f292c10 100644
--- a/native/jni/src/correction.cpp
+++ b/native/jni/src/correction.cpp
@@ -977,7 +977,7 @@ int Correction::RankingAlgorithm::calcFreqForSplitMultipleWords(
             }
             const int freq = freqArray[i];
             // Demote too short weak words
-            if (wordLength <= 4 && freq <= MAX_FREQ * 2 / 3 /* heuristic... */) {
+            if (wordLength <= 4 && freq <= SUPPRESS_SHORT_MULTIPLE_WORDS_THRESHOLD_FREQ) {
                 multiplyRate(100 * freq / MAX_FREQ, &totalFreq);
             }
             if (wordLength == 1) {
diff --git a/native/jni/src/defines.h b/native/jni/src/defines.h
index dfc5238a0a..19f8434464 100644
--- a/native/jni/src/defines.h
+++ b/native/jni/src/defines.h
@@ -228,6 +228,8 @@ static inline void prof_out(void) {
 
 #define TWO_WORDS_CORRECTION_WITH_OTHER_ERROR_THRESHOLD 0.35
 #define START_TWO_WORDS_CORRECTION_THRESHOLD 0.185
+/* heuristic... This should be changed if we change the unit of the frequency. */
+#define SUPPRESS_SHORT_MULTIPLE_WORDS_THRESHOLD_FREQ (MAX_FREQ * 58 / 100)
 
 #define MAX_DEPTH_MULTIPLIER 3
 
diff --git a/native/jni/src/unigram_dictionary.cpp b/native/jni/src/unigram_dictionary.cpp
index 3c826e9188..828582848d 100644
--- a/native/jni/src/unigram_dictionary.cpp
+++ b/native/jni/src/unigram_dictionary.cpp
@@ -503,8 +503,12 @@ bool UnigramDictionary::getSubStringSuggestion(
                 freqArray, wordLengthArray, currentWordIndex + 1, isSpaceProximity, outputWord);
         if (DEBUG_DICT) {
             DUMP_WORD(outputWord, tempOutputWordLength);
-            AKLOGI("Split two words: %d, %d, %d, %d, (%d) %d", freqArray[0], freqArray[1], pairFreq,
-                    inputLength, wordLengthArray[0], tempOutputWordLength);
+            for (int i = 0; i < currentWordIndex + 1; ++i) {
+                AKLOGI("Split %d,%d words: freq = %d, length = %d", i, currentWordIndex + 1,
+                        freqArray[i], wordLengthArray[i]);
+            }
+            AKLOGI("Split two words: freq = %d, length = %d, %d, isSpace ? %d", pairFreq,
+                    inputLength, tempOutputWordLength, isSpaceProximity);
         }
         addWord(outputWord, tempOutputWordLength, pairFreq, queuePool->getMasterQueue());
     }
-- 
GitLab