Separate the logic for touch caribration again

Change-Id: I59c6244674caa899af559402290160ad411d1bb5
main
satok 2012-02-02 18:58:12 +09:00
parent 8261a4cad7
commit 04fd04d6ff
1 changed files with 54 additions and 34 deletions

View File

@ -745,13 +745,13 @@ int Correction::RankingAlgorithm::calculateFinalFreq(const int inputIndex, const
// Score calibration by touch coordinates is being done only for pure-fat finger typing error
// cases.
// TODO: Remove this constraint.
if (performTouchPositionCorrection) {
for (int i = 0; i < outputLength; ++i) {
const int squaredDistance = correction->mDistances[i];
if (i < adjustedProximityMatchedCount) {
multiplyIntCapped(typedLetterMultiplier, &finalFreq);
}
if (performTouchPositionCorrection && squaredDistance >= 0) {
if (squaredDistance >= 0) {
// Promote or demote the score according to the distance from the sweet spot
static const float A = ZERO_DISTANCE_PROMOTION_RATE / 100.0f;
static const float B = 1.0f;
@ -773,15 +773,35 @@ int Correction::RankingAlgorithm::calculateFinalFreq(const int inputIndex, const
// .
// 0 R1 R2 .
multiplyRate((int)(factor * 100), &finalFreq);
} else if (performTouchPositionCorrection
&& squaredDistance == PROXIMITY_CHAR_WITHOUT_DISTANCE_INFO) {
} else if (squaredDistance == PROXIMITY_CHAR_WITHOUT_DISTANCE_INFO) {
multiplyRate(WORDS_WITH_PROXIMITY_CHARACTER_DEMOTION_RATE, &finalFreq);
} else if (squaredDistance == ADDITIONAL_PROXIMITY_CHAR_DISTANCE_INFO) {
multiplyRate(WORDS_WITH_ADDITIONAL_PROXIMITY_CHARACTER_DEMOTION_RATE, &finalFreq);
} else if (i < adjustedProximityMatchedCount) {
}
}
} else {
// Demote additional proximity characters
int additionalProximityCount = 0;
for (int i = 0; i < outputLength; ++i) {
const int squaredDistance = correction->mDistances[i];
if (squaredDistance == ADDITIONAL_PROXIMITY_CHAR_DISTANCE_INFO) {
++additionalProximityCount;
}
}
// Promotion for a word with proximity characters
for (int i = 0; i < adjustedProximityMatchedCount; ++i) {
// A word with proximity corrections
if (DEBUG_DICT_FULL) {
AKLOGI("Found a proximity correction.");
}
multiplyIntCapped(typedLetterMultiplier, &finalFreq);
if (i < additionalProximityCount) {
multiplyRate(WORDS_WITH_ADDITIONAL_PROXIMITY_CHARACTER_DEMOTION_RATE, &finalFreq);
} else {
multiplyRate(WORDS_WITH_PROXIMITY_CHARACTER_DEMOTION_RATE, &finalFreq);
}
}
}
const int errorCount = adjustedProximityMatchedCount > 0
? adjustedProximityMatchedCount