aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--native/jni/src/suggest/core/dicnode/dic_node.h10
-rw-r--r--native/jni/src/suggest/core/dicnode/dic_node_utils.cpp2
-rw-r--r--native/jni/src/suggest/policyimpl/typing/typing_scoring.h8
3 files changed, 12 insertions, 8 deletions
diff --git a/native/jni/src/suggest/core/dicnode/dic_node.h b/native/jni/src/suggest/core/dicnode/dic_node.h
index 808d2a6cd..e22e999f2 100644
--- a/native/jni/src/suggest/core/dicnode/dic_node.h
+++ b/native/jni/src/suggest/core/dicnode/dic_node.h
@@ -213,14 +213,18 @@ class DicNode {
return mDicNodeState.mDicNodeStateOutput.getCodePointAt(getNodeCodePointCount());
}
- bool isImpossibleBigramWord() const {
+ // Check if the current word and the previous word can be considered as a valid multiple word
+ // suggestion.
+ bool isValidMultipleWordSuggestion() const {
if (isBlacklistedOrNotAWord()) {
- return true;
+ return false;
}
+ // Treat suggestion as invalid if the current and the previous word are single character
+ // words.
const int prevWordLen = mDicNodeState.mDicNodeStatePrevWord.getPrevWordLength()
- mDicNodeState.mDicNodeStatePrevWord.getPrevWordStart() - 1;
const int currentWordLen = getNodeCodePointCount();
- return (prevWordLen == 1 && currentWordLen == 1);
+ return (prevWordLen != 1 || currentWordLen != 1);
}
bool isFirstCharUppercase() const {
diff --git a/native/jni/src/suggest/core/dicnode/dic_node_utils.cpp b/native/jni/src/suggest/core/dicnode/dic_node_utils.cpp
index 8b6f45599..071344296 100644
--- a/native/jni/src/suggest/core/dicnode/dic_node_utils.cpp
+++ b/native/jni/src/suggest/core/dicnode/dic_node_utils.cpp
@@ -159,7 +159,7 @@ namespace latinime {
/* static */ float DicNodeUtils::getBigramNodeImprobability(
const BinaryDictionaryInfo *const binaryDictionaryInfo,
const DicNode *const node, MultiBigramMap *multiBigramMap) {
- if (node->isImpossibleBigramWord()) {
+ if (node->hasMultipleWords() && !node->isValidMultipleWordSuggestion()) {
return static_cast<float>(MAX_VALUE_FOR_WEIGHTING);
}
const int probability = getBigramNodeProbability(binaryDictionaryInfo, node, multiBigramMap);
diff --git a/native/jni/src/suggest/policyimpl/typing/typing_scoring.h b/native/jni/src/suggest/policyimpl/typing/typing_scoring.h
index 90e2133e7..56ffcc93e 100644
--- a/native/jni/src/suggest/policyimpl/typing/typing_scoring.h
+++ b/native/jni/src/suggest/policyimpl/typing/typing_scoring.h
@@ -55,10 +55,10 @@ class TypingScoring : public Scoring {
const int inputSize, const bool forceCommit) const {
const float maxDistance = ScoringParams::DISTANCE_WEIGHT_LANGUAGE
+ static_cast<float>(inputSize) * ScoringParams::TYPING_MAX_OUTPUT_SCORE_PER_INPUT;
- return static_cast<int>((ScoringParams::TYPING_BASE_OUTPUT_SCORE
- - (compoundDistance / maxDistance)
- + (forceCommit ? ScoringParams::AUTOCORRECT_OUTPUT_THRESHOLD : 0.0f))
- * SUGGEST_INTERFACE_OUTPUT_SCALE);
+ const float score = ScoringParams::TYPING_BASE_OUTPUT_SCORE
+ - compoundDistance / maxDistance
+ + (forceCommit ? ScoringParams::AUTOCORRECT_OUTPUT_THRESHOLD : 0.0f);
+ return static_cast<int>(score * SUGGEST_INTERFACE_OUTPUT_SCALE);
}
AK_FORCE_INLINE float getDoubleLetterDemotionDistanceCost(const int terminalIndex,