diff --git a/native/src/defines.h b/native/src/defines.h index 2a06e9485..bdab19ff7 100644 --- a/native/src/defines.h +++ b/native/src/defines.h @@ -145,7 +145,7 @@ static void prof_out(void) { #define WORDS_WITH_EXCESSIVE_CHARACTER_OUT_OF_PROXIMITY_DEMOTION_RATE 75 #define WORDS_WITH_TRANSPOSED_CHARACTERS_DEMOTION_RATE 60 #define FULL_MATCHED_WORDS_PROMOTION_RATE 120 -#define WORDS_WITH_JUST_ONE_PROXIMITY_CHARACTER_PROMOTION_RATE 110 +#define WORDS_WITH_PROXIMITY_CHARACTER_DEMOTION_RATE 90 // This should be greater than or equal to MAX_WORD_LENGTH defined in BinaryDictionary.java // This is only used for the size of array. Not to be used in c functions. diff --git a/native/src/unigram_dictionary.cpp b/native/src/unigram_dictionary.cpp index a1efc9573..89a1c9ea6 100644 --- a/native/src/unigram_dictionary.cpp +++ b/native/src/unigram_dictionary.cpp @@ -552,13 +552,13 @@ inline int UnigramDictionary::calculateFinalFreq(const int inputIndex, const int if (sameLength && transposedPos < 0 && skipPos < 0 && excessivePos < 0) { finalFreq = capped255MultForFullMatchAccentsOrCapitalizationDifference(finalFreq); } - } else if (lengthFreq / 2 == matchWeight && transposedPos < 0 && skipPos < 0 - && excessivePos < 0 && depth > 1) { - // Full match except only one proximity correction + } else if (sameLength && transposedPos < 0 && skipPos < 0 && excessivePos < 0 && depth > 1) { + // A word with proximity corrections if (DEBUG_DICT) { LOGI("Found one proximity correction."); } - multiplyRate(WORDS_WITH_JUST_ONE_PROXIMITY_CHARACTER_PROMOTION_RATE, &finalFreq); + finalFreq *= 2; + multiplyRate(WORDS_WITH_PROXIMITY_CHARACTER_DEMOTION_RATE, &finalFreq); } if (sameLength) finalFreq *= FULL_WORD_MULTIPLIER; return finalFreq;