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

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

Merge "Refactoring: Move prev word information into PrevWordsInfo."

parents af66ff76 b87fffb8
Loading
Loading
Loading
Loading
+8 −7
Original line number Diff line number Diff line
@@ -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"
@@ -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,
@@ -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.
+5 −2
Original line number Diff line number Diff line
@@ -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;
@@ -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) {
+11 −10
Original line number Diff line number Diff line
@@ -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 {
@@ -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;
@@ -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,
+4 −2
Original line number Diff line number Diff line
@@ -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:
+6 −7
Original line number Diff line number Diff line
@@ -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,
@@ -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 {
@@ -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