aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKeisuke Kuroynagi <ksk@google.com>2013-04-29 22:33:24 -0700
committerAndroid Git Automerger <android-git-automerger@android.com>2013-04-29 22:33:24 -0700
commit25a271bc01671ac7bb5000bfad65e2cb51e4ad4a (patch)
treef439d4d78fa1e3c3c3f2f7348f117b036ef28b8f
parent238748d57c8ba770be4c3e34fa6d704893de3d07 (diff)
parent254949d83bcb21674eb79217210714f1d7fc66f0 (diff)
downloadlatinime-25a271bc01671ac7bb5000bfad65e2cb51e4ad4a.tar.gz
latinime-25a271bc01671ac7bb5000bfad65e2cb51e4ad4a.tar.xz
latinime-25a271bc01671ac7bb5000bfad65e2cb51e4ad4a.zip
am 254949d8: Merge "Fix: Demote first char capitalized new words."
* commit '254949d83bcb21674eb79217210714f1d7fc66f0': Fix: Demote first char capitalized new words.
-rw-r--r--native/jni/src/suggest/core/dicnode/dic_node.h2
-rw-r--r--native/jni/src/suggest/policyimpl/typing/scoring_params.cpp2
-rw-r--r--native/jni/src/suggest/policyimpl/typing/scoring_params.h2
-rw-r--r--native/jni/src/suggest/policyimpl/typing/typing_weighting.h21
4 files changed, 16 insertions, 11 deletions
diff --git a/native/jni/src/suggest/core/dicnode/dic_node.h b/native/jni/src/suggest/core/dicnode/dic_node.h
index 92783dec7..4225bb3e5 100644
--- a/native/jni/src/suggest/core/dicnode/dic_node.h
+++ b/native/jni/src/suggest/core/dicnode/dic_node.h
@@ -219,7 +219,7 @@ class DicNode {
return (prevWordLen == 1 && currentWordLen == 1);
}
- bool isCapitalized() const {
+ bool isFirstCharUppercase() const {
const int c = getOutputWordBuf()[0];
return isAsciiUpper(c);
}
diff --git a/native/jni/src/suggest/policyimpl/typing/scoring_params.cpp b/native/jni/src/suggest/policyimpl/typing/scoring_params.cpp
index 299ca83ab..81dd52370 100644
--- a/native/jni/src/suggest/policyimpl/typing/scoring_params.cpp
+++ b/native/jni/src/suggest/policyimpl/typing/scoring_params.cpp
@@ -39,7 +39,7 @@ const float ScoringParams::SPACE_SUBSTITUTION_COST = 0.319f;
const float ScoringParams::ADDITIONAL_PROXIMITY_COST = 0.380f;
const float ScoringParams::SUBSTITUTION_COST = 0.403f;
const float ScoringParams::COST_NEW_WORD = 0.042f;
-const float ScoringParams::COST_NEW_WORD_CAPITALIZED = 0.174f;
+const float ScoringParams::COST_SECOND_OR_LATER_WORD_FIRST_CHAR_UPPERCASE = 0.25f;
const float ScoringParams::DISTANCE_WEIGHT_LANGUAGE = 1.123f;
const float ScoringParams::COST_FIRST_LOOKAHEAD = 0.545f;
const float ScoringParams::COST_LOOKAHEAD = 0.073f;
diff --git a/native/jni/src/suggest/policyimpl/typing/scoring_params.h b/native/jni/src/suggest/policyimpl/typing/scoring_params.h
index 8f104b362..035497bf4 100644
--- a/native/jni/src/suggest/policyimpl/typing/scoring_params.h
+++ b/native/jni/src/suggest/policyimpl/typing/scoring_params.h
@@ -48,7 +48,7 @@ class ScoringParams {
static const float ADDITIONAL_PROXIMITY_COST;
static const float SUBSTITUTION_COST;
static const float COST_NEW_WORD;
- static const float COST_NEW_WORD_CAPITALIZED;
+ static const float COST_SECOND_OR_LATER_WORD_FIRST_CHAR_UPPERCASE;
static const float DISTANCE_WEIGHT_LANGUAGE;
static const float COST_FIRST_LOOKAHEAD;
static const float COST_LOOKAHEAD;
diff --git a/native/jni/src/suggest/policyimpl/typing/typing_weighting.h b/native/jni/src/suggest/policyimpl/typing/typing_weighting.h
index e6fa1bdc4..3938c0ec5 100644
--- a/native/jni/src/suggest/policyimpl/typing/typing_weighting.h
+++ b/native/jni/src/suggest/policyimpl/typing/typing_weighting.h
@@ -80,8 +80,18 @@ class TypingWeighting : public Weighting {
const bool isFirstChar = pointIndex == 0;
const bool isProximity = isProximityDicNode(traverseSession, dicNode);
- const float cost = isProximity ? (isFirstChar ? ScoringParams::FIRST_PROXIMITY_COST
+ float cost = isProximity ? (isFirstChar ? ScoringParams::FIRST_PROXIMITY_COST
: ScoringParams::PROXIMITY_COST) : 0.0f;
+ if (dicNode->getDepth() == 2) {
+ // At the second character of the current word, we check if the first char is uppercase
+ // and the word is a second or later word of a multiple word suggestion. We demote it
+ // if so.
+ const bool isSecondOrLaterWordFirstCharUppercase =
+ dicNode->hasMultipleWords() && dicNode->isFirstCharUppercase();
+ if (isSecondOrLaterWordFirstCharUppercase) {
+ cost += ScoringParams::COST_SECOND_OR_LATER_WORD_FIRST_CHAR_UPPERCASE;
+ }
+ }
return weightedDistance + cost;
}
@@ -129,10 +139,7 @@ class TypingWeighting : public Weighting {
float getNewWordCost(const DicTraverseSession *const traverseSession,
const DicNode *const dicNode) const {
- const bool isCapitalized = dicNode->isCapitalized();
- const float cost = isCapitalized ?
- ScoringParams::COST_NEW_WORD_CAPITALIZED : ScoringParams::COST_NEW_WORD;
- return cost * traverseSession->getMultiWordCostMultiplier();
+ return ScoringParams::COST_NEW_WORD * traverseSession->getMultiWordCostMultiplier();
}
float getNewWordBigramCost(const DicTraverseSession *const traverseSession,
@@ -174,9 +181,7 @@ class TypingWeighting : public Weighting {
AK_FORCE_INLINE float getSpaceSubstitutionCost(const DicTraverseSession *const traverseSession,
const DicNode *const dicNode) const {
- const bool isCapitalized = dicNode->isCapitalized();
- const float cost = ScoringParams::SPACE_SUBSTITUTION_COST + (isCapitalized ?
- ScoringParams::COST_NEW_WORD_CAPITALIZED : ScoringParams::COST_NEW_WORD);
+ const float cost = ScoringParams::SPACE_SUBSTITUTION_COST + ScoringParams::COST_NEW_WORD;
return cost * traverseSession->getMultiWordCostMultiplier();
}