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

Commit e38f7918 authored by Keisuke Kuroyanagi's avatar Keisuke Kuroyanagi Committed by Android (Google) Code Review
Browse files

Merge "Get bigram probability using language model dict content."

parents dc442604 295e6023
Loading
Loading
Loading
Loading
+17 −10
Original line number Diff line number Diff line
@@ -127,21 +127,28 @@ int Ver4PatriciaTriePolicy::getProbabilityOfPtNode(const int *const prevWordsPtN
    if (ptNodePos == NOT_A_DICT_POS) {
        return NOT_A_PROBABILITY;
    }
    const PtNodeParams ptNodeParams(mNodeReader.fetchPtNodeParamsInBufferFromPtNodePos(ptNodePos));
    const PtNodeParams ptNodeParams = mNodeReader.fetchPtNodeParamsInBufferFromPtNodePos(ptNodePos);
    if (ptNodeParams.isDeleted() || ptNodeParams.isBlacklisted() || ptNodeParams.isNotAWord()) {
        return NOT_A_PROBABILITY;
    }
    if (prevWordsPtNodePos) {
        const int bigramsPosition = getBigramsPositionOfPtNode(prevWordsPtNodePos[0]);
        BinaryDictionaryBigramsIterator bigramsIt(&mBigramPolicy, bigramsPosition);
        while (bigramsIt.hasNext()) {
            bigramsIt.next();
            if (bigramsIt.getBigramPos() == ptNodePos
                    && bigramsIt.getProbability() != NOT_A_PROBABILITY) {
                return getProbability(ptNodeParams.getProbability(), bigramsIt.getProbability());
        // TODO: Support n-gram.
        const PtNodeParams prevWordPtNodeParams =
                mNodeReader.fetchPtNodeParamsInBufferFromPtNodePos(prevWordsPtNodePos[0]);
        const int prevWordTerminalId = prevWordPtNodeParams.getTerminalId();
        const ProbabilityEntry probabilityEntry =
                mBuffers->getLanguageModelDictContent()->getNgramProbabilityEntry(
                        IntArrayView::fromObject(&prevWordTerminalId),
                        ptNodeParams.getTerminalId());
        if (!probabilityEntry.isValid()) {
            return NOT_A_PROBABILITY;
        }
        if (mHeaderPolicy->hasHistoricalInfoOfWords()) {
            return ForgettingCurveUtils::decodeProbability(probabilityEntry.getHistoricalInfo(),
                    mHeaderPolicy);
        } else {
            return probabilityEntry.getProbability();
        }
        return NOT_A_PROBABILITY;
    }
    return getProbability(ptNodeParams.getProbability(), NOT_A_PROBABILITY);
}