Loading native/jni/src/suggest/core/dicnode/dic_node_utils.cpp +2 −16 Original line number Diff line number Diff line Loading @@ -18,7 +18,6 @@ #include "suggest/core/dicnode/dic_node.h" #include "suggest/core/dicnode/dic_node_vector.h" #include "suggest/core/dictionary/multi_bigram_map.h" #include "suggest/core/policy/dictionary_structure_with_buffer_policy.h" namespace latinime { Loading Loading @@ -73,25 +72,12 @@ namespace latinime { if (dicNode->hasMultipleWords() && !dicNode->isValidMultipleWordSuggestion()) { return static_cast<float>(MAX_VALUE_FOR_WEIGHTING); } const int probability = getBigramNodeProbability(dictionaryStructurePolicy, dicNode, multiBigramMap); const int probability = dictionaryStructurePolicy->getProbabilityOfWordInContext( dicNode->getPrevWordIds(), dicNode->getWordId(), multiBigramMap); // TODO: This equation to calculate the improbability looks unreasonable. Investigate this. const float cost = static_cast<float>(MAX_PROBABILITY - probability) / static_cast<float>(MAX_PROBABILITY); return cost; } /* static */ int DicNodeUtils::getBigramNodeProbability( const DictionaryStructureWithBufferPolicy *const dictionaryStructurePolicy, const DicNode *const dicNode, MultiBigramMap *const multiBigramMap) { const int unigramProbability = dicNode->getUnigramProbability(); if (multiBigramMap) { const int *const prevWordIds = dicNode->getPrevWordIds(); return multiBigramMap->getBigramProbability(dictionaryStructurePolicy, prevWordIds, dicNode->getWordId(), unigramProbability); } return dictionaryStructurePolicy->getProbability(unigramProbability, NOT_A_PROBABILITY); } } // namespace latinime native/jni/src/suggest/core/dicnode/dic_node_utils.h +0 −4 Original line number Diff line number Diff line Loading @@ -46,10 +46,6 @@ class DicNodeUtils { DISALLOW_IMPLICIT_CONSTRUCTORS(DicNodeUtils); // Max number of bigrams to look up static const int MAX_BIGRAMS_CONSIDERED_PER_CONTEXT = 500; static int getBigramNodeProbability( const DictionaryStructureWithBufferPolicy *const dictionaryStructurePolicy, const DicNode *const dicNode, MultiBigramMap *const multiBigramMap); }; } // namespace latinime #endif // LATINIME_DIC_NODE_UTILS_H native/jni/src/suggest/core/policy/dictionary_structure_with_buffer_policy.h +5 −0 Original line number Diff line number Diff line Loading @@ -29,6 +29,7 @@ namespace latinime { class DicNode; class DicNodeVector; class DictionaryHeaderStructurePolicy; class MultiBigramMap; class NgramListener; class PrevWordsInfo; class UnigramProperty; Loading Loading @@ -56,6 +57,10 @@ class DictionaryStructureWithBufferPolicy { virtual int getWordId(const CodePointArrayView wordCodePoints, const bool forceLowerCaseSearch) const = 0; virtual int getProbabilityOfWordInContext(const int *const prevWordIds, const int wordId, MultiBigramMap *const multiBigramMap) const = 0; // TODO: Remove virtual int getProbability(const int unigramProbability, const int bigramProbability) const = 0; virtual int getProbabilityOfWord(const int *const prevWordIds, const int wordId) const = 0; Loading native/jni/src/suggest/policyimpl/dictionary/structure/backward/v402/ver4_patricia_trie_policy.cpp +21 −0 Original line number Diff line number Diff line Loading @@ -28,6 +28,7 @@ #include "suggest/core/dicnode/dic_node.h" #include "suggest/core/dicnode/dic_node_vector.h" #include "suggest/core/dictionary/multi_bigram_map.h" #include "suggest/core/dictionary/ngram_listener.h" #include "suggest/core/dictionary/property/bigram_property.h" #include "suggest/core/dictionary/property/unigram_property.h" Loading Loading @@ -117,6 +118,26 @@ int Ver4PatriciaTriePolicy::getWordId(const CodePointArrayView wordCodePoints, return getWordIdFromTerminalPtNodePos(ptNodePos); } int Ver4PatriciaTriePolicy::getProbabilityOfWordInContext(const int *const prevWordIds, const int wordId, MultiBigramMap *const multiBigramMap) const { if (wordId == NOT_A_WORD_ID) { return NOT_A_PROBABILITY; } const int ptNodePos = getTerminalPtNodePosFromWordId(wordId); const PtNodeParams ptNodeParams(mNodeReader.fetchPtNodeParamsInBufferFromPtNodePos(ptNodePos)); if (multiBigramMap) { return multiBigramMap->getBigramProbability(this /* structurePolicy */, prevWordIds, wordId, ptNodeParams.getProbability()); } if (prevWordIds) { const int probability = getProbabilityOfWord(prevWordIds, wordId); if (probability != NOT_A_PROBABILITY) { return probability; } } return getProbability(ptNodeParams.getProbability(), NOT_A_PROBABILITY); } int Ver4PatriciaTriePolicy::getProbability(const int unigramProbability, const int bigramProbability) const { if (mHeaderPolicy->isDecayingDict()) { Loading native/jni/src/suggest/policyimpl/dictionary/structure/backward/v402/ver4_patricia_trie_policy.h +3 −0 Original line number Diff line number Diff line Loading @@ -91,6 +91,9 @@ class Ver4PatriciaTriePolicy : public DictionaryStructureWithBufferPolicy { int getWordId(const CodePointArrayView wordCodePoints, const bool forceLowerCaseSearch) const; int getProbabilityOfWordInContext(const int *const prevWordIds, const int wordId, MultiBigramMap *const multiBigramMap) const; int getProbability(const int unigramProbability, const int bigramProbability) const; int getProbabilityOfWord(const int *const prevWordIds, const int wordId) const; Loading Loading
native/jni/src/suggest/core/dicnode/dic_node_utils.cpp +2 −16 Original line number Diff line number Diff line Loading @@ -18,7 +18,6 @@ #include "suggest/core/dicnode/dic_node.h" #include "suggest/core/dicnode/dic_node_vector.h" #include "suggest/core/dictionary/multi_bigram_map.h" #include "suggest/core/policy/dictionary_structure_with_buffer_policy.h" namespace latinime { Loading Loading @@ -73,25 +72,12 @@ namespace latinime { if (dicNode->hasMultipleWords() && !dicNode->isValidMultipleWordSuggestion()) { return static_cast<float>(MAX_VALUE_FOR_WEIGHTING); } const int probability = getBigramNodeProbability(dictionaryStructurePolicy, dicNode, multiBigramMap); const int probability = dictionaryStructurePolicy->getProbabilityOfWordInContext( dicNode->getPrevWordIds(), dicNode->getWordId(), multiBigramMap); // TODO: This equation to calculate the improbability looks unreasonable. Investigate this. const float cost = static_cast<float>(MAX_PROBABILITY - probability) / static_cast<float>(MAX_PROBABILITY); return cost; } /* static */ int DicNodeUtils::getBigramNodeProbability( const DictionaryStructureWithBufferPolicy *const dictionaryStructurePolicy, const DicNode *const dicNode, MultiBigramMap *const multiBigramMap) { const int unigramProbability = dicNode->getUnigramProbability(); if (multiBigramMap) { const int *const prevWordIds = dicNode->getPrevWordIds(); return multiBigramMap->getBigramProbability(dictionaryStructurePolicy, prevWordIds, dicNode->getWordId(), unigramProbability); } return dictionaryStructurePolicy->getProbability(unigramProbability, NOT_A_PROBABILITY); } } // namespace latinime
native/jni/src/suggest/core/dicnode/dic_node_utils.h +0 −4 Original line number Diff line number Diff line Loading @@ -46,10 +46,6 @@ class DicNodeUtils { DISALLOW_IMPLICIT_CONSTRUCTORS(DicNodeUtils); // Max number of bigrams to look up static const int MAX_BIGRAMS_CONSIDERED_PER_CONTEXT = 500; static int getBigramNodeProbability( const DictionaryStructureWithBufferPolicy *const dictionaryStructurePolicy, const DicNode *const dicNode, MultiBigramMap *const multiBigramMap); }; } // namespace latinime #endif // LATINIME_DIC_NODE_UTILS_H
native/jni/src/suggest/core/policy/dictionary_structure_with_buffer_policy.h +5 −0 Original line number Diff line number Diff line Loading @@ -29,6 +29,7 @@ namespace latinime { class DicNode; class DicNodeVector; class DictionaryHeaderStructurePolicy; class MultiBigramMap; class NgramListener; class PrevWordsInfo; class UnigramProperty; Loading Loading @@ -56,6 +57,10 @@ class DictionaryStructureWithBufferPolicy { virtual int getWordId(const CodePointArrayView wordCodePoints, const bool forceLowerCaseSearch) const = 0; virtual int getProbabilityOfWordInContext(const int *const prevWordIds, const int wordId, MultiBigramMap *const multiBigramMap) const = 0; // TODO: Remove virtual int getProbability(const int unigramProbability, const int bigramProbability) const = 0; virtual int getProbabilityOfWord(const int *const prevWordIds, const int wordId) const = 0; Loading
native/jni/src/suggest/policyimpl/dictionary/structure/backward/v402/ver4_patricia_trie_policy.cpp +21 −0 Original line number Diff line number Diff line Loading @@ -28,6 +28,7 @@ #include "suggest/core/dicnode/dic_node.h" #include "suggest/core/dicnode/dic_node_vector.h" #include "suggest/core/dictionary/multi_bigram_map.h" #include "suggest/core/dictionary/ngram_listener.h" #include "suggest/core/dictionary/property/bigram_property.h" #include "suggest/core/dictionary/property/unigram_property.h" Loading Loading @@ -117,6 +118,26 @@ int Ver4PatriciaTriePolicy::getWordId(const CodePointArrayView wordCodePoints, return getWordIdFromTerminalPtNodePos(ptNodePos); } int Ver4PatriciaTriePolicy::getProbabilityOfWordInContext(const int *const prevWordIds, const int wordId, MultiBigramMap *const multiBigramMap) const { if (wordId == NOT_A_WORD_ID) { return NOT_A_PROBABILITY; } const int ptNodePos = getTerminalPtNodePosFromWordId(wordId); const PtNodeParams ptNodeParams(mNodeReader.fetchPtNodeParamsInBufferFromPtNodePos(ptNodePos)); if (multiBigramMap) { return multiBigramMap->getBigramProbability(this /* structurePolicy */, prevWordIds, wordId, ptNodeParams.getProbability()); } if (prevWordIds) { const int probability = getProbabilityOfWord(prevWordIds, wordId); if (probability != NOT_A_PROBABILITY) { return probability; } } return getProbability(ptNodeParams.getProbability(), NOT_A_PROBABILITY); } int Ver4PatriciaTriePolicy::getProbability(const int unigramProbability, const int bigramProbability) const { if (mHeaderPolicy->isDecayingDict()) { Loading
native/jni/src/suggest/policyimpl/dictionary/structure/backward/v402/ver4_patricia_trie_policy.h +3 −0 Original line number Diff line number Diff line Loading @@ -91,6 +91,9 @@ class Ver4PatriciaTriePolicy : public DictionaryStructureWithBufferPolicy { int getWordId(const CodePointArrayView wordCodePoints, const bool forceLowerCaseSearch) const; int getProbabilityOfWordInContext(const int *const prevWordIds, const int wordId, MultiBigramMap *const multiBigramMap) const; int getProbability(const int unigramProbability, const int bigramProbability) const; int getProbabilityOfWord(const int *const prevWordIds, const int wordId) const; Loading