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

Commit 22931cd9 authored by Keisuke Kuroyanagi's avatar Keisuke Kuroyanagi
Browse files

Enable Beginning-of-Sentence prediction for contextual dict.

Bug: 14161647
Bug: 14119293
Change-Id: I0c00f13966db88e4de85e245e7bced43c9d474b2
parent d979d416
Loading
Loading
Loading
Loading
+10 −0
Original line number Diff line number Diff line
@@ -122,6 +122,12 @@ abstract public class ExpandableBinaryDictionary extends Dictionary {
        return mBinaryDictionary.isValidDictionary();
    }

    // TODO: Remove and always enable beginning of sentence prediction. Currently, this is enabled
    // only for ContextualDictionary.
    protected boolean enableBeginningOfSentencePrediction() {
        return false;
    }

    /**
     * Creates a new expandable binary dictionary.
     *
@@ -398,6 +404,10 @@ abstract public class ExpandableBinaryDictionary extends Dictionary {
                if (mBinaryDictionary == null) {
                    return null;
                }
                if (composer.size() == 0 && prevWordsInfo.mIsBeginningOfSentence
                        && !enableBeginningOfSentencePrediction()) {
                    return null;
                }
                final ArrayList<SuggestedWordInfo> suggestions =
                        mBinaryDictionary.getSuggestions(composer, prevWordsInfo, proximityInfo,
                                blockOffensiveWords, additionalFeaturesOptions, sessionId,
+6 −0
Original line number Diff line number Diff line
@@ -35,12 +35,18 @@ public class ContextualDictionary extends ExpandableBinaryDictionary {
        // Always reset the contents.
        clear();
    }

    @UsedForTesting
    public static ContextualDictionary getDictionary(final Context context, final Locale locale,
            final File dictFile, final String dictNamePrefix) {
        return new ContextualDictionary(context, locale, dictFile);
    }

    @Override
    protected boolean enableBeginningOfSentencePrediction() {
        return true;
    }

    @Override
    public boolean isValidWord(final String word) {
        // Strings out of this dictionary should not be considered existing words.
+1 −1
Original line number Diff line number Diff line
@@ -249,7 +249,7 @@ static void latinime_BinaryDictionary_getSuggestions(JNIEnv *env, jclass clazz,
    env->GetFloatArrayRegion(inOutLanguageWeight, 0, 1 /* len */, &languageWeight);
    SuggestionResults suggestionResults(MAX_RESULTS);
    const PrevWordsInfo prevWordsInfo(prevWordCodePoints, prevWordCodePointsLength,
            false /* isStartOfSentence */);
            isBeginningOfSentence);
    if (givenSuggestOptions.isGesture() || inputSize > 0) {
        // TODO: Use SuggestionResults to return suggestions.
        dictionary->getSuggestions(pInfo, traverseSession, xCoordinates, yCoordinates,
+8 −0
Original line number Diff line number Diff line
@@ -85,6 +85,14 @@ class PrevWordsInfo {
        return mPrevWordCodePointCount[n - 1];
    }

    // n is 1-indexed.
    bool isNthPrevWordBeginningOfSentence(const int n) const {
        if (n <= 0 || n > MAX_PREV_WORD_COUNT_FOR_N_GRAM) {
            return false;
        }
        return mIsBeginningOfSentence[n - 1];
    }

 private:
    DISALLOW_COPY_AND_ASSIGN(PrevWordsInfo);

+18 −1
Original line number Diff line number Diff line
@@ -246,8 +246,25 @@ bool Ver4PatriciaTriePolicy::addNgramEntry(const PrevWordsInfo *const prevWordsI
            false /* tryLowerCaseSearch */);
    // TODO: Support N-gram.
    if (prevWordsPtNodePos[0] == NOT_A_DICT_POS) {
        if (prevWordsInfo->isNthPrevWordBeginningOfSentence(1 /* n */)) {
            const std::vector<UnigramProperty::ShortcutProperty> shortcuts;
            const UnigramProperty beginningOfSentenceUnigramProperty(
                    true /* representsBeginningOfSentence */, true /* isNotAWord */,
                    false /* isBlacklisted */, MAX_PROBABILITY /* probability */,
                    NOT_A_TIMESTAMP /* timestamp */, 0 /* level */, 0 /* count */, &shortcuts);
            if (!addUnigramEntry(prevWordsInfo->getNthPrevWordCodePoints(1 /* n */),
                    prevWordsInfo->getNthPrevWordCodePointCount(1 /* n */),
                    &beginningOfSentenceUnigramProperty)) {
                AKLOGE("Cannot add unigram entry for the beginning-of-sentence.");
                return false;
            }
            // Refresh Terminal PtNode positions.
            prevWordsInfo->getPrevWordsTerminalPtNodePos(this, prevWordsPtNodePos,
                    false /* tryLowerCaseSearch */);
        } else {
            return false;
        }
    }
    const int word1Pos = getTerminalPtNodePositionOfWord(
            bigramProperty->getTargetCodePoints()->data(),
            bigramProperty->getTargetCodePoints()->size(), false /* forceLowerCaseSearch */);