From 6bc5acaa793e0311fcfa4a0f12c49ced6d792729 Mon Sep 17 00:00:00 2001 From: Keisuke Kuroyanagi Date: Fri, 18 Oct 2013 19:53:57 +0900 Subject: [PATCH] Fix: Suggested words from user history are invalid. - Suggestions form user history can contain invalid words. - isValidWord always returns false. Bug: 11139426 Change-Id: I6075b275603332ddb00f4a9284afcaa82d824270 --- .../DecayingExpandableBinaryDictionaryBase.java | 9 --------- .../dictionary/dynamic_patricia_trie_policy.cpp | 11 +++++++++-- 2 files changed, 9 insertions(+), 11 deletions(-) diff --git a/java/src/com/android/inputmethod/latin/personalization/DecayingExpandableBinaryDictionaryBase.java b/java/src/com/android/inputmethod/latin/personalization/DecayingExpandableBinaryDictionaryBase.java index a1e36006b..1de15a333 100644 --- a/java/src/com/android/inputmethod/latin/personalization/DecayingExpandableBinaryDictionaryBase.java +++ b/java/src/com/android/inputmethod/latin/personalization/DecayingExpandableBinaryDictionaryBase.java @@ -113,15 +113,6 @@ public abstract class DecayingExpandableBinaryDictionaryBase extends ExpandableB return false; } - /** - * Return whether the passed charsequence is in the dictionary. - */ - @Override - public boolean isValidWord(final String word) { - // Words included only in the user history should be treated as not in dictionary words. - return false; - } - /** * Pair will be added to the decaying dictionary. * diff --git a/native/jni/src/suggest/policyimpl/dictionary/dynamic_patricia_trie_policy.cpp b/native/jni/src/suggest/policyimpl/dictionary/dynamic_patricia_trie_policy.cpp index a8ea69f3c..495b146c2 100644 --- a/native/jni/src/suggest/policyimpl/dictionary/dynamic_patricia_trie_policy.cpp +++ b/native/jni/src/suggest/policyimpl/dictionary/dynamic_patricia_trie_policy.cpp @@ -55,9 +55,16 @@ void DynamicPatriciaTriePolicy::createAndGetAllChildNodes(const DicNode *const d readingHelper.initWithPtNodeArrayPos(dicNode->getChildrenPos()); const DynamicPatriciaTrieNodeReader *const nodeReader = readingHelper.getNodeReader(); while (!readingHelper.isEnd()) { + bool isTerminal = nodeReader->isTerminal() && !nodeReader->isDeleted(); + if (isTerminal && mHeaderPolicy.isDecayingDict()) { + // A DecayingDict may have a terminal PtNode that has a terminal DicNode whose + // probability is NOT_A_PROBABILITY. In such case, we don't want to treat it as a + // valid terminal DicNode. + isTerminal = getProbability(nodeReader->getProbability(), NOT_A_PROBABILITY) + != NOT_A_PROBABILITY; + } childDicNodes->pushLeavingChild(dicNode, nodeReader->getHeadPos(), - nodeReader->getChildrenPos(), nodeReader->getProbability(), - nodeReader->isTerminal() && !nodeReader->isDeleted(), + nodeReader->getChildrenPos(), nodeReader->getProbability(), isTerminal, nodeReader->hasChildren(), nodeReader->isBlacklisted() || nodeReader->isNotAWord(), nodeReader->getCodePointCount(), readingHelper.getMergedNodeCodePoints()); readingHelper.readNextSiblingNode();