aboutsummaryrefslogtreecommitdiffstats
path: root/native/src/correction.cpp
diff options
context:
space:
mode:
authorsatok <satok@google.com>2011-09-29 18:36:56 +0900
committersatok <satok@google.com>2011-09-29 19:48:18 +0900
commit40a5f6fa4df529bf21813d54fc20ffe5b3cbe436 (patch)
treecb3397a286cf3235a4c0a1d817b74929c9a43581 /native/src/correction.cpp
parent55072fefe601a08511df1b6387d918ca5831d2c7 (diff)
downloadlatinime-40a5f6fa4df529bf21813d54fc20ffe5b3cbe436.tar.gz
latinime-40a5f6fa4df529bf21813d54fc20ffe5b3cbe436.tar.xz
latinime-40a5f6fa4df529bf21813d54fc20ffe5b3cbe436.zip
Add a flag to demote completed suggestions
Bug: 5390063 Change-Id: I0ef4fbcc705539624269fd2f8c4e782679fc44b3
Diffstat (limited to 'native/src/correction.cpp')
-rw-r--r--native/src/correction.cpp14
1 files changed, 12 insertions, 2 deletions
diff --git a/native/src/correction.cpp b/native/src/correction.cpp
index d5bfed017..9a7e5f35d 100644
--- a/native/src/correction.cpp
+++ b/native/src/correction.cpp
@@ -62,7 +62,8 @@ void Correction::initCorrectionState(
}
void Correction::setCorrectionParams(const int skipPos, const int excessivePos,
- const int transposedPos, const int spaceProximityPos, const int missingSpacePos) {
+ const int transposedPos, const int spaceProximityPos, const int missingSpacePos,
+ const bool useFullEditDistance) {
// TODO: remove
mTransposedPos = transposedPos;
mExcessivePos = excessivePos;
@@ -74,6 +75,7 @@ void Correction::setCorrectionParams(const int skipPos, const int excessivePos,
mSpaceProximityPos = spaceProximityPos;
mMissingSpacePos = missingSpacePos;
+ mUseFullEditDistance = useFullEditDistance;
}
void Correction::checkState() {
@@ -439,7 +441,7 @@ inline static void multiplyIntCapped(const int multiplier, int *base) {
}
inline static int powerIntCapped(const int base, const int n) {
- if (n == 0) return 1;
+ if (n <= 0) return 1;
if (base == 2) {
return n < 31 ? 1 << n : S_INT_MAX;
} else {
@@ -529,6 +531,8 @@ int Correction::RankingAlgorithm::calculateFinalFreq(const int inputIndex, const
const int excessiveCount = correction->mExcessiveCount + correction->mTransposedCount % 2;
const int proximityMatchedCount = correction->mProximityCount;
const bool lastCharExceeded = correction->mLastCharExceeded;
+ const bool useFullEditDistance = correction->mUseFullEditDistance;
+ const int outputLength = outputIndex + 1;
if (skippedCount >= inputLength || inputLength == 0) {
return -1;
}
@@ -682,6 +686,12 @@ int Correction::RankingAlgorithm::calculateFinalFreq(const int inputIndex, const
multiplyIntCapped(fullWordMultiplier, &finalFreq);
}
+ if (useFullEditDistance && outputLength > inputLength + 1) {
+ const int diff = outputLength - inputLength - 1;
+ const int divider = diff < 31 ? 1 << diff : S_INT_MAX;
+ finalFreq = divider > finalFreq ? 1 : finalFreq / divider;
+ }
+
if (DEBUG_DICT_FULL) {
LOGI("calc: %d, %d", outputIndex, sameLength);
}