Loading native/jni/src/suggest/core/dictionary/binary_dictionary_bigrams_iterator.h +5 −0 Original line number Diff line number Diff line Loading @@ -24,6 +24,11 @@ namespace latinime { class BinaryDictionaryBigramsIterator { public: // Empty iterator. BinaryDictionaryBigramsIterator() : mBigramsStructurePolicy(nullptr), mPos(NOT_A_DICT_POS), mBigramPos(NOT_A_DICT_POS), mProbability(NOT_A_PROBABILITY), mHasNext(false) {} BinaryDictionaryBigramsIterator( const DictionaryBigramsStructurePolicy *const bigramsStructurePolicy, const int pos) : mBigramsStructurePolicy(bigramsStructurePolicy), mPos(pos), Loading native/jni/src/suggest/core/dictionary/multi_bigram_map.cpp +4 −6 Original line number Diff line number Diff line Loading @@ -53,9 +53,8 @@ int MultiBigramMap::getBigramProbability( void MultiBigramMap::BigramMap::init( const DictionaryStructureWithBufferPolicy *const structurePolicy, const int nodePos) { const int bigramsListPos = structurePolicy->getBigramsPositionOfPtNode(nodePos); BinaryDictionaryBigramsIterator bigramsIt(structurePolicy->getBigramsStructurePolicy(), bigramsListPos); BinaryDictionaryBigramsIterator bigramsIt = structurePolicy->getBigramsIteratorOfPtNode(nodePos); while (bigramsIt.hasNext()) { bigramsIt.next(); if (bigramsIt.getBigramPos() == NOT_A_DICT_POS) { Loading Loading @@ -89,9 +88,8 @@ int MultiBigramMap::readBigramProbabilityFromBinaryDictionary( const DictionaryStructureWithBufferPolicy *const structurePolicy, const int nodePos, const int nextWordPosition, const int unigramProbability) { int bigramProbability = NOT_A_PROBABILITY; const int bigramsListPos = structurePolicy->getBigramsPositionOfPtNode(nodePos); BinaryDictionaryBigramsIterator bigramsIt(structurePolicy->getBigramsStructurePolicy(), bigramsListPos); BinaryDictionaryBigramsIterator bigramsIt = structurePolicy->getBigramsIteratorOfPtNode(nodePos); while (bigramsIt.hasNext()) { bigramsIt.next(); if (bigramsIt.getBigramPos() == nextWordPosition) { Loading native/jni/src/suggest/core/policy/dictionary_structure_with_buffer_policy.h +2 −3 Original line number Diff line number Diff line Loading @@ -20,6 +20,7 @@ #include <memory> #include "defines.h" #include "suggest/core/dictionary/binary_dictionary_bigrams_iterator.h" #include "suggest/core/dictionary/property/word_property.h" namespace latinime { Loading Loading @@ -61,12 +62,10 @@ class DictionaryStructureWithBufferPolicy { virtual int getShortcutPositionOfPtNode(const int nodePos) const = 0; virtual int getBigramsPositionOfPtNode(const int nodePos) const = 0; virtual BinaryDictionaryBigramsIterator getBigramsIteratorOfPtNode(const int nodePos) const = 0; virtual const DictionaryHeaderStructurePolicy *getHeaderStructurePolicy() const = 0; virtual const DictionaryBigramsStructurePolicy *getBigramsStructurePolicy() const = 0; virtual const DictionaryShortcutsStructurePolicy *getShortcutsStructurePolicy() const = 0; // Returns whether the update was success or not. Loading native/jni/src/suggest/core/session/prev_words_info.h +18 −20 Original line number Diff line number Diff line Loading @@ -92,11 +92,9 @@ class PrevWordsInfo { BinaryDictionaryBigramsIterator getBigramsIteratorForPrediction( const DictionaryStructureWithBufferPolicy *const dictStructurePolicy) const { const int bigramListPos = getBigramListPositionForWordWithTryingLowerCaseSearch( return getBigramsIteratorForWordWithTryingLowerCaseSearch( dictStructurePolicy, mPrevWordCodePoints[0], mPrevWordCodePointCount[0], mIsBeginningOfSentence[0]); return BinaryDictionaryBigramsIterator(dictStructurePolicy->getBigramsStructurePolicy(), bigramListPos); } // n is 1-indexed. Loading Loading @@ -156,12 +154,12 @@ class PrevWordsInfo { codePoints, codePointCount, true /* forceLowerCaseSearch */); } static int getBigramListPositionForWordWithTryingLowerCaseSearch( static BinaryDictionaryBigramsIterator getBigramsIteratorForWordWithTryingLowerCaseSearch( const DictionaryStructureWithBufferPolicy *const dictStructurePolicy, const int *const wordCodePoints, const int wordCodePointCount, const bool isBeginningOfSentence) { if (!dictStructurePolicy || !wordCodePoints || wordCodePointCount > MAX_WORD_LENGTH) { return NOT_A_DICT_POS; return BinaryDictionaryBigramsIterator(); } int codePoints[MAX_WORD_LENGTH]; int codePointCount = wordCodePointCount; Loading @@ -170,30 +168,30 @@ class PrevWordsInfo { codePointCount = CharUtils::attachBeginningOfSentenceMarker(codePoints, codePointCount, MAX_WORD_LENGTH); if (codePointCount <= 0) { return NOT_A_DICT_POS; return BinaryDictionaryBigramsIterator(); } } int pos = getBigramListPositionForWord(dictStructurePolicy, codePoints, codePointCount, false /* forceLowerCaseSearch */); // getBigramListPositionForWord returns NOT_A_DICT_POS if this word isn't in the // dictionary or has no bigrams if (NOT_A_DICT_POS == pos) { BinaryDictionaryBigramsIterator bigramsIt = getBigramsIteratorForWord(dictStructurePolicy, codePoints, codePointCount, false /* forceLowerCaseSearch */); // getBigramsIteratorForWord returns an empty iterator if this word isn't in the dictionary // or has no bigrams. if (bigramsIt.hasNext()) { return bigramsIt; } // If no bigrams for this exact word, search again in lower case. pos = getBigramListPositionForWord(dictStructurePolicy, codePoints, return getBigramsIteratorForWord(dictStructurePolicy, codePoints, codePointCount, true /* forceLowerCaseSearch */); } return pos; } static int getBigramListPositionForWord( static BinaryDictionaryBigramsIterator getBigramsIteratorForWord( const DictionaryStructureWithBufferPolicy *const dictStructurePolicy, const int *wordCodePoints, const int wordCodePointCount, const bool forceLowerCaseSearch) { if (!wordCodePoints || wordCodePointCount <= 0) return NOT_A_DICT_POS; if (!wordCodePoints || wordCodePointCount <= 0) return BinaryDictionaryBigramsIterator(); const int terminalPtNodePos = dictStructurePolicy->getTerminalPtNodePositionOfWord( wordCodePoints, wordCodePointCount, forceLowerCaseSearch); if (NOT_A_DICT_POS == terminalPtNodePos) return NOT_A_DICT_POS; return dictStructurePolicy->getBigramsPositionOfPtNode(terminalPtNodePos); if (NOT_A_DICT_POS == terminalPtNodePos) return BinaryDictionaryBigramsIterator(); return dictStructurePolicy->getBigramsIteratorOfPtNode(terminalPtNodePos); } void clear() { Loading native/jni/src/suggest/policyimpl/dictionary/structure/backward/v402/ver4_patricia_trie_policy.cpp +6 −0 Original line number Diff line number Diff line Loading @@ -154,6 +154,12 @@ int Ver4PatriciaTriePolicy::getShortcutPositionOfPtNode(const int ptNodePos) con ptNodeParams.getTerminalId()); } BinaryDictionaryBigramsIterator Ver4PatriciaTriePolicy::getBigramsIteratorOfPtNode( const int ptNodePos) const { const int bigramsPosition = getBigramsPositionOfPtNode(ptNodePos); return BinaryDictionaryBigramsIterator(&mBigramPolicy, bigramsPosition); } int Ver4PatriciaTriePolicy::getBigramsPositionOfPtNode(const int ptNodePos) const { if (ptNodePos == NOT_A_DICT_POS) { return NOT_A_DICT_POS; Loading Loading
native/jni/src/suggest/core/dictionary/binary_dictionary_bigrams_iterator.h +5 −0 Original line number Diff line number Diff line Loading @@ -24,6 +24,11 @@ namespace latinime { class BinaryDictionaryBigramsIterator { public: // Empty iterator. BinaryDictionaryBigramsIterator() : mBigramsStructurePolicy(nullptr), mPos(NOT_A_DICT_POS), mBigramPos(NOT_A_DICT_POS), mProbability(NOT_A_PROBABILITY), mHasNext(false) {} BinaryDictionaryBigramsIterator( const DictionaryBigramsStructurePolicy *const bigramsStructurePolicy, const int pos) : mBigramsStructurePolicy(bigramsStructurePolicy), mPos(pos), Loading
native/jni/src/suggest/core/dictionary/multi_bigram_map.cpp +4 −6 Original line number Diff line number Diff line Loading @@ -53,9 +53,8 @@ int MultiBigramMap::getBigramProbability( void MultiBigramMap::BigramMap::init( const DictionaryStructureWithBufferPolicy *const structurePolicy, const int nodePos) { const int bigramsListPos = structurePolicy->getBigramsPositionOfPtNode(nodePos); BinaryDictionaryBigramsIterator bigramsIt(structurePolicy->getBigramsStructurePolicy(), bigramsListPos); BinaryDictionaryBigramsIterator bigramsIt = structurePolicy->getBigramsIteratorOfPtNode(nodePos); while (bigramsIt.hasNext()) { bigramsIt.next(); if (bigramsIt.getBigramPos() == NOT_A_DICT_POS) { Loading Loading @@ -89,9 +88,8 @@ int MultiBigramMap::readBigramProbabilityFromBinaryDictionary( const DictionaryStructureWithBufferPolicy *const structurePolicy, const int nodePos, const int nextWordPosition, const int unigramProbability) { int bigramProbability = NOT_A_PROBABILITY; const int bigramsListPos = structurePolicy->getBigramsPositionOfPtNode(nodePos); BinaryDictionaryBigramsIterator bigramsIt(structurePolicy->getBigramsStructurePolicy(), bigramsListPos); BinaryDictionaryBigramsIterator bigramsIt = structurePolicy->getBigramsIteratorOfPtNode(nodePos); while (bigramsIt.hasNext()) { bigramsIt.next(); if (bigramsIt.getBigramPos() == nextWordPosition) { Loading
native/jni/src/suggest/core/policy/dictionary_structure_with_buffer_policy.h +2 −3 Original line number Diff line number Diff line Loading @@ -20,6 +20,7 @@ #include <memory> #include "defines.h" #include "suggest/core/dictionary/binary_dictionary_bigrams_iterator.h" #include "suggest/core/dictionary/property/word_property.h" namespace latinime { Loading Loading @@ -61,12 +62,10 @@ class DictionaryStructureWithBufferPolicy { virtual int getShortcutPositionOfPtNode(const int nodePos) const = 0; virtual int getBigramsPositionOfPtNode(const int nodePos) const = 0; virtual BinaryDictionaryBigramsIterator getBigramsIteratorOfPtNode(const int nodePos) const = 0; virtual const DictionaryHeaderStructurePolicy *getHeaderStructurePolicy() const = 0; virtual const DictionaryBigramsStructurePolicy *getBigramsStructurePolicy() const = 0; virtual const DictionaryShortcutsStructurePolicy *getShortcutsStructurePolicy() const = 0; // Returns whether the update was success or not. Loading
native/jni/src/suggest/core/session/prev_words_info.h +18 −20 Original line number Diff line number Diff line Loading @@ -92,11 +92,9 @@ class PrevWordsInfo { BinaryDictionaryBigramsIterator getBigramsIteratorForPrediction( const DictionaryStructureWithBufferPolicy *const dictStructurePolicy) const { const int bigramListPos = getBigramListPositionForWordWithTryingLowerCaseSearch( return getBigramsIteratorForWordWithTryingLowerCaseSearch( dictStructurePolicy, mPrevWordCodePoints[0], mPrevWordCodePointCount[0], mIsBeginningOfSentence[0]); return BinaryDictionaryBigramsIterator(dictStructurePolicy->getBigramsStructurePolicy(), bigramListPos); } // n is 1-indexed. Loading Loading @@ -156,12 +154,12 @@ class PrevWordsInfo { codePoints, codePointCount, true /* forceLowerCaseSearch */); } static int getBigramListPositionForWordWithTryingLowerCaseSearch( static BinaryDictionaryBigramsIterator getBigramsIteratorForWordWithTryingLowerCaseSearch( const DictionaryStructureWithBufferPolicy *const dictStructurePolicy, const int *const wordCodePoints, const int wordCodePointCount, const bool isBeginningOfSentence) { if (!dictStructurePolicy || !wordCodePoints || wordCodePointCount > MAX_WORD_LENGTH) { return NOT_A_DICT_POS; return BinaryDictionaryBigramsIterator(); } int codePoints[MAX_WORD_LENGTH]; int codePointCount = wordCodePointCount; Loading @@ -170,30 +168,30 @@ class PrevWordsInfo { codePointCount = CharUtils::attachBeginningOfSentenceMarker(codePoints, codePointCount, MAX_WORD_LENGTH); if (codePointCount <= 0) { return NOT_A_DICT_POS; return BinaryDictionaryBigramsIterator(); } } int pos = getBigramListPositionForWord(dictStructurePolicy, codePoints, codePointCount, false /* forceLowerCaseSearch */); // getBigramListPositionForWord returns NOT_A_DICT_POS if this word isn't in the // dictionary or has no bigrams if (NOT_A_DICT_POS == pos) { BinaryDictionaryBigramsIterator bigramsIt = getBigramsIteratorForWord(dictStructurePolicy, codePoints, codePointCount, false /* forceLowerCaseSearch */); // getBigramsIteratorForWord returns an empty iterator if this word isn't in the dictionary // or has no bigrams. if (bigramsIt.hasNext()) { return bigramsIt; } // If no bigrams for this exact word, search again in lower case. pos = getBigramListPositionForWord(dictStructurePolicy, codePoints, return getBigramsIteratorForWord(dictStructurePolicy, codePoints, codePointCount, true /* forceLowerCaseSearch */); } return pos; } static int getBigramListPositionForWord( static BinaryDictionaryBigramsIterator getBigramsIteratorForWord( const DictionaryStructureWithBufferPolicy *const dictStructurePolicy, const int *wordCodePoints, const int wordCodePointCount, const bool forceLowerCaseSearch) { if (!wordCodePoints || wordCodePointCount <= 0) return NOT_A_DICT_POS; if (!wordCodePoints || wordCodePointCount <= 0) return BinaryDictionaryBigramsIterator(); const int terminalPtNodePos = dictStructurePolicy->getTerminalPtNodePositionOfWord( wordCodePoints, wordCodePointCount, forceLowerCaseSearch); if (NOT_A_DICT_POS == terminalPtNodePos) return NOT_A_DICT_POS; return dictStructurePolicy->getBigramsPositionOfPtNode(terminalPtNodePos); if (NOT_A_DICT_POS == terminalPtNodePos) return BinaryDictionaryBigramsIterator(); return dictStructurePolicy->getBigramsIteratorOfPtNode(terminalPtNodePos); } void clear() { Loading
native/jni/src/suggest/policyimpl/dictionary/structure/backward/v402/ver4_patricia_trie_policy.cpp +6 −0 Original line number Diff line number Diff line Loading @@ -154,6 +154,12 @@ int Ver4PatriciaTriePolicy::getShortcutPositionOfPtNode(const int ptNodePos) con ptNodeParams.getTerminalId()); } BinaryDictionaryBigramsIterator Ver4PatriciaTriePolicy::getBigramsIteratorOfPtNode( const int ptNodePos) const { const int bigramsPosition = getBigramsPositionOfPtNode(ptNodePos); return BinaryDictionaryBigramsIterator(&mBigramPolicy, bigramsPosition); } int Ver4PatriciaTriePolicy::getBigramsPositionOfPtNode(const int ptNodePos) const { if (ptNodePos == NOT_A_DICT_POS) { return NOT_A_DICT_POS; Loading