mirror of
https://gitlab.futo.org/keyboard/latinime.git
synced 2024-09-28 14:54:30 +01:00
am fb3fdf15
: Merge "Enhance the safety net in multiple word suggestions" into jb-dev
* commit 'fb3fdf15040cb67c311047dea0144fa5aa071185': Enhance the safety net in multiple word suggestions
This commit is contained in:
commit
02963c4032
@ -234,11 +234,12 @@ static inline void prof_out(void) {
|
|||||||
#define SUB_QUEUE_MAX_WORDS 1
|
#define SUB_QUEUE_MAX_WORDS 1
|
||||||
#define SUB_QUEUE_MAX_COUNT 10
|
#define SUB_QUEUE_MAX_COUNT 10
|
||||||
#define SUB_QUEUE_MIN_WORD_LENGTH 4
|
#define SUB_QUEUE_MIN_WORD_LENGTH 4
|
||||||
#define MULTIPLE_WORDS_SUGGESTION_MAX_WORDS 10
|
// TODO: Extend this limitation
|
||||||
|
#define MULTIPLE_WORDS_SUGGESTION_MAX_WORDS 5
|
||||||
// TODO: Remove this limitation
|
// TODO: Remove this limitation
|
||||||
#define MULTIPLE_WORDS_SUGGESTION_MAX_WORD_LENGTH 12
|
#define MULTIPLE_WORDS_SUGGESTION_MAX_WORD_LENGTH 12
|
||||||
// TODO: Remove this limitation
|
// TODO: Remove this limitation
|
||||||
#define MULTIPLE_WORDS_SUGGESTION_MAX_TOTAL_TRAVERSE_COUNT 110
|
#define MULTIPLE_WORDS_SUGGESTION_MAX_TOTAL_TRAVERSE_COUNT 45
|
||||||
#define MULTIPLE_WORDS_DEMOTION_RATE 80
|
#define MULTIPLE_WORDS_DEMOTION_RATE 80
|
||||||
#define MIN_INPUT_LENGTH_FOR_THREE_OR_MORE_WORDS_CORRECTION 6
|
#define MIN_INPUT_LENGTH_FOR_THREE_OR_MORE_WORDS_CORRECTION 6
|
||||||
|
|
||||||
|
@ -431,6 +431,48 @@ int UnigramDictionary::getSubStringSuggestion(
|
|||||||
const int inputWordStartPos, const int inputWordLength,
|
const int inputWordStartPos, const int inputWordLength,
|
||||||
const int outputWordStartPos, const bool isSpaceProximity, int *freqArray,
|
const int outputWordStartPos, const bool isSpaceProximity, int *freqArray,
|
||||||
int*wordLengthArray, unsigned short* outputWord, int *outputWordLength) {
|
int*wordLengthArray, unsigned short* outputWord, int *outputWordLength) {
|
||||||
|
if (inputWordLength > MULTIPLE_WORDS_SUGGESTION_MAX_WORD_LENGTH) {
|
||||||
|
return FLAG_MULTIPLE_SUGGEST_ABORT;
|
||||||
|
}
|
||||||
|
|
||||||
|
/////////////////////////////////////////////
|
||||||
|
// safety net for multiple word suggestion //
|
||||||
|
// TODO: Remove this safety net //
|
||||||
|
/////////////////////////////////////////////
|
||||||
|
int smallWordCount = 0;
|
||||||
|
int singleLetterWordCount = 0;
|
||||||
|
if (inputWordLength == 1) {
|
||||||
|
++singleLetterWordCount;
|
||||||
|
}
|
||||||
|
if (inputWordLength <= 2) {
|
||||||
|
// small word == single letter or 2-letter word
|
||||||
|
++smallWordCount;
|
||||||
|
}
|
||||||
|
for (int i = 0; i < currentWordIndex; ++i) {
|
||||||
|
const int length = wordLengthArray[i];
|
||||||
|
if (length == 1) {
|
||||||
|
++singleLetterWordCount;
|
||||||
|
// Safety net to avoid suggesting sequential single letter words
|
||||||
|
if (i < (currentWordIndex - 1)) {
|
||||||
|
if (wordLengthArray[i + 1] == 1) {
|
||||||
|
return FLAG_MULTIPLE_SUGGEST_ABORT;
|
||||||
|
}
|
||||||
|
} else if (inputWordLength == 1) {
|
||||||
|
return FLAG_MULTIPLE_SUGGEST_ABORT;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (length <= 2) {
|
||||||
|
++smallWordCount;
|
||||||
|
}
|
||||||
|
// Safety net to avoid suggesting multiple words with many (4 or more, for now) small words
|
||||||
|
if (singleLetterWordCount >= 3 || smallWordCount >= 4) {
|
||||||
|
return FLAG_MULTIPLE_SUGGEST_ABORT;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//////////////////////////////////////////////
|
||||||
|
// TODO: Remove the safety net above //
|
||||||
|
//////////////////////////////////////////////
|
||||||
|
|
||||||
unsigned short* tempOutputWord = 0;
|
unsigned short* tempOutputWord = 0;
|
||||||
int nextWordLength = 0;
|
int nextWordLength = 0;
|
||||||
// TODO: Optimize init suggestion
|
// TODO: Optimize init suggestion
|
||||||
@ -556,9 +598,6 @@ void UnigramDictionary::getMultiWordsSuggestionRec(ProximityInfo *proximityInfo,
|
|||||||
// Current word
|
// Current word
|
||||||
int inputWordStartPos = startInputPos;
|
int inputWordStartPos = startInputPos;
|
||||||
int inputWordLength = i - startInputPos;
|
int inputWordLength = i - startInputPos;
|
||||||
if (inputWordLength > MULTIPLE_WORDS_SUGGESTION_MAX_WORD_LENGTH) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
const int suggestionFlag = getSubStringSuggestion(proximityInfo, xcoordinates, ycoordinates,
|
const int suggestionFlag = getSubStringSuggestion(proximityInfo, xcoordinates, ycoordinates,
|
||||||
codes, useFullEditDistance, correction, queuePool, inputLength,
|
codes, useFullEditDistance, correction, queuePool, inputLength,
|
||||||
hasAutoCorrectionCandidate, startWordIndex, inputWordStartPos, inputWordLength,
|
hasAutoCorrectionCandidate, startWordIndex, inputWordStartPos, inputWordLength,
|
||||||
|
Loading…
Reference in New Issue
Block a user