Loading native/jni/src/suggest/policyimpl/dictionary/structure/backward/v402/ver4_patricia_trie_policy.cpp +18 −1 Original line number Original line Diff line number Diff line Loading @@ -256,8 +256,25 @@ bool Ver4PatriciaTriePolicy::addNgramEntry(const PrevWordsInfo *const prevWordsI false /* tryLowerCaseSearch */); false /* tryLowerCaseSearch */); // TODO: Support N-gram. // TODO: Support N-gram. if (prevWordsPtNodePos[0] == NOT_A_DICT_POS) { 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; return false; } } // Refresh Terminal PtNode positions. prevWordsInfo->getPrevWordsTerminalPtNodePos(this, prevWordsPtNodePos, false /* tryLowerCaseSearch */); } else { return false; } } const int word1Pos = getTerminalPtNodePositionOfWord( const int word1Pos = getTerminalPtNodePositionOfWord( bigramProperty->getTargetCodePoints()->data(), bigramProperty->getTargetCodePoints()->data(), bigramProperty->getTargetCodePoints()->size(), false /* forceLowerCaseSearch */); bigramProperty->getTargetCodePoints()->size(), false /* forceLowerCaseSearch */); Loading tests/src/com/android/inputmethod/latin/BinaryDictionaryTests.java +7 −11 Original line number Original line Diff line number Diff line Loading @@ -1450,27 +1450,23 @@ public class BinaryDictionaryTests extends AndroidTestCase { 0 /* offset */, dictFile.length(), true /* useFullEditDistance */, 0 /* offset */, dictFile.length(), true /* useFullEditDistance */, Locale.getDefault(), TEST_LOCALE, true /* isUpdatable */); Locale.getDefault(), TEST_LOCALE, true /* isUpdatable */); final int dummyProbability = 0; final int dummyProbability = 0; binaryDictionary.addUnigramEntry("", dummyProbability, "" /* shortcutTarget */, final PrevWordsInfo prevWordsInfoBeginningOfSentence = PrevWordsInfo.BEGINNING_OF_SENTENCE; BinaryDictionary.NOT_A_PROBABILITY /* shortcutProbability */, true /* isBeginningOfSentence */, true /* isNotAWord */, false /* isBlacklisted */, BinaryDictionary.NOT_A_VALID_TIMESTAMP /* timestamp */); final PrevWordsInfo prevWordsInfoStartOfSentence = PrevWordsInfo.BEGINNING_OF_SENTENCE; final int bigramProbability = 200; final int bigramProbability = 200; addUnigramWord(binaryDictionary, "aaa", dummyProbability); addUnigramWord(binaryDictionary, "aaa", dummyProbability); binaryDictionary.addNgramEntry(prevWordsInfoStartOfSentence, "aaa", bigramProbability, binaryDictionary.addNgramEntry(prevWordsInfoBeginningOfSentence, "aaa", bigramProbability, BinaryDictionary.NOT_A_VALID_TIMESTAMP /* timestamp */); BinaryDictionary.NOT_A_VALID_TIMESTAMP /* timestamp */); assertEquals(bigramProbability, assertEquals(bigramProbability, binaryDictionary.getNgramProbability(prevWordsInfoStartOfSentence, "aaa")); binaryDictionary.getNgramProbability(prevWordsInfoBeginningOfSentence, "aaa")); binaryDictionary.addNgramEntry(prevWordsInfoStartOfSentence, "aaa", bigramProbability, binaryDictionary.addNgramEntry(prevWordsInfoBeginningOfSentence, "aaa", bigramProbability, BinaryDictionary.NOT_A_VALID_TIMESTAMP /* timestamp */); BinaryDictionary.NOT_A_VALID_TIMESTAMP /* timestamp */); addUnigramWord(binaryDictionary, "bbb", dummyProbability); addUnigramWord(binaryDictionary, "bbb", dummyProbability); binaryDictionary.addNgramEntry(prevWordsInfoStartOfSentence, "bbb", bigramProbability, binaryDictionary.addNgramEntry(prevWordsInfoBeginningOfSentence, "bbb", bigramProbability, BinaryDictionary.NOT_A_VALID_TIMESTAMP /* timestamp */); BinaryDictionary.NOT_A_VALID_TIMESTAMP /* timestamp */); binaryDictionary.flushWithGC(); binaryDictionary.flushWithGC(); assertEquals(bigramProbability, assertEquals(bigramProbability, binaryDictionary.getNgramProbability(prevWordsInfoStartOfSentence, "aaa")); binaryDictionary.getNgramProbability(prevWordsInfoBeginningOfSentence, "aaa")); assertEquals(bigramProbability, assertEquals(bigramProbability, binaryDictionary.getNgramProbability(prevWordsInfoStartOfSentence, "bbb")); binaryDictionary.getNgramProbability(prevWordsInfoBeginningOfSentence, "bbb")); } } public void testGetMaxFrequencyOfExactMatches() { public void testGetMaxFrequencyOfExactMatches() { Loading Loading
native/jni/src/suggest/policyimpl/dictionary/structure/backward/v402/ver4_patricia_trie_policy.cpp +18 −1 Original line number Original line Diff line number Diff line Loading @@ -256,8 +256,25 @@ bool Ver4PatriciaTriePolicy::addNgramEntry(const PrevWordsInfo *const prevWordsI false /* tryLowerCaseSearch */); false /* tryLowerCaseSearch */); // TODO: Support N-gram. // TODO: Support N-gram. if (prevWordsPtNodePos[0] == NOT_A_DICT_POS) { 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; return false; } } // Refresh Terminal PtNode positions. prevWordsInfo->getPrevWordsTerminalPtNodePos(this, prevWordsPtNodePos, false /* tryLowerCaseSearch */); } else { return false; } } const int word1Pos = getTerminalPtNodePositionOfWord( const int word1Pos = getTerminalPtNodePositionOfWord( bigramProperty->getTargetCodePoints()->data(), bigramProperty->getTargetCodePoints()->data(), bigramProperty->getTargetCodePoints()->size(), false /* forceLowerCaseSearch */); bigramProperty->getTargetCodePoints()->size(), false /* forceLowerCaseSearch */); Loading
tests/src/com/android/inputmethod/latin/BinaryDictionaryTests.java +7 −11 Original line number Original line Diff line number Diff line Loading @@ -1450,27 +1450,23 @@ public class BinaryDictionaryTests extends AndroidTestCase { 0 /* offset */, dictFile.length(), true /* useFullEditDistance */, 0 /* offset */, dictFile.length(), true /* useFullEditDistance */, Locale.getDefault(), TEST_LOCALE, true /* isUpdatable */); Locale.getDefault(), TEST_LOCALE, true /* isUpdatable */); final int dummyProbability = 0; final int dummyProbability = 0; binaryDictionary.addUnigramEntry("", dummyProbability, "" /* shortcutTarget */, final PrevWordsInfo prevWordsInfoBeginningOfSentence = PrevWordsInfo.BEGINNING_OF_SENTENCE; BinaryDictionary.NOT_A_PROBABILITY /* shortcutProbability */, true /* isBeginningOfSentence */, true /* isNotAWord */, false /* isBlacklisted */, BinaryDictionary.NOT_A_VALID_TIMESTAMP /* timestamp */); final PrevWordsInfo prevWordsInfoStartOfSentence = PrevWordsInfo.BEGINNING_OF_SENTENCE; final int bigramProbability = 200; final int bigramProbability = 200; addUnigramWord(binaryDictionary, "aaa", dummyProbability); addUnigramWord(binaryDictionary, "aaa", dummyProbability); binaryDictionary.addNgramEntry(prevWordsInfoStartOfSentence, "aaa", bigramProbability, binaryDictionary.addNgramEntry(prevWordsInfoBeginningOfSentence, "aaa", bigramProbability, BinaryDictionary.NOT_A_VALID_TIMESTAMP /* timestamp */); BinaryDictionary.NOT_A_VALID_TIMESTAMP /* timestamp */); assertEquals(bigramProbability, assertEquals(bigramProbability, binaryDictionary.getNgramProbability(prevWordsInfoStartOfSentence, "aaa")); binaryDictionary.getNgramProbability(prevWordsInfoBeginningOfSentence, "aaa")); binaryDictionary.addNgramEntry(prevWordsInfoStartOfSentence, "aaa", bigramProbability, binaryDictionary.addNgramEntry(prevWordsInfoBeginningOfSentence, "aaa", bigramProbability, BinaryDictionary.NOT_A_VALID_TIMESTAMP /* timestamp */); BinaryDictionary.NOT_A_VALID_TIMESTAMP /* timestamp */); addUnigramWord(binaryDictionary, "bbb", dummyProbability); addUnigramWord(binaryDictionary, "bbb", dummyProbability); binaryDictionary.addNgramEntry(prevWordsInfoStartOfSentence, "bbb", bigramProbability, binaryDictionary.addNgramEntry(prevWordsInfoBeginningOfSentence, "bbb", bigramProbability, BinaryDictionary.NOT_A_VALID_TIMESTAMP /* timestamp */); BinaryDictionary.NOT_A_VALID_TIMESTAMP /* timestamp */); binaryDictionary.flushWithGC(); binaryDictionary.flushWithGC(); assertEquals(bigramProbability, assertEquals(bigramProbability, binaryDictionary.getNgramProbability(prevWordsInfoStartOfSentence, "aaa")); binaryDictionary.getNgramProbability(prevWordsInfoBeginningOfSentence, "aaa")); assertEquals(bigramProbability, assertEquals(bigramProbability, binaryDictionary.getNgramProbability(prevWordsInfoStartOfSentence, "bbb")); binaryDictionary.getNgramProbability(prevWordsInfoBeginningOfSentence, "bbb")); } } public void testGetMaxFrequencyOfExactMatches() { public void testGetMaxFrequencyOfExactMatches() { Loading