aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSatoshi Kataoka <satok@google.com>2013-05-07 07:26:01 +0000
committerAndroid (Google) Code Review <android-gerrit@google.com>2013-05-07 07:26:01 +0000
commitd430c92deb2434040a6eede58601b5ab6a26f3fe (patch)
tree42ba86144e52dfce86baaac6b93749e0bf95cc0b
parentce67b4166188a1ce0a3a54420843b7e4192607e3 (diff)
parent5a346afab96186dc09aeed390b2cc70f8ec439d0 (diff)
downloadlatinime-d430c92deb2434040a6eede58601b5ab6a26f3fe.tar.gz
latinime-d430c92deb2434040a6eede58601b5ab6a26f3fe.tar.xz
latinime-d430c92deb2434040a6eede58601b5ab6a26f3fe.zip
Merge "Fix exact match profanity"
-rw-r--r--native/jni/src/suggest/core/suggest.cpp9
1 files changed, 7 insertions, 2 deletions
diff --git a/native/jni/src/suggest/core/suggest.cpp b/native/jni/src/suggest/core/suggest.cpp
index 3221dee9c..a18794850 100644
--- a/native/jni/src/suggest/core/suggest.cpp
+++ b/native/jni/src/suggest/core/suggest.cpp
@@ -163,9 +163,14 @@ int Suggest::outputSuggestions(DicTraverseSession *traverseSession, int *frequen
terminalDicNode->getFlags(), terminalDicNode->getAttributesPos());
const bool isPossiblyOffensiveWord = terminalDicNode->getProbability() <= 0;
const bool isExactMatch = terminalDicNode->isExactMatch();
+ const bool isFirstCharUppercase = terminalDicNode->isFirstCharUppercase();
+ // Heuristic: We exclude freq=0 first-char-uppercase words from exact match.
+ // (e.g. "AMD" and "and")
+ const bool isSafeExactMatch = isExactMatch
+ && !(isPossiblyOffensiveWord && isFirstCharUppercase);
const int outputTypeFlags =
- isPossiblyOffensiveWord ? Dictionary::KIND_FLAG_POSSIBLY_OFFENSIVE : 0
- | isExactMatch ? Dictionary::KIND_FLAG_EXACT_MATCH : 0;
+ (isPossiblyOffensiveWord ? Dictionary::KIND_FLAG_POSSIBLY_OFFENSIVE : 0)
+ | (isSafeExactMatch ? Dictionary::KIND_FLAG_EXACT_MATCH : 0);
// Entries that are blacklisted or do not represent a word should not be output.
const bool isValidWord = !terminalAttributes.isBlacklistedOrNotAWord();