Quit using dicNode.getUnigramProbability().

Bug: 14425059
Change-Id: I192070cc11e5d46c8413ebc19982d6a8c93577fc
This commit is contained in:
Keisuke Kuroyanagi 2014-09-10 18:01:39 +09:00
parent 521e2382da
commit c32356c229
4 changed files with 16 additions and 8 deletions

View file

@ -54,15 +54,18 @@ namespace latinime {
current.swap(next); current.swap(next);
} }
int maxUnigramProbability = NOT_A_PROBABILITY; int maxProbability = NOT_A_PROBABILITY;
for (const DicNode &dicNode : current) { for (const DicNode &dicNode : current) {
if (!dicNode.isTerminalDicNode()) { if (!dicNode.isTerminalDicNode()) {
continue; continue;
} }
const WordAttributes wordAttributes =
dictionaryStructurePolicy->getWordAttributesInContext(dicNode.getPrevWordIds(),
dicNode.getWordId(), nullptr /* multiBigramMap */);
// dicNode can contain case errors, accent errors, intentional omissions or digraphs. // dicNode can contain case errors, accent errors, intentional omissions or digraphs.
maxUnigramProbability = std::max(maxUnigramProbability, dicNode.getUnigramProbability()); maxProbability = std::max(maxProbability, wordAttributes.getProbability());
} }
return maxUnigramProbability; return maxProbability;
} }
/* static */ void DictionaryUtils::processChildDicNodes( /* static */ void DictionaryUtils::processChildDicNodes(

View file

@ -48,7 +48,8 @@ class Traversal {
virtual int getTerminalCacheSize() const = 0; virtual int getTerminalCacheSize() const = 0;
virtual bool isPossibleOmissionChildNode(const DicTraverseSession *const traverseSession, virtual bool isPossibleOmissionChildNode(const DicTraverseSession *const traverseSession,
const DicNode *const parentDicNode, const DicNode *const dicNode) const = 0; const DicNode *const parentDicNode, const DicNode *const dicNode) const = 0;
virtual bool isGoodToTraverseNextWord(const DicNode *const dicNode) const = 0; virtual bool isGoodToTraverseNextWord(const DicNode *const dicNode,
const int probability) const = 0;
protected: protected:
Traversal() {} Traversal() {}

View file

@ -21,6 +21,7 @@
#include "suggest/core/dicnode/dic_node_vector.h" #include "suggest/core/dicnode/dic_node_vector.h"
#include "suggest/core/dictionary/dictionary.h" #include "suggest/core/dictionary/dictionary.h"
#include "suggest/core/dictionary/digraph_utils.h" #include "suggest/core/dictionary/digraph_utils.h"
#include "suggest/core/dictionary/word_attributes.h"
#include "suggest/core/layout/proximity_info.h" #include "suggest/core/layout/proximity_info.h"
#include "suggest/core/policy/dictionary_structure_with_buffer_policy.h" #include "suggest/core/policy/dictionary_structure_with_buffer_policy.h"
#include "suggest/core/policy/traversal.h" #include "suggest/core/policy/traversal.h"
@ -412,7 +413,11 @@ void Suggest::weightChildNode(DicTraverseSession *traverseSession, DicNode *dicN
*/ */
void Suggest::createNextWordDicNode(DicTraverseSession *traverseSession, DicNode *dicNode, void Suggest::createNextWordDicNode(DicTraverseSession *traverseSession, DicNode *dicNode,
const bool spaceSubstitution) const { const bool spaceSubstitution) const {
if (!TRAVERSAL->isGoodToTraverseNextWord(dicNode)) { const WordAttributes wordAttributes =
traverseSession->getDictionaryStructurePolicy()->getWordAttributesInContext(
dicNode->getPrevWordIds(), dicNode->getWordId(),
traverseSession->getMultiBigramMap());
if (!TRAVERSAL->isGoodToTraverseNextWord(dicNode, wordAttributes.getProbability())) {
return; return;
} }

View file

@ -161,9 +161,8 @@ class TypingTraversal : public Traversal {
return true; return true;
} }
AK_FORCE_INLINE bool isGoodToTraverseNextWord(const DicNode *const dicNode) const { AK_FORCE_INLINE bool isGoodToTraverseNextWord(const DicNode *const dicNode,
// TODO: Quit using unigram probability and use probability in the context. const int probability) const {
const int probability = dicNode->getUnigramProbability();
if (probability < ScoringParams::THRESHOLD_NEXT_WORD_PROBABILITY) { if (probability < ScoringParams::THRESHOLD_NEXT_WORD_PROBABILITY) {
return false; return false;
} }