Loading native/jni/com_android_inputmethod_latin_BinaryDictionary.cpp +8 −7 Original line number Diff line number Diff line Loading @@ -28,6 +28,7 @@ #include "suggest/core/dictionary/property/unigram_property.h" #include "suggest/core/dictionary/property/word_property.h" #include "suggest/core/result/suggestion_results.h" #include "suggest/core/session/prev_words_info.h" #include "suggest/core/suggest_options.h" #include "suggest/policyimpl/dictionary/structure/dictionary_structure_with_buffer_policy_factory.h" #include "utils/char_utils.h" Loading Loading @@ -247,15 +248,15 @@ static void latinime_BinaryDictionary_getSuggestions(JNIEnv *env, jclass clazz, float languageWeight; env->GetFloatArrayRegion(inOutLanguageWeight, 0, 1 /* len */, &languageWeight); SuggestionResults suggestionResults(MAX_RESULTS); const PrevWordsInfo prevWordsInfo(prevWordCodePoints, prevWordCodePointsLength, false /* isStartOfSentence */); if (givenSuggestOptions.isGesture() || inputSize > 0) { // TODO: Use SuggestionResults to return suggestions. dictionary->getSuggestions(pInfo, traverseSession, xCoordinates, yCoordinates, times, pointerIds, inputCodePoints, inputSize, prevWordCodePoints, prevWordCodePointsLength, &givenSuggestOptions, languageWeight, &suggestionResults); times, pointerIds, inputCodePoints, inputSize, &prevWordsInfo, &givenSuggestOptions, languageWeight, &suggestionResults); } else { dictionary->getPredictions(prevWordCodePoints, prevWordCodePointsLength, &suggestionResults); dictionary->getPredictions(&prevWordsInfo, &suggestionResults); } suggestionResults.outputSuggestions(env, outSuggestionCount, outCodePointsArray, outScoresArray, outSpaceIndicesArray, outTypesArray, Loading @@ -282,8 +283,8 @@ static jint latinime_BinaryDictionary_getBigramProbability(JNIEnv *env, jclass c int word1CodePoints[word1Length]; env->GetIntArrayRegion(word0, 0, word0Length, word0CodePoints); env->GetIntArrayRegion(word1, 0, word1Length, word1CodePoints); return dictionary->getBigramProbability(word0CodePoints, word0Length, word1CodePoints, word1Length); const PrevWordsInfo prevWordsInfo(word0CodePoints, word0Length, false /* isStartOfSentence */); return dictionary->getBigramProbability(&prevWordsInfo, word1CodePoints, word1Length); } // Method to iterate all words in the dictionary for makedict. Loading native/jni/com_android_inputmethod_latin_DicTraverseSession.cpp +5 −2 Original line number Diff line number Diff line Loading @@ -22,6 +22,7 @@ #include "jni.h" #include "jni_common.h" #include "suggest/core/session/dic_traverse_session.h" #include "suggest/core/session/prev_words_info.h" namespace latinime { class Dictionary; Loading @@ -39,12 +40,14 @@ static void latinime_initDicTraverseSession(JNIEnv *env, jclass clazz, jlong tra } Dictionary *dict = reinterpret_cast<Dictionary *>(dictionary); if (!previousWord) { ts->init(dict, 0 /* prevWord */, 0 /* prevWordLength*/, 0 /* suggestOptions */); PrevWordsInfo prevWordsInfo; ts->init(dict, &prevWordsInfo, 0 /* suggestOptions */); return; } int prevWord[previousWordLength]; env->GetIntArrayRegion(previousWord, 0, previousWordLength, prevWord); ts->init(dict, prevWord, previousWordLength, 0 /* suggestOptions */); PrevWordsInfo prevWordsInfo(prevWord, previousWordLength, false /* isStartOfSentence */); ts->init(dict, &prevWordsInfo, 0 /* suggestOptions */); } static void latinime_releaseDicTraverseSession(JNIEnv *env, jclass clazz, jlong traverseSession) { Loading native/jni/src/suggest/core/dictionary/bigram_dictionary.cpp +11 −10 Original line number Diff line number Diff line Loading @@ -26,6 +26,7 @@ #include "suggest/core/dictionary/dictionary.h" #include "suggest/core/policy/dictionary_structure_with_buffer_policy.h" #include "suggest/core/result/suggestion_results.h" #include "suggest/core/session/prev_words_info.h" #include "utils/char_utils.h" namespace latinime { Loading @@ -42,19 +43,18 @@ BigramDictionary::~BigramDictionary() { } /* Parameters : * prevWord: the word before, the one for which we need to look up bigrams. * prevWordLength: its length. * prevWordsInfo: Information of previous words to get the predictions. * outSuggestionResults: SuggestionResults to put the predictions. */ void BigramDictionary::getPredictions(const int *prevWord, const int prevWordLength, void BigramDictionary::getPredictions(const PrevWordsInfo *const prevWordsInfo, SuggestionResults *const outSuggestionResults) const { int pos = getBigramListPositionForWord(prevWord, prevWordLength, false /* forceLowerCaseSearch */); int pos = getBigramListPositionForWord(prevWordsInfo->getPrevWordCodePoints(), prevWordsInfo->getPrevWordCodePointCount(), false /* forceLowerCaseSearch */); // getBigramListPositionForWord returns 0 if this word isn't in the dictionary or has no bigrams if (NOT_A_DICT_POS == pos) { // If no bigrams for this exact word, search again in lower case. pos = getBigramListPositionForWord(prevWord, prevWordLength, true /* forceLowerCaseSearch */); pos = getBigramListPositionForWord(prevWordsInfo->getPrevWordCodePoints(), prevWordsInfo->getPrevWordCodePointCount(), true /* forceLowerCaseSearch */); } // If still no bigrams, we really don't have them! if (NOT_A_DICT_POS == pos) return; Loading Loading @@ -96,9 +96,10 @@ int BigramDictionary::getBigramListPositionForWord(const int *prevWord, const in return mDictionaryStructurePolicy->getBigramsPositionOfPtNode(pos); } int BigramDictionary::getBigramProbability(const int *word0, int length0, const int *word1, int length1) const { int pos = getBigramListPositionForWord(word0, length0, false /* forceLowerCaseSearch */); int BigramDictionary::getBigramProbability(const PrevWordsInfo *const prevWordsInfo, const int *word1, int length1) const { int pos = getBigramListPositionForWord(prevWordsInfo->getPrevWordCodePoints(), prevWordsInfo->getPrevWordCodePointCount(), false /* forceLowerCaseSearch */); // getBigramListPositionForWord returns 0 if this word isn't in the dictionary or has no bigrams if (NOT_A_DICT_POS == pos) return NOT_A_PROBABILITY; int nextWordPos = mDictionaryStructurePolicy->getTerminalPtNodePositionOfWord(word1, length1, Loading native/jni/src/suggest/core/dictionary/bigram_dictionary.h +4 −2 Original line number Diff line number Diff line Loading @@ -22,15 +22,17 @@ namespace latinime { class DictionaryStructureWithBufferPolicy; class PrevWordsInfo; class SuggestionResults; class BigramDictionary { public: BigramDictionary(const DictionaryStructureWithBufferPolicy *const dictionaryStructurePolicy); void getPredictions(const int *word, int length, void getPredictions(const PrevWordsInfo *const prevWordsInfo, SuggestionResults *const outSuggestionResults) const; int getBigramProbability(const int *word1, int length1, const int *word2, int length2) const; int getBigramProbability(const PrevWordsInfo *const prevWordsInfo, const int *word1, int length1) const; ~BigramDictionary(); private: Loading native/jni/src/suggest/core/dictionary/dictionary.cpp +6 −7 Original line number Diff line number Diff line Loading @@ -44,11 +44,11 @@ Dictionary::Dictionary(JNIEnv *env, DictionaryStructureWithBufferPolicy::Structu void Dictionary::getSuggestions(ProximityInfo *proximityInfo, DicTraverseSession *traverseSession, int *xcoordinates, int *ycoordinates, int *times, int *pointerIds, int *inputCodePoints, int inputSize, int *prevWordCodePoints, int prevWordLength, int inputSize, const PrevWordsInfo *const prevWordsInfo, const SuggestOptions *const suggestOptions, const float languageWeight, SuggestionResults *const outSuggestionResults) const { TimeKeeper::setCurrentTime(); traverseSession->init(this, prevWordCodePoints, prevWordLength, suggestOptions); traverseSession->init(this, prevWordsInfo, suggestOptions); const auto &suggest = suggestOptions->isGesture() ? mGestureSuggest : mTypingSuggest; suggest->getSuggestions(proximityInfo, traverseSession, xcoordinates, ycoordinates, times, pointerIds, inputCodePoints, inputSize, Loading @@ -58,11 +58,10 @@ void Dictionary::getSuggestions(ProximityInfo *proximityInfo, DicTraverseSession } } void Dictionary::getPredictions(const int *word, int length, void Dictionary::getPredictions(const PrevWordsInfo *const prevWordsInfo, SuggestionResults *const outSuggestionResults) const { TimeKeeper::setCurrentTime(); if (length <= 0) return; mBigramDictionary.getPredictions(word, length, outSuggestionResults); mBigramDictionary.getPredictions(prevWordsInfo, outSuggestionResults); } int Dictionary::getProbability(const int *word, int length) const { Loading @@ -75,10 +74,10 @@ int Dictionary::getProbability(const int *word, int length) const { return getDictionaryStructurePolicy()->getUnigramProbabilityOfPtNode(pos); } int Dictionary::getBigramProbability(const int *word0, int length0, const int *word1, int Dictionary::getBigramProbability(const PrevWordsInfo *const prevWordsInfo, const int *word1, int length1) const { TimeKeeper::setCurrentTime(); return mBigramDictionary.getBigramProbability(word0, length0, word1, length1); return mBigramDictionary.getBigramProbability(prevWordsInfo, word1, length1); } void Dictionary::addUnigramWord(const int *const word, const int length, Loading Loading
native/jni/com_android_inputmethod_latin_BinaryDictionary.cpp +8 −7 Original line number Diff line number Diff line Loading @@ -28,6 +28,7 @@ #include "suggest/core/dictionary/property/unigram_property.h" #include "suggest/core/dictionary/property/word_property.h" #include "suggest/core/result/suggestion_results.h" #include "suggest/core/session/prev_words_info.h" #include "suggest/core/suggest_options.h" #include "suggest/policyimpl/dictionary/structure/dictionary_structure_with_buffer_policy_factory.h" #include "utils/char_utils.h" Loading Loading @@ -247,15 +248,15 @@ static void latinime_BinaryDictionary_getSuggestions(JNIEnv *env, jclass clazz, float languageWeight; env->GetFloatArrayRegion(inOutLanguageWeight, 0, 1 /* len */, &languageWeight); SuggestionResults suggestionResults(MAX_RESULTS); const PrevWordsInfo prevWordsInfo(prevWordCodePoints, prevWordCodePointsLength, false /* isStartOfSentence */); if (givenSuggestOptions.isGesture() || inputSize > 0) { // TODO: Use SuggestionResults to return suggestions. dictionary->getSuggestions(pInfo, traverseSession, xCoordinates, yCoordinates, times, pointerIds, inputCodePoints, inputSize, prevWordCodePoints, prevWordCodePointsLength, &givenSuggestOptions, languageWeight, &suggestionResults); times, pointerIds, inputCodePoints, inputSize, &prevWordsInfo, &givenSuggestOptions, languageWeight, &suggestionResults); } else { dictionary->getPredictions(prevWordCodePoints, prevWordCodePointsLength, &suggestionResults); dictionary->getPredictions(&prevWordsInfo, &suggestionResults); } suggestionResults.outputSuggestions(env, outSuggestionCount, outCodePointsArray, outScoresArray, outSpaceIndicesArray, outTypesArray, Loading @@ -282,8 +283,8 @@ static jint latinime_BinaryDictionary_getBigramProbability(JNIEnv *env, jclass c int word1CodePoints[word1Length]; env->GetIntArrayRegion(word0, 0, word0Length, word0CodePoints); env->GetIntArrayRegion(word1, 0, word1Length, word1CodePoints); return dictionary->getBigramProbability(word0CodePoints, word0Length, word1CodePoints, word1Length); const PrevWordsInfo prevWordsInfo(word0CodePoints, word0Length, false /* isStartOfSentence */); return dictionary->getBigramProbability(&prevWordsInfo, word1CodePoints, word1Length); } // Method to iterate all words in the dictionary for makedict. Loading
native/jni/com_android_inputmethod_latin_DicTraverseSession.cpp +5 −2 Original line number Diff line number Diff line Loading @@ -22,6 +22,7 @@ #include "jni.h" #include "jni_common.h" #include "suggest/core/session/dic_traverse_session.h" #include "suggest/core/session/prev_words_info.h" namespace latinime { class Dictionary; Loading @@ -39,12 +40,14 @@ static void latinime_initDicTraverseSession(JNIEnv *env, jclass clazz, jlong tra } Dictionary *dict = reinterpret_cast<Dictionary *>(dictionary); if (!previousWord) { ts->init(dict, 0 /* prevWord */, 0 /* prevWordLength*/, 0 /* suggestOptions */); PrevWordsInfo prevWordsInfo; ts->init(dict, &prevWordsInfo, 0 /* suggestOptions */); return; } int prevWord[previousWordLength]; env->GetIntArrayRegion(previousWord, 0, previousWordLength, prevWord); ts->init(dict, prevWord, previousWordLength, 0 /* suggestOptions */); PrevWordsInfo prevWordsInfo(prevWord, previousWordLength, false /* isStartOfSentence */); ts->init(dict, &prevWordsInfo, 0 /* suggestOptions */); } static void latinime_releaseDicTraverseSession(JNIEnv *env, jclass clazz, jlong traverseSession) { Loading
native/jni/src/suggest/core/dictionary/bigram_dictionary.cpp +11 −10 Original line number Diff line number Diff line Loading @@ -26,6 +26,7 @@ #include "suggest/core/dictionary/dictionary.h" #include "suggest/core/policy/dictionary_structure_with_buffer_policy.h" #include "suggest/core/result/suggestion_results.h" #include "suggest/core/session/prev_words_info.h" #include "utils/char_utils.h" namespace latinime { Loading @@ -42,19 +43,18 @@ BigramDictionary::~BigramDictionary() { } /* Parameters : * prevWord: the word before, the one for which we need to look up bigrams. * prevWordLength: its length. * prevWordsInfo: Information of previous words to get the predictions. * outSuggestionResults: SuggestionResults to put the predictions. */ void BigramDictionary::getPredictions(const int *prevWord, const int prevWordLength, void BigramDictionary::getPredictions(const PrevWordsInfo *const prevWordsInfo, SuggestionResults *const outSuggestionResults) const { int pos = getBigramListPositionForWord(prevWord, prevWordLength, false /* forceLowerCaseSearch */); int pos = getBigramListPositionForWord(prevWordsInfo->getPrevWordCodePoints(), prevWordsInfo->getPrevWordCodePointCount(), false /* forceLowerCaseSearch */); // getBigramListPositionForWord returns 0 if this word isn't in the dictionary or has no bigrams if (NOT_A_DICT_POS == pos) { // If no bigrams for this exact word, search again in lower case. pos = getBigramListPositionForWord(prevWord, prevWordLength, true /* forceLowerCaseSearch */); pos = getBigramListPositionForWord(prevWordsInfo->getPrevWordCodePoints(), prevWordsInfo->getPrevWordCodePointCount(), true /* forceLowerCaseSearch */); } // If still no bigrams, we really don't have them! if (NOT_A_DICT_POS == pos) return; Loading Loading @@ -96,9 +96,10 @@ int BigramDictionary::getBigramListPositionForWord(const int *prevWord, const in return mDictionaryStructurePolicy->getBigramsPositionOfPtNode(pos); } int BigramDictionary::getBigramProbability(const int *word0, int length0, const int *word1, int length1) const { int pos = getBigramListPositionForWord(word0, length0, false /* forceLowerCaseSearch */); int BigramDictionary::getBigramProbability(const PrevWordsInfo *const prevWordsInfo, const int *word1, int length1) const { int pos = getBigramListPositionForWord(prevWordsInfo->getPrevWordCodePoints(), prevWordsInfo->getPrevWordCodePointCount(), false /* forceLowerCaseSearch */); // getBigramListPositionForWord returns 0 if this word isn't in the dictionary or has no bigrams if (NOT_A_DICT_POS == pos) return NOT_A_PROBABILITY; int nextWordPos = mDictionaryStructurePolicy->getTerminalPtNodePositionOfWord(word1, length1, Loading
native/jni/src/suggest/core/dictionary/bigram_dictionary.h +4 −2 Original line number Diff line number Diff line Loading @@ -22,15 +22,17 @@ namespace latinime { class DictionaryStructureWithBufferPolicy; class PrevWordsInfo; class SuggestionResults; class BigramDictionary { public: BigramDictionary(const DictionaryStructureWithBufferPolicy *const dictionaryStructurePolicy); void getPredictions(const int *word, int length, void getPredictions(const PrevWordsInfo *const prevWordsInfo, SuggestionResults *const outSuggestionResults) const; int getBigramProbability(const int *word1, int length1, const int *word2, int length2) const; int getBigramProbability(const PrevWordsInfo *const prevWordsInfo, const int *word1, int length1) const; ~BigramDictionary(); private: Loading
native/jni/src/suggest/core/dictionary/dictionary.cpp +6 −7 Original line number Diff line number Diff line Loading @@ -44,11 +44,11 @@ Dictionary::Dictionary(JNIEnv *env, DictionaryStructureWithBufferPolicy::Structu void Dictionary::getSuggestions(ProximityInfo *proximityInfo, DicTraverseSession *traverseSession, int *xcoordinates, int *ycoordinates, int *times, int *pointerIds, int *inputCodePoints, int inputSize, int *prevWordCodePoints, int prevWordLength, int inputSize, const PrevWordsInfo *const prevWordsInfo, const SuggestOptions *const suggestOptions, const float languageWeight, SuggestionResults *const outSuggestionResults) const { TimeKeeper::setCurrentTime(); traverseSession->init(this, prevWordCodePoints, prevWordLength, suggestOptions); traverseSession->init(this, prevWordsInfo, suggestOptions); const auto &suggest = suggestOptions->isGesture() ? mGestureSuggest : mTypingSuggest; suggest->getSuggestions(proximityInfo, traverseSession, xcoordinates, ycoordinates, times, pointerIds, inputCodePoints, inputSize, Loading @@ -58,11 +58,10 @@ void Dictionary::getSuggestions(ProximityInfo *proximityInfo, DicTraverseSession } } void Dictionary::getPredictions(const int *word, int length, void Dictionary::getPredictions(const PrevWordsInfo *const prevWordsInfo, SuggestionResults *const outSuggestionResults) const { TimeKeeper::setCurrentTime(); if (length <= 0) return; mBigramDictionary.getPredictions(word, length, outSuggestionResults); mBigramDictionary.getPredictions(prevWordsInfo, outSuggestionResults); } int Dictionary::getProbability(const int *word, int length) const { Loading @@ -75,10 +74,10 @@ int Dictionary::getProbability(const int *word, int length) const { return getDictionaryStructurePolicy()->getUnigramProbabilityOfPtNode(pos); } int Dictionary::getBigramProbability(const int *word0, int length0, const int *word1, int Dictionary::getBigramProbability(const PrevWordsInfo *const prevWordsInfo, const int *word1, int length1) const { TimeKeeper::setCurrentTime(); return mBigramDictionary.getBigramProbability(word0, length0, word1, length1); return mBigramDictionary.getBigramProbability(prevWordsInfo, word1, length1); } void Dictionary::addUnigramWord(const int *const word, const int length, Loading