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

Commit 20b7786e authored by Keisuke Kuroyanagi's avatar Keisuke Kuroyanagi
Browse files

Add BigramProperty and ShortcutProperty in WordProperty.

Bug: 12810574
Change-Id: Ia9e497c49bb2cf10897bae3a79317113325db819
parent de76e62b
Loading
Loading
Loading
Loading
+5 −4
Original line number Diff line number Diff line
@@ -33,15 +33,16 @@ void WordProperty::outputProperties(JNIEnv *const env, jintArray outCodePoints,
    jmethodID intToIntegerConstructorId = env->GetMethodID(integerClass, "<init>", "(I)V");
    jclass arrayListClass = env->FindClass("java/util/ArrayList");
    jmethodID addMethodId = env->GetMethodID(arrayListClass, "add", "(Ljava/lang/Object;)Z");
    const int shortcutTargetCount = mShortcutTargets.size();
    const int shortcutTargetCount = mShortcuts.size();
    for (int i = 0; i < shortcutTargetCount; ++i) {
        jintArray shortcutTargetCodePointArray = env->NewIntArray(mShortcutTargets[i].size());
        const std::vector<int> *const targetCodePoints = mShortcuts[i].getTargetCodePoints();
        jintArray shortcutTargetCodePointArray = env->NewIntArray(targetCodePoints->size());
        env->SetIntArrayRegion(shortcutTargetCodePointArray, 0 /* start */,
                mShortcutTargets[i].size(), &mShortcutTargets[i][0]);
                targetCodePoints->size(), &targetCodePoints->at(0));
        env->CallVoidMethod(outShortcutTargets, addMethodId, shortcutTargetCodePointArray);
        env->DeleteLocalRef(shortcutTargetCodePointArray);
        jobject integerProbability = env->NewObject(integerClass, intToIntegerConstructorId,
                mShortcutProbabilities[i]);
                mShortcuts[i].getProbability());
        env->CallVoidMethod(outShortcutProbabilities, addMethodId, integerProbability);
        env->DeleteLocalRef(integerProbability);
    }
+40 −10
Original line number Diff line number Diff line
@@ -28,23 +28,54 @@ namespace latinime {
// This class is used for returning information belonging to a word to java side.
class WordProperty {
 public:
    // TODO: Add bigram information.
    class BigramProperty {
     public:
        BigramProperty(const std::vector<int> *const targetCodePoints,
                const int probability, const int timestamp, const int level, const int count)
                : mTargetCodePoints(*targetCodePoints), mProbability(probability),
                  mTimestamp(timestamp), mLevel(level), mCount(count) {}

     private:
        std::vector<int> mTargetCodePoints;
        int mProbability;
        int mTimestamp;
        int mLevel;
        int mCount;
    };

    class ShortcutProperty {
     public:
        ShortcutProperty(const std::vector<int> *const targetCodePoints, const int probability)
                : mTargetCodePoints(*targetCodePoints), mProbability(probability) {}

        const std::vector<int> *getTargetCodePoints() const {
            return &mTargetCodePoints;
        }

        int getProbability() const {
            return mProbability;
        }

     private:
        std::vector<int> mTargetCodePoints;
        int mProbability;
    };

    // Invalid word.
    WordProperty()
            : mCodePoints(), mIsNotAWord(false), mIsBlacklisted(false),
              mHasBigrams(false), mHasShortcuts(false), mProbability(NOT_A_PROBABILITY),
              mTimestamp(0), mLevel(0), mCount(0), mShortcutTargets(), mShortcutProbabilities() {}
              mTimestamp(0), mLevel(0), mCount(0), mBigrams(), mShortcuts() {}

    WordProperty(const std::vector<int> *const codePoints,
            const bool isNotAWord, const bool isBlacklisted, const bool hasBigrams,
            const bool hasShortcuts, const int probability, const int timestamp,
            const int level, const int count,
            const std::vector<std::vector<int> > *const shortcutTargets,
            const std::vector<int> *const shortcutProbabilities)
            const int level, const int count, const std::vector<BigramProperty> *const bigrams,
            const std::vector<ShortcutProperty> *const shortcuts)
            : mCodePoints(*codePoints), mIsNotAWord(isNotAWord), mIsBlacklisted(isBlacklisted),
              mHasBigrams(hasBigrams), mHasShortcuts(hasShortcuts), mProbability(probability),
              mTimestamp(timestamp), mLevel(level), mCount(count),
              mShortcutTargets(*shortcutTargets), mShortcutProbabilities(*shortcutProbabilities) {}
              mTimestamp(timestamp), mLevel(level), mCount(count), mBigrams(*bigrams),
              mShortcuts(*shortcuts) {}

    void outputProperties(JNIEnv *const env, jintArray outCodePoints, jbooleanArray outFlags,
            jintArray outProbability, jintArray outHistoricalInfo, jobject outShortcutTargets,
@@ -63,9 +94,8 @@ class WordProperty {
    int mTimestamp;
    int mLevel;
    int mCount;
    // Shortcut
    std::vector<std::vector<int> > mShortcutTargets;
    std::vector<int> mShortcutProbabilities;
    std::vector<BigramProperty> mBigrams;
    std::vector<ShortcutProperty> mShortcuts;
};
} // namespace latinime
#endif // LATINIME_WORD_PROPERTY_H
+5 −5
Original line number Diff line number Diff line
@@ -332,9 +332,10 @@ const WordProperty Ver4PatriciaTriePolicy::getWordProperty(const int *const code
            mBuffers.get()->getProbabilityDictContent()->getProbabilityEntry(
                    ptNodeParams.getTerminalId());
    const HistoricalInfo *const historicalInfo = probabilityEntry.getHistoricalInfo();
    // TODO: Fetch bigram information.
    std::vector<WordProperty::BigramProperty> bigrams;
    // Fetch shortcut information.
    std::vector<std::vector<int> > shortcutTargets;
    std::vector<int> shortcutProbabilities;
    std::vector<WordProperty::ShortcutProperty> shortcuts;
    int shortcutPos = getShortcutPositionOfPtNode(ptNodePos);
    if (shortcutPos != NOT_A_DICT_POS) {
        int shortcutTarget[MAX_WORD_LENGTH];
@@ -347,15 +348,14 @@ const WordProperty Ver4PatriciaTriePolicy::getWordProperty(const int *const code
            shortcutDictContent->getShortcutEntryAndAdvancePosition(MAX_WORD_LENGTH, shortcutTarget,
                    &shortcutTargetLength, &shortcutProbability, &hasNext, &shortcutPos);
            std::vector<int> target(shortcutTarget, shortcutTarget + shortcutTargetLength);
            shortcutTargets.push_back(target);
            shortcutProbabilities.push_back(shortcutProbability);
            shortcuts.push_back(WordProperty::ShortcutProperty(&target, shortcutProbability));
        }
    }
    return WordProperty(&codePointVector, ptNodeParams.isNotAWord(),
            ptNodeParams.isBlacklisted(), ptNodeParams.hasBigrams(),
            ptNodeParams.hasShortcutTargets(), ptNodeParams.getProbability(),
            historicalInfo->getTimeStamp(), historicalInfo->getLevel(),
            historicalInfo->getCount(), &shortcutTargets, &shortcutProbabilities);
            historicalInfo->getCount(), &bigrams, &shortcuts);
}

} // namespace latinime