From 5fa33a701d4b8405254d3369c714702481a90e6b Mon Sep 17 00:00:00 2001 From: Tom Ouyang Date: Thu, 18 Apr 2013 15:06:22 -0700 Subject: [PATCH] Check bigrams for lowercased previous word if original is not found Bug: 8592527 Change-Id: I70c4b81263d8b2cb7050364c124589f66900cfce --- native/jni/src/suggest/core/dicnode/dic_node_utils.cpp | 9 --------- native/jni/src/suggest/core/dicnode/dic_node_utils.h | 1 - .../src/suggest/core/session/dic_traverse_session.cpp | 10 +++++++++- 3 files changed, 9 insertions(+), 11 deletions(-) diff --git a/native/jni/src/suggest/core/dicnode/dic_node_utils.cpp b/native/jni/src/suggest/core/dicnode/dic_node_utils.cpp index 031e706ae..a25339174 100644 --- a/native/jni/src/suggest/core/dicnode/dic_node_utils.cpp +++ b/native/jni/src/suggest/core/dicnode/dic_node_utils.cpp @@ -280,15 +280,6 @@ namespace latinime { return NOT_A_PROBABILITY; } -/* static */ int DicNodeUtils::getWordPos(const uint8_t *const dicRoot, const int *word, - const int wordLength) { - if (!word) { - return NOT_VALID_WORD; - } - return BinaryFormat::getTerminalPosition( - dicRoot, word, wordLength, false /* forceLowerCaseSearch */); -} - /* static */ bool DicNodeUtils::isMatchedNodeCodePoint(const ProximityInfoState *pInfoState, const int pointIndex, const bool exactOnly, const int nodeCodePoint) { if (!pInfoState) { diff --git a/native/jni/src/suggest/core/dicnode/dic_node_utils.h b/native/jni/src/suggest/core/dicnode/dic_node_utils.h index 15f9730de..2e6361d87 100644 --- a/native/jni/src/suggest/core/dicnode/dic_node_utils.h +++ b/native/jni/src/suggest/core/dicnode/dic_node_utils.h @@ -41,7 +41,6 @@ class DicNodeUtils { static void initByCopy(DicNode *srcNode, DicNode *destNode); static void getAllChildDicNodes(DicNode *dicNode, const uint8_t *const dicRoot, DicNodeVector *childDicNodes); - static int getWordPos(const uint8_t *const dicRoot, const int *word, const int prevWordLength); static float getBigramNodeImprobability(const uint8_t *const dicRoot, const DicNode *const node, hash_map_compat *const bigramCacheMap); static bool isDicNodeFilteredOut(const int nodeCodePoint, const ProximityInfo *const pInfo, diff --git a/native/jni/src/suggest/core/session/dic_traverse_session.cpp b/native/jni/src/suggest/core/session/dic_traverse_session.cpp index 3c44db21c..b3d47326d 100644 --- a/native/jni/src/suggest/core/session/dic_traverse_session.cpp +++ b/native/jni/src/suggest/core/session/dic_traverse_session.cpp @@ -69,7 +69,15 @@ void DicTraverseSession::init(const Dictionary *const dictionary, const int *pre mPrevWordPos = NOT_VALID_WORD; return; } - mPrevWordPos = DicNodeUtils::getWordPos(dictionary->getOffsetDict(), prevWord, prevWordLength); + // TODO: merge following similar calls to getTerminalPosition into one case-insensitive call. + mPrevWordPos = BinaryFormat::getTerminalPosition(dictionary->getOffsetDict(), prevWord, + prevWordLength, false /* forceLowerCaseSearch */); + if (mPrevWordPos == NOT_VALID_WORD) { + // Check bigrams for lower-cased previous word if original was not found. Useful for + // auto-capitalized words like "The [current_word]". + mPrevWordPos = BinaryFormat::getTerminalPosition(dictionary->getOffsetDict(), prevWord, + prevWordLength, true /* forceLowerCaseSearch */); + } } void DicTraverseSession::setupForGetSuggestions(const ProximityInfo *pInfo,