Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 72e2383d authored by Keisuke Kuroyanagi's avatar Keisuke Kuroyanagi
Browse files

Rename PrevWordsInfo to NgramContext.

Bug: 14425059
Change-Id: I30703fc80e9450d4e2dbfec965e7f9f4468f6a11
parent ab4437f4
Loading
Loading
Loading
Loading
+15 −15
Original line number Diff line number Diff line
@@ -242,15 +242,15 @@ static void latinime_BinaryDictionary_getSuggestions(JNIEnv *env, jclass clazz,
    env->GetFloatArrayRegion(inOutWeightOfLangModelVsSpatialModel, 0, 1 /* len */,
            &weightOfLangModelVsSpatialModel);
    SuggestionResults suggestionResults(MAX_RESULTS);
    const PrevWordsInfo prevWordsInfo = JniDataUtils::constructPrevWordsInfo(env,
    const NgramContext ngramContext = JniDataUtils::constructNgramContext(env,
            prevWordCodePointArrays, isBeginningOfSentenceArray, prevWordCount);
    if (givenSuggestOptions.isGesture() || inputSize > 0) {
        // TODO: Use SuggestionResults to return suggestions.
        dictionary->getSuggestions(pInfo, traverseSession, xCoordinates, yCoordinates,
                times, pointerIds, inputCodePoints, inputSize, &prevWordsInfo,
                times, pointerIds, inputCodePoints, inputSize, &ngramContext,
                &givenSuggestOptions, weightOfLangModelVsSpatialModel, &suggestionResults);
    } else {
        dictionary->getPredictions(&prevWordsInfo, &suggestionResults);
        dictionary->getPredictions(&ngramContext, &suggestionResults);
    }
    if (DEBUG_DICT) {
        suggestionResults.dumpSuggestions();
@@ -289,10 +289,10 @@ static jint latinime_BinaryDictionary_getNgramProbability(JNIEnv *env, jclass cl
    const jsize wordLength = env->GetArrayLength(word);
    int wordCodePoints[wordLength];
    env->GetIntArrayRegion(word, 0, wordLength, wordCodePoints);
    const PrevWordsInfo prevWordsInfo = JniDataUtils::constructPrevWordsInfo(env,
    const NgramContext ngramContext = JniDataUtils::constructNgramContext(env,
            prevWordCodePointArrays, isBeginningOfSentenceArray,
            env->GetArrayLength(prevWordCodePointArrays));
    return dictionary->getNgramProbability(&prevWordsInfo,
    return dictionary->getNgramProbability(&ngramContext,
            CodePointArrayView(wordCodePoints, wordLength));
}

@@ -402,7 +402,7 @@ static bool latinime_BinaryDictionary_addNgramEntry(JNIEnv *env, jclass clazz, j
    if (!dictionary) {
        return false;
    }
    const PrevWordsInfo prevWordsInfo = JniDataUtils::constructPrevWordsInfo(env,
    const NgramContext ngramContext = JniDataUtils::constructNgramContext(env,
            prevWordCodePointArrays, isBeginningOfSentenceArray,
            env->GetArrayLength(prevWordCodePointArrays));
    jsize wordLength = env->GetArrayLength(word);
@@ -411,7 +411,7 @@ static bool latinime_BinaryDictionary_addNgramEntry(JNIEnv *env, jclass clazz, j
    // Use 1 for count to indicate the ngram has inputted.
    const NgramProperty ngramProperty(CodePointArrayView(wordCodePoints, wordLength).toVector(),
            probability, HistoricalInfo(timestamp, 0 /* level */, 1 /* count */));
    return dictionary->addNgramEntry(&prevWordsInfo, &ngramProperty);
    return dictionary->addNgramEntry(&ngramContext, &ngramProperty);
}

static bool latinime_BinaryDictionary_removeNgramEntry(JNIEnv *env, jclass clazz, jlong dict,
@@ -421,13 +421,13 @@ static bool latinime_BinaryDictionary_removeNgramEntry(JNIEnv *env, jclass clazz
    if (!dictionary) {
        return false;
    }
    const PrevWordsInfo prevWordsInfo = JniDataUtils::constructPrevWordsInfo(env,
    const NgramContext ngramContext = JniDataUtils::constructNgramContext(env,
            prevWordCodePointArrays, isBeginningOfSentenceArray,
            env->GetArrayLength(prevWordCodePointArrays));
    jsize codePointCount = env->GetArrayLength(word);
    int wordCodePoints[codePointCount];
    env->GetIntArrayRegion(word, 0, codePointCount, wordCodePoints);
    return dictionary->removeNgramEntry(&prevWordsInfo,
    return dictionary->removeNgramEntry(&ngramContext,
            CodePointArrayView(wordCodePoints, codePointCount));
}

@@ -439,14 +439,14 @@ static bool latinime_BinaryDictionary_updateEntriesForWordWithNgramContext(JNIEn
    if (!dictionary) {
        return false;
    }
    const PrevWordsInfo prevWordsInfo = JniDataUtils::constructPrevWordsInfo(env,
    const NgramContext ngramContext = JniDataUtils::constructNgramContext(env,
            prevWordCodePointArrays, isBeginningOfSentenceArray,
            env->GetArrayLength(prevWordCodePointArrays));
    jsize codePointCount = env->GetArrayLength(word);
    int wordCodePoints[codePointCount];
    env->GetIntArrayRegion(word, 0, codePointCount, wordCodePoints);
    const HistoricalInfo historicalInfo(timestamp, 0 /* level */, count);
    return dictionary->updateEntriesForWordWithNgramContext(&prevWordsInfo,
    return dictionary->updateEntriesForWordWithNgramContext(&ngramContext,
            CodePointArrayView(wordCodePoints, codePointCount), isValidWord == JNI_TRUE,
            historicalInfo);
}
@@ -529,9 +529,9 @@ static int latinime_BinaryDictionary_addMultipleDictionaryEntries(JNIEnv *env, j
            const NgramProperty ngramProperty(
                    CodePointArrayView(word1CodePoints, word1Length).toVector(),
                    bigramProbability, HistoricalInfo(timestamp, 0 /* level */, 1 /* count */));
            const PrevWordsInfo prevWordsInfo(word0CodePoints, word0Length,
            const NgramContext ngramContext(word0CodePoints, word0Length,
                    false /* isBeginningOfSentence */);
            dictionary->addNgramEntry(&prevWordsInfo, &ngramProperty);
            dictionary->addNgramEntry(&ngramContext, &ngramProperty);
        }
        if (dictionary->needsToRunGC(true /* mindsBlockByGC */)) {
            return i + 1;
@@ -641,10 +641,10 @@ static bool latinime_BinaryDictionary_migrateNative(JNIEnv *env, jclass clazz, j
                return false;
            }
        }
        const PrevWordsInfo prevWordsInfo(wordCodePoints, wordCodePointCount,
        const NgramContext ngramContext(wordCodePoints, wordCodePointCount,
                wordProperty.getUnigramProperty()->representsBeginningOfSentence());
        for (const NgramProperty &ngramProperty : *wordProperty.getNgramProperties()) {
            if (!dictionaryStructureWithBufferPolicy->addNgramEntry(&prevWordsInfo,
            if (!dictionaryStructureWithBufferPolicy->addNgramEntry(&ngramContext,
                    &ngramProperty)) {
                LogUtils::logToJava(env, "Cannot add ngram to the new dict.");
                return false;
+4 −4
Original line number Diff line number Diff line
@@ -40,14 +40,14 @@ static void latinime_initDicTraverseSession(JNIEnv *env, jclass clazz, jlong tra
    }
    Dictionary *dict = reinterpret_cast<Dictionary *>(dictionary);
    if (!previousWord) {
        PrevWordsInfo prevWordsInfo;
        ts->init(dict, &prevWordsInfo, 0 /* suggestOptions */);
        NgramContext emptyNgramContext;
        ts->init(dict, &emptyNgramContext, 0 /* suggestOptions */);
        return;
    }
    int prevWord[previousWordLength];
    env->GetIntArrayRegion(previousWord, 0, previousWordLength, prevWord);
    PrevWordsInfo prevWordsInfo(prevWord, previousWordLength, false /* isStartOfSentence */);
    ts->init(dict, &prevWordsInfo, 0 /* suggestOptions */);
    NgramContext ngramContext(prevWord, previousWordLength, false /* isStartOfSentence */);
    ts->init(dict, &ngramContext, 0 /* suggestOptions */);
}

static void latinime_releaseDicTraverseSession(JNIEnv *env, jclass clazz, jlong traverseSession) {
+19 −19
Original line number Diff line number Diff line
@@ -46,11 +46,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, const PrevWordsInfo *const prevWordsInfo,
        int inputSize, const NgramContext *const ngramContext,
        const SuggestOptions *const suggestOptions, const float weightOfLangModelVsSpatialModel,
        SuggestionResults *const outSuggestionResults) const {
    TimeKeeper::setCurrentTime();
    traverseSession->init(this, prevWordsInfo, suggestOptions);
    traverseSession->init(this, ngramContext, suggestOptions);
    const auto &suggest = suggestOptions->isGesture() ? mGestureSuggest : mTypingSuggest;
    suggest->getSuggestions(proximityInfo, traverseSession, xcoordinates,
            ycoordinates, times, pointerIds, inputCodePoints, inputSize,
@@ -58,10 +58,10 @@ void Dictionary::getSuggestions(ProximityInfo *proximityInfo, DicTraverseSession
}

Dictionary::NgramListenerForPrediction::NgramListenerForPrediction(
        const PrevWordsInfo *const prevWordsInfo, const WordIdArrayView prevWordIds,
        const NgramContext *const ngramContext, const WordIdArrayView prevWordIds,
        SuggestionResults *const suggestionResults,
        const DictionaryStructureWithBufferPolicy *const dictStructurePolicy)
    : mPrevWordsInfo(prevWordsInfo), mPrevWordIds(prevWordIds),
    : mNgramContext(ngramContext), mPrevWordIds(prevWordIds),
      mSuggestionResults(suggestionResults), mDictStructurePolicy(dictStructurePolicy) {}

void Dictionary::NgramListenerForPrediction::onVisitEntry(const int ngramProbability,
@@ -69,7 +69,7 @@ void Dictionary::NgramListenerForPrediction::onVisitEntry(const int ngramProbabi
    if (targetWordId == NOT_A_WORD_ID) {
        return;
    }
    if (mPrevWordsInfo->isNthPrevWordBeginningOfSentence(1 /* n */)
    if (mNgramContext->isNthPrevWordBeginningOfSentence(1 /* n */)
            && ngramProbability == NOT_A_PROBABILITY) {
        return;
    }
@@ -85,20 +85,20 @@ void Dictionary::NgramListenerForPrediction::onVisitEntry(const int ngramProbabi
            wordAttributes.getProbability());
}

void Dictionary::getPredictions(const PrevWordsInfo *const prevWordsInfo,
void Dictionary::getPredictions(const NgramContext *const ngramContext,
        SuggestionResults *const outSuggestionResults) const {
    TimeKeeper::setCurrentTime();
    WordIdArray<MAX_PREV_WORD_COUNT_FOR_N_GRAM> prevWordIdArray;
    const WordIdArrayView prevWordIds = prevWordsInfo->getPrevWordIds(
    const WordIdArrayView prevWordIds = ngramContext->getPrevWordIds(
            mDictionaryStructureWithBufferPolicy.get(), &prevWordIdArray,
            true /* tryLowerCaseSearch */);
    NgramListenerForPrediction listener(prevWordsInfo, prevWordIds, outSuggestionResults,
    NgramListenerForPrediction listener(ngramContext, prevWordIds, outSuggestionResults,
            mDictionaryStructureWithBufferPolicy.get());
    mDictionaryStructureWithBufferPolicy->iterateNgramEntries(prevWordIds, &listener);
}

int Dictionary::getProbability(const CodePointArrayView codePoints) const {
    return getNgramProbability(nullptr /* prevWordsInfo */, codePoints);
    return getNgramProbability(nullptr /* ngramContext */, codePoints);
}

int Dictionary::getMaxProbabilityOfExactMatches(const CodePointArrayView codePoints) const {
@@ -107,18 +107,18 @@ int Dictionary::getMaxProbabilityOfExactMatches(const CodePointArrayView codePoi
            mDictionaryStructureWithBufferPolicy.get(), codePoints);
}

int Dictionary::getNgramProbability(const PrevWordsInfo *const prevWordsInfo,
int Dictionary::getNgramProbability(const NgramContext *const ngramContext,
        const CodePointArrayView codePoints) const {
    TimeKeeper::setCurrentTime();
    const int wordId = mDictionaryStructureWithBufferPolicy->getWordId(codePoints,
            false /* forceLowerCaseSearch */);
    if (wordId == NOT_A_WORD_ID) return NOT_A_PROBABILITY;
    if (!prevWordsInfo) {
    if (!ngramContext) {
        return getDictionaryStructurePolicy()->getProbabilityOfWord(WordIdArrayView(), wordId);
    }
    WordIdArray<MAX_PREV_WORD_COUNT_FOR_N_GRAM> prevWordIdArray;
    const WordIdArrayView prevWordIds = prevWordsInfo->getPrevWordIds
            (mDictionaryStructureWithBufferPolicy.get(), &prevWordIdArray,
    const WordIdArrayView prevWordIds = ngramContext->getPrevWordIds(
            mDictionaryStructureWithBufferPolicy.get(), &prevWordIdArray,
            true /* tryLowerCaseSearch */);
    return getDictionaryStructurePolicy()->getProbabilityOfWord(prevWordIds, wordId);
}
@@ -140,23 +140,23 @@ bool Dictionary::removeUnigramEntry(const CodePointArrayView codePoints) {
    return mDictionaryStructureWithBufferPolicy->removeUnigramEntry(codePoints);
}

bool Dictionary::addNgramEntry(const PrevWordsInfo *const prevWordsInfo,
bool Dictionary::addNgramEntry(const NgramContext *const ngramContext,
        const NgramProperty *const ngramProperty) {
    TimeKeeper::setCurrentTime();
    return mDictionaryStructureWithBufferPolicy->addNgramEntry(prevWordsInfo, ngramProperty);
    return mDictionaryStructureWithBufferPolicy->addNgramEntry(ngramContext, ngramProperty);
}

bool Dictionary::removeNgramEntry(const PrevWordsInfo *const prevWordsInfo,
bool Dictionary::removeNgramEntry(const NgramContext *const ngramContext,
        const CodePointArrayView codePoints) {
    TimeKeeper::setCurrentTime();
    return mDictionaryStructureWithBufferPolicy->removeNgramEntry(prevWordsInfo, codePoints);
    return mDictionaryStructureWithBufferPolicy->removeNgramEntry(ngramContext, codePoints);
}

bool Dictionary::updateEntriesForWordWithNgramContext(const PrevWordsInfo *const prevWordsInfo,
bool Dictionary::updateEntriesForWordWithNgramContext(const NgramContext *const ngramContext,
        const CodePointArrayView codePoints, const bool isValidWord,
        const HistoricalInfo historicalInfo) {
    TimeKeeper::setCurrentTime();
    return mDictionaryStructureWithBufferPolicy->updateEntriesForWordWithNgramContext(prevWordsInfo,
    return mDictionaryStructureWithBufferPolicy->updateEntriesForWordWithNgramContext(ngramContext,
            codePoints, isValidWord, historicalInfo);
}

+9 −9
Original line number Diff line number Diff line
@@ -33,7 +33,7 @@ namespace latinime {

class DictionaryStructureWithBufferPolicy;
class DicTraverseSession;
class PrevWordsInfo;
class NgramContext;
class ProximityInfo;
class SuggestionResults;
class SuggestOptions;
@@ -66,18 +66,18 @@ class Dictionary {

    void getSuggestions(ProximityInfo *proximityInfo, DicTraverseSession *traverseSession,
            int *xcoordinates, int *ycoordinates, int *times, int *pointerIds, int *inputCodePoints,
            int inputSize, const PrevWordsInfo *const prevWordsInfo,
            int inputSize, const NgramContext *const ngramContext,
            const SuggestOptions *const suggestOptions, const float weightOfLangModelVsSpatialModel,
            SuggestionResults *const outSuggestionResults) const;

    void getPredictions(const PrevWordsInfo *const prevWordsInfo,
    void getPredictions(const NgramContext *const ngramContext,
            SuggestionResults *const outSuggestionResults) const;

    int getProbability(const CodePointArrayView codePoints) const;

    int getMaxProbabilityOfExactMatches(const CodePointArrayView codePoints) const;

    int getNgramProbability(const PrevWordsInfo *const prevWordsInfo,
    int getNgramProbability(const NgramContext *const ngramContext,
            const CodePointArrayView codePoints) const;

    bool addUnigramEntry(const CodePointArrayView codePoints,
@@ -85,13 +85,13 @@ class Dictionary {

    bool removeUnigramEntry(const CodePointArrayView codePoints);

    bool addNgramEntry(const PrevWordsInfo *const prevWordsInfo,
    bool addNgramEntry(const NgramContext *const ngramContext,
            const NgramProperty *const ngramProperty);

    bool removeNgramEntry(const PrevWordsInfo *const prevWordsInfo,
    bool removeNgramEntry(const NgramContext *const ngramContext,
            const CodePointArrayView codePoints);

    bool updateEntriesForWordWithNgramContext(const PrevWordsInfo *const prevWordsInfo,
    bool updateEntriesForWordWithNgramContext(const NgramContext *const ngramContext,
            const CodePointArrayView codePoints, const bool isValidWord,
            const HistoricalInfo historicalInfo);

@@ -123,7 +123,7 @@ class Dictionary {

    class NgramListenerForPrediction : public NgramListener {
     public:
        NgramListenerForPrediction(const PrevWordsInfo *const prevWordsInfo,
        NgramListenerForPrediction(const NgramContext *const ngramContext,
                const WordIdArrayView prevWordIds, SuggestionResults *const suggestionResults,
                const DictionaryStructureWithBufferPolicy *const dictStructurePolicy);
        virtual void onVisitEntry(const int ngramProbability, const int targetWordId);
@@ -131,7 +131,7 @@ class Dictionary {
     private:
        DISALLOW_IMPLICIT_CONSTRUCTORS(NgramListenerForPrediction);

        const PrevWordsInfo *const mPrevWordsInfo;
        const NgramContext *const mNgramContext;
        const WordIdArrayView mPrevWordIds;
        SuggestionResults *const mSuggestionResults;
        const DictionaryStructureWithBufferPolicy *const mDictStructurePolicy;
+3 −3
Original line number Diff line number Diff line
@@ -33,10 +33,10 @@ namespace latinime {
    std::vector<DicNode> current;
    std::vector<DicNode> next;

    // No prev words information.
    PrevWordsInfo emptyPrevWordsInfo;
    // No ngram context.
    NgramContext emptyNgramContext;
    WordIdArray<MAX_PREV_WORD_COUNT_FOR_N_GRAM> prevWordIdArray;
    const WordIdArrayView prevWordIds = emptyPrevWordsInfo.getPrevWordIds(
    const WordIdArrayView prevWordIds = emptyNgramContext.getPrevWordIds(
            dictionaryStructurePolicy, &prevWordIdArray, false /* tryLowerCaseSearch */);
    current.emplace_back();
    DicNodeUtils::initAsRoot(dictionaryStructurePolicy, prevWordIds, &current.front());
Loading