Loading native/jni/src/suggest/core/dictionary/dictionary.cpp +7 −7 Original line number Diff line number Diff line Loading @@ -46,7 +46,7 @@ Dictionary::Dictionary(JNIEnv *env, const DictionaryStructureWithBufferPolicy::S int Dictionary::getSuggestions(ProximityInfo *proximityInfo, DicTraverseSession *traverseSession, int *xcoordinates, int *ycoordinates, int *times, int *pointerIds, int *inputCodePoints, int inputSize, int *prevWordCodePoints, int prevWordLength, int commitPoint, const SuggestOptions *const suggestOptions, int *outWords, int *frequencies, const SuggestOptions *const suggestOptions, int *outWords, int *outputScores, int *spaceIndices, int *outputTypes, int *outputAutoCommitFirstWordConfidence) const { TimeKeeper::setCurrentTime(); int result = 0; Loading @@ -55,9 +55,9 @@ int Dictionary::getSuggestions(ProximityInfo *proximityInfo, DicTraverseSession traverseSession, this, prevWordCodePoints, prevWordLength, suggestOptions); result = mGestureSuggest.get()->getSuggestions(proximityInfo, traverseSession, xcoordinates, ycoordinates, times, pointerIds, inputCodePoints, inputSize, commitPoint, outWords, frequencies, spaceIndices, outputTypes, outputAutoCommitFirstWordConfidence); outputScores, spaceIndices, outputTypes, outputAutoCommitFirstWordConfidence); if (DEBUG_DICT) { DUMP_RESULT(outWords, frequencies); DUMP_RESULT(outWords, outputScores); } return result; } else { Loading @@ -65,20 +65,20 @@ int Dictionary::getSuggestions(ProximityInfo *proximityInfo, DicTraverseSession traverseSession, this, prevWordCodePoints, prevWordLength, suggestOptions); result = mTypingSuggest.get()->getSuggestions(proximityInfo, traverseSession, xcoordinates, ycoordinates, times, pointerIds, inputCodePoints, inputSize, commitPoint, outWords, frequencies, spaceIndices, outputTypes, outWords, outputScores, spaceIndices, outputTypes, outputAutoCommitFirstWordConfidence); if (DEBUG_DICT) { DUMP_RESULT(outWords, frequencies); DUMP_RESULT(outWords, outputScores); } return result; } } int Dictionary::getBigrams(const int *word, int length, int *outWords, int *frequencies, int Dictionary::getBigrams(const int *word, int length, int *outWords, int *outputScores, int *outputTypes) const { TimeKeeper::setCurrentTime(); if (length <= 0) return 0; return mBigramDictionary.get()->getPredictions(word, length, outWords, frequencies, return mBigramDictionary.get()->getPredictions(word, length, outWords, outputScores, outputTypes); } Loading native/jni/src/suggest/core/dictionary/dictionary.h +2 −2 Original line number Diff line number Diff line Loading @@ -64,10 +64,10 @@ class Dictionary { int getSuggestions(ProximityInfo *proximityInfo, DicTraverseSession *traverseSession, int *xcoordinates, int *ycoordinates, int *times, int *pointerIds, int *inputCodePoints, int inputSize, int *prevWordCodePoints, int prevWordLength, int commitPoint, const SuggestOptions *const suggestOptions, int *outWords, int *frequencies, const SuggestOptions *const suggestOptions, int *outWords, int *outputScores, int *spaceIndices, int *outputTypes, int *outputAutoCommitFirstWordConfidence) const; int getBigrams(const int *word, int length, int *outWords, int *frequencies, int getBigrams(const int *word, int length, int *outWords, int *outputScores, int *outputTypes) const; int getProbability(const int *word, int length) const; Loading native/jni/src/suggest/core/dictionary/suggestions_output_utils.cpp +10 −10 Original line number Diff line number Diff line Loading @@ -31,7 +31,7 @@ const int SuggestionsOutputUtils::MIN_LEN_FOR_MULTI_WORD_AUTOCORRECT = 16; // TODO: Split this method. /* static */ int SuggestionsOutputUtils::outputSuggestions( const Scoring *const scoringPolicy, DicTraverseSession *traverseSession, int *frequencies, int *outputCodePoints, int *outputIndicesToPartialCommit, int *outputScores, int *outputCodePoints, int *outputIndicesToPartialCommit, int *outputTypes, int *outputAutoCommitFirstWordConfidence) { #if DEBUG_EVALUATE_MOST_PROBABLE_STRING const int terminalSize = 0; Loading @@ -52,7 +52,7 @@ const int SuggestionsOutputUtils::MIN_LEN_FOR_MULTI_WORD_AUTOCORRECT = 16; // Insert most probable word at index == 0 as long as there is one terminal at least const bool hasMostProbableString = scoringPolicy->getMostProbableString(traverseSession, terminalSize, languageWeight, &outputCodePoints[0], &outputTypes[0], &frequencies[0]); &outputCodePoints[0], &outputTypes[0], &outputScores[0]); if (hasMostProbableString) { outputIndicesToPartialCommit[outputWordIndex] = NOT_AN_INDEX; ++outputWordIndex; Loading Loading @@ -97,7 +97,7 @@ const int SuggestionsOutputUtils::MIN_LEN_FOR_MULTI_WORD_AUTOCORRECT = 16; const bool isExactMatch = ErrorTypeUtils::isExactMatch(terminalDicNode->getContainedErrorTypes()); const bool isFirstCharUppercase = terminalDicNode->isFirstCharUppercase(); // Heuristic: We exclude freq=0 first-char-uppercase words from exact match. // Heuristic: We exclude probability=0 first-char-uppercase words from exact match. // (e.g. "AMD" and "and") const bool isSafeExactMatch = isExactMatch && !(isPossiblyOffensiveWord && isFirstCharUppercase); Loading @@ -123,7 +123,7 @@ const int SuggestionsOutputUtils::MIN_LEN_FOR_MULTI_WORD_AUTOCORRECT = 16; // Don't output invalid words. However, we still need to submit their shortcuts if any. if (isValidWord) { outputTypes[outputWordIndex] = Dictionary::KIND_CORRECTION | outputTypeFlags; frequencies[outputWordIndex] = finalScore; outputScores[outputWordIndex] = finalScore; if (outputSecondWordFirstLetterInputIndex) { outputIndicesToPartialCommit[outputWordIndex] = terminalDicNode->getSecondWordFirstInputIndex( Loading Loading @@ -151,7 +151,7 @@ const int SuggestionsOutputUtils::MIN_LEN_FOR_MULTI_WORD_AUTOCORRECT = 16; terminalDicNode->getContainedErrorTypes(), true /* forceCommit */, boostExactMatches) : finalScore; const int updatedOutputWordIndex = outputShortcuts(&shortcutIt, outputWordIndex, shortcutBaseScore, outputCodePoints, frequencies, outputTypes, outputWordIndex, shortcutBaseScore, outputCodePoints, outputScores, outputTypes, sameAsTyped); const int secondWordFirstInputIndex = terminalDicNode->getSecondWordFirstInputIndex( traverseSession->getProximityInfoState(0)); Loading @@ -168,8 +168,8 @@ const int SuggestionsOutputUtils::MIN_LEN_FOR_MULTI_WORD_AUTOCORRECT = 16; } if (hasMostProbableString) { scoringPolicy->safetyNetForMostProbableString(terminalSize, maxScore, &outputCodePoints[0], &frequencies[0]); scoringPolicy->safetyNetForMostProbableString(outputWordIndex, maxScore, &outputCodePoints[0], outputScores); } return outputWordIndex; } Loading Loading @@ -229,7 +229,7 @@ const int SuggestionsOutputUtils::MIN_LEN_FOR_MULTI_WORD_AUTOCORRECT = 16; /* static */ int SuggestionsOutputUtils::outputShortcuts( BinaryDictionaryShortcutIterator *const shortcutIt, int outputWordIndex, const int finalScore, int *const outputCodePoints, int *const frequencies, int *const outputTypes, const bool sameAsTyped) { int *const outputScores, int *const outputTypes, const bool sameAsTyped) { int shortcutTarget[MAX_WORD_LENGTH]; while (shortcutIt->hasNextShortcutTarget() && outputWordIndex < MAX_RESULTS) { bool isWhilelist; Loading @@ -249,8 +249,8 @@ const int SuggestionsOutputUtils::MIN_LEN_FOR_MULTI_WORD_AUTOCORRECT = 16; kind = Dictionary::KIND_SHORTCUT; } outputTypes[outputWordIndex] = kind; frequencies[outputWordIndex] = shortcutScore; frequencies[outputWordIndex] = max(S_INT_MIN + 1, shortcutScore) - 1; outputScores[outputWordIndex] = shortcutScore; outputScores[outputWordIndex] = max(S_INT_MIN + 1, shortcutScore) - 1; const int startIndex2 = outputWordIndex * MAX_WORD_LENGTH; DicNodeUtils::appendTwoWords(0, 0, shortcutTarget, shortcutTargetStringLength, &outputCodePoints[startIndex2]); Loading native/jni/src/suggest/core/dictionary/suggestions_output_utils.h +2 −2 Original line number Diff line number Diff line Loading @@ -32,7 +32,7 @@ class SuggestionsOutputUtils { * Outputs the final list of suggestions (i.e., terminal nodes). */ static int outputSuggestions(const Scoring *const scoringPolicy, DicTraverseSession *traverseSession, int *frequencies, int *outputCodePoints, DicTraverseSession *traverseSession, int *outputScores, int *outputCodePoints, int *outputIndicesToPartialCommit, int *outputTypes, int *outputAutoCommitFirstWordConfidence); Loading @@ -46,7 +46,7 @@ class SuggestionsOutputUtils { static int outputShortcuts(BinaryDictionaryShortcutIterator *const shortcutIt, int outputWordIndex, const int finalScore, int *const outputCodePoints, int *const frequencies, int *const outputTypes, const bool sameAsTyped); int *const outputScores, int *const outputTypes, const bool sameAsTyped); }; } // namespace latinime #endif // LATINIME_SUGGESTIONS_OUTPUT_UTILS native/jni/src/suggest/core/policy/scoring.h +2 −2 Original line number Diff line number Diff line Loading @@ -33,8 +33,8 @@ class Scoring { virtual bool getMostProbableString(const DicTraverseSession *const traverseSession, const int terminalSize, const float languageWeight, int *const outputCodePoints, 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; virtual void safetyNetForMostProbableString(const int scoreCount, const int maxScore, int *const outputCodePoints, int *const scores) const = 0; virtual float getAdjustedLanguageWeight(DicTraverseSession *const traverseSession, DicNode *const terminals, const int size) const = 0; virtual float getDoubleLetterDemotionDistanceCost( Loading Loading
native/jni/src/suggest/core/dictionary/dictionary.cpp +7 −7 Original line number Diff line number Diff line Loading @@ -46,7 +46,7 @@ Dictionary::Dictionary(JNIEnv *env, const DictionaryStructureWithBufferPolicy::S int Dictionary::getSuggestions(ProximityInfo *proximityInfo, DicTraverseSession *traverseSession, int *xcoordinates, int *ycoordinates, int *times, int *pointerIds, int *inputCodePoints, int inputSize, int *prevWordCodePoints, int prevWordLength, int commitPoint, const SuggestOptions *const suggestOptions, int *outWords, int *frequencies, const SuggestOptions *const suggestOptions, int *outWords, int *outputScores, int *spaceIndices, int *outputTypes, int *outputAutoCommitFirstWordConfidence) const { TimeKeeper::setCurrentTime(); int result = 0; Loading @@ -55,9 +55,9 @@ int Dictionary::getSuggestions(ProximityInfo *proximityInfo, DicTraverseSession traverseSession, this, prevWordCodePoints, prevWordLength, suggestOptions); result = mGestureSuggest.get()->getSuggestions(proximityInfo, traverseSession, xcoordinates, ycoordinates, times, pointerIds, inputCodePoints, inputSize, commitPoint, outWords, frequencies, spaceIndices, outputTypes, outputAutoCommitFirstWordConfidence); outputScores, spaceIndices, outputTypes, outputAutoCommitFirstWordConfidence); if (DEBUG_DICT) { DUMP_RESULT(outWords, frequencies); DUMP_RESULT(outWords, outputScores); } return result; } else { Loading @@ -65,20 +65,20 @@ int Dictionary::getSuggestions(ProximityInfo *proximityInfo, DicTraverseSession traverseSession, this, prevWordCodePoints, prevWordLength, suggestOptions); result = mTypingSuggest.get()->getSuggestions(proximityInfo, traverseSession, xcoordinates, ycoordinates, times, pointerIds, inputCodePoints, inputSize, commitPoint, outWords, frequencies, spaceIndices, outputTypes, outWords, outputScores, spaceIndices, outputTypes, outputAutoCommitFirstWordConfidence); if (DEBUG_DICT) { DUMP_RESULT(outWords, frequencies); DUMP_RESULT(outWords, outputScores); } return result; } } int Dictionary::getBigrams(const int *word, int length, int *outWords, int *frequencies, int Dictionary::getBigrams(const int *word, int length, int *outWords, int *outputScores, int *outputTypes) const { TimeKeeper::setCurrentTime(); if (length <= 0) return 0; return mBigramDictionary.get()->getPredictions(word, length, outWords, frequencies, return mBigramDictionary.get()->getPredictions(word, length, outWords, outputScores, outputTypes); } Loading
native/jni/src/suggest/core/dictionary/dictionary.h +2 −2 Original line number Diff line number Diff line Loading @@ -64,10 +64,10 @@ class Dictionary { int getSuggestions(ProximityInfo *proximityInfo, DicTraverseSession *traverseSession, int *xcoordinates, int *ycoordinates, int *times, int *pointerIds, int *inputCodePoints, int inputSize, int *prevWordCodePoints, int prevWordLength, int commitPoint, const SuggestOptions *const suggestOptions, int *outWords, int *frequencies, const SuggestOptions *const suggestOptions, int *outWords, int *outputScores, int *spaceIndices, int *outputTypes, int *outputAutoCommitFirstWordConfidence) const; int getBigrams(const int *word, int length, int *outWords, int *frequencies, int getBigrams(const int *word, int length, int *outWords, int *outputScores, int *outputTypes) const; int getProbability(const int *word, int length) const; Loading
native/jni/src/suggest/core/dictionary/suggestions_output_utils.cpp +10 −10 Original line number Diff line number Diff line Loading @@ -31,7 +31,7 @@ const int SuggestionsOutputUtils::MIN_LEN_FOR_MULTI_WORD_AUTOCORRECT = 16; // TODO: Split this method. /* static */ int SuggestionsOutputUtils::outputSuggestions( const Scoring *const scoringPolicy, DicTraverseSession *traverseSession, int *frequencies, int *outputCodePoints, int *outputIndicesToPartialCommit, int *outputScores, int *outputCodePoints, int *outputIndicesToPartialCommit, int *outputTypes, int *outputAutoCommitFirstWordConfidence) { #if DEBUG_EVALUATE_MOST_PROBABLE_STRING const int terminalSize = 0; Loading @@ -52,7 +52,7 @@ const int SuggestionsOutputUtils::MIN_LEN_FOR_MULTI_WORD_AUTOCORRECT = 16; // Insert most probable word at index == 0 as long as there is one terminal at least const bool hasMostProbableString = scoringPolicy->getMostProbableString(traverseSession, terminalSize, languageWeight, &outputCodePoints[0], &outputTypes[0], &frequencies[0]); &outputCodePoints[0], &outputTypes[0], &outputScores[0]); if (hasMostProbableString) { outputIndicesToPartialCommit[outputWordIndex] = NOT_AN_INDEX; ++outputWordIndex; Loading Loading @@ -97,7 +97,7 @@ const int SuggestionsOutputUtils::MIN_LEN_FOR_MULTI_WORD_AUTOCORRECT = 16; const bool isExactMatch = ErrorTypeUtils::isExactMatch(terminalDicNode->getContainedErrorTypes()); const bool isFirstCharUppercase = terminalDicNode->isFirstCharUppercase(); // Heuristic: We exclude freq=0 first-char-uppercase words from exact match. // Heuristic: We exclude probability=0 first-char-uppercase words from exact match. // (e.g. "AMD" and "and") const bool isSafeExactMatch = isExactMatch && !(isPossiblyOffensiveWord && isFirstCharUppercase); Loading @@ -123,7 +123,7 @@ const int SuggestionsOutputUtils::MIN_LEN_FOR_MULTI_WORD_AUTOCORRECT = 16; // Don't output invalid words. However, we still need to submit their shortcuts if any. if (isValidWord) { outputTypes[outputWordIndex] = Dictionary::KIND_CORRECTION | outputTypeFlags; frequencies[outputWordIndex] = finalScore; outputScores[outputWordIndex] = finalScore; if (outputSecondWordFirstLetterInputIndex) { outputIndicesToPartialCommit[outputWordIndex] = terminalDicNode->getSecondWordFirstInputIndex( Loading Loading @@ -151,7 +151,7 @@ const int SuggestionsOutputUtils::MIN_LEN_FOR_MULTI_WORD_AUTOCORRECT = 16; terminalDicNode->getContainedErrorTypes(), true /* forceCommit */, boostExactMatches) : finalScore; const int updatedOutputWordIndex = outputShortcuts(&shortcutIt, outputWordIndex, shortcutBaseScore, outputCodePoints, frequencies, outputTypes, outputWordIndex, shortcutBaseScore, outputCodePoints, outputScores, outputTypes, sameAsTyped); const int secondWordFirstInputIndex = terminalDicNode->getSecondWordFirstInputIndex( traverseSession->getProximityInfoState(0)); Loading @@ -168,8 +168,8 @@ const int SuggestionsOutputUtils::MIN_LEN_FOR_MULTI_WORD_AUTOCORRECT = 16; } if (hasMostProbableString) { scoringPolicy->safetyNetForMostProbableString(terminalSize, maxScore, &outputCodePoints[0], &frequencies[0]); scoringPolicy->safetyNetForMostProbableString(outputWordIndex, maxScore, &outputCodePoints[0], outputScores); } return outputWordIndex; } Loading Loading @@ -229,7 +229,7 @@ const int SuggestionsOutputUtils::MIN_LEN_FOR_MULTI_WORD_AUTOCORRECT = 16; /* static */ int SuggestionsOutputUtils::outputShortcuts( BinaryDictionaryShortcutIterator *const shortcutIt, int outputWordIndex, const int finalScore, int *const outputCodePoints, int *const frequencies, int *const outputTypes, const bool sameAsTyped) { int *const outputScores, int *const outputTypes, const bool sameAsTyped) { int shortcutTarget[MAX_WORD_LENGTH]; while (shortcutIt->hasNextShortcutTarget() && outputWordIndex < MAX_RESULTS) { bool isWhilelist; Loading @@ -249,8 +249,8 @@ const int SuggestionsOutputUtils::MIN_LEN_FOR_MULTI_WORD_AUTOCORRECT = 16; kind = Dictionary::KIND_SHORTCUT; } outputTypes[outputWordIndex] = kind; frequencies[outputWordIndex] = shortcutScore; frequencies[outputWordIndex] = max(S_INT_MIN + 1, shortcutScore) - 1; outputScores[outputWordIndex] = shortcutScore; outputScores[outputWordIndex] = max(S_INT_MIN + 1, shortcutScore) - 1; const int startIndex2 = outputWordIndex * MAX_WORD_LENGTH; DicNodeUtils::appendTwoWords(0, 0, shortcutTarget, shortcutTargetStringLength, &outputCodePoints[startIndex2]); Loading
native/jni/src/suggest/core/dictionary/suggestions_output_utils.h +2 −2 Original line number Diff line number Diff line Loading @@ -32,7 +32,7 @@ class SuggestionsOutputUtils { * Outputs the final list of suggestions (i.e., terminal nodes). */ static int outputSuggestions(const Scoring *const scoringPolicy, DicTraverseSession *traverseSession, int *frequencies, int *outputCodePoints, DicTraverseSession *traverseSession, int *outputScores, int *outputCodePoints, int *outputIndicesToPartialCommit, int *outputTypes, int *outputAutoCommitFirstWordConfidence); Loading @@ -46,7 +46,7 @@ class SuggestionsOutputUtils { static int outputShortcuts(BinaryDictionaryShortcutIterator *const shortcutIt, int outputWordIndex, const int finalScore, int *const outputCodePoints, int *const frequencies, int *const outputTypes, const bool sameAsTyped); int *const outputScores, int *const outputTypes, const bool sameAsTyped); }; } // namespace latinime #endif // LATINIME_SUGGESTIONS_OUTPUT_UTILS
native/jni/src/suggest/core/policy/scoring.h +2 −2 Original line number Diff line number Diff line Loading @@ -33,8 +33,8 @@ class Scoring { virtual bool getMostProbableString(const DicTraverseSession *const traverseSession, const int terminalSize, const float languageWeight, int *const outputCodePoints, 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; virtual void safetyNetForMostProbableString(const int scoreCount, const int maxScore, int *const outputCodePoints, int *const scores) const = 0; virtual float getAdjustedLanguageWeight(DicTraverseSession *const traverseSession, DicNode *const terminals, const int size) const = 0; virtual float getDoubleLetterDemotionDistanceCost( Loading