mirror of
https://gitlab.futo.org/keyboard/latinime.git
synced 2024-09-28 14:54:30 +01:00
Make emoji suggestions less aggressive
This commit is contained in:
parent
cd8499f742
commit
65686b39a0
@ -70,6 +70,40 @@ private fun SuggestedWordInfo.add(other: SuggestedWordInfo): SuggestedWordInfo {
|
|||||||
return result
|
return result
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun levenshteinDistance(s1: String, s2: String): Int {
|
||||||
|
val len1 = s1.length
|
||||||
|
val len2 = s2.length
|
||||||
|
|
||||||
|
val dist = Array(len1 + 1) { IntArray(len2 + 1) }
|
||||||
|
|
||||||
|
for (i in 0..len1) {
|
||||||
|
dist[i][0] = i
|
||||||
|
}
|
||||||
|
for (j in 0..len2) {
|
||||||
|
dist[0][j] = j
|
||||||
|
}
|
||||||
|
|
||||||
|
for (j in 1..len2) {
|
||||||
|
for (i in 1..len1) {
|
||||||
|
val cost = if (s1[i - 1] == s2[j - 1]) 0 else 1
|
||||||
|
dist[i][j] = minOf(
|
||||||
|
dist[i - 1][j] + 1,
|
||||||
|
dist[i][j - 1] + 1,
|
||||||
|
dist[i - 1][j - 1] + cost
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return dist[len1][len2]
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun areWordsRoughlyEqual(word1: String, word2: String, threshold: Int): Boolean {
|
||||||
|
val distance = levenshteinDistance(word1, word2)
|
||||||
|
return distance <= threshold
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
public class LanguageModelFacilitator(
|
public class LanguageModelFacilitator(
|
||||||
val context: Context,
|
val context: Context,
|
||||||
val inputLogic: InputLogic,
|
val inputLogic: InputLogic,
|
||||||
@ -239,10 +273,12 @@ public class LanguageModelFacilitator(
|
|||||||
|
|
||||||
val bothAlgorithmsCameToSameConclusion = maxWordDict?.mWord == maxWord?.mWord
|
val bothAlgorithmsCameToSameConclusion = maxWordDict?.mWord == maxWord?.mWord
|
||||||
|
|
||||||
|
var autocorrectWord: SuggestedWordInfo? = null
|
||||||
val filtered = mutableListOf<SuggestedWordInfo>()
|
val filtered = mutableListOf<SuggestedWordInfo>()
|
||||||
if(bothAlgorithmsCameToSameConclusion && maxWord != null && maxWordDict != null){
|
if(bothAlgorithmsCameToSameConclusion && maxWord != null && maxWordDict != null){
|
||||||
// We can be pretty confident about autocorrecting this
|
// We can be pretty confident about autocorrecting this
|
||||||
val clone = maxWord.add(maxWordDict)
|
val clone = maxWord.add(maxWordDict)
|
||||||
|
autocorrectWord = clone
|
||||||
suggestionResults.add(clone)
|
suggestionResults.add(clone)
|
||||||
filtered.add(maxWordDict)
|
filtered.add(maxWordDict)
|
||||||
filtered.add(maxWord)
|
filtered.add(maxWord)
|
||||||
@ -271,8 +307,11 @@ public class LanguageModelFacilitator(
|
|||||||
|
|
||||||
if(values.composedData.mTypedWord.isNotEmpty() && shouldSuggestEmojis) {
|
if(values.composedData.mTypedWord.isNotEmpty() && shouldSuggestEmojis) {
|
||||||
(getEmojiCandidate(values.composedData.mTypedWord)
|
(getEmojiCandidate(values.composedData.mTypedWord)
|
||||||
?: maxWord?.let { getEmojiCandidate(it.mWord) }
|
?: autocorrectWord?.let {
|
||||||
?: maxWordDict?.let { getEmojiCandidate(it.mWord) })?.let {
|
if(areWordsRoughlyEqual(autocorrectWord.mWord, values.composedData.mTypedWord, 2))
|
||||||
|
getEmojiCandidate(it.mWord)
|
||||||
|
else null
|
||||||
|
})?.let {
|
||||||
suggestionResults.add(it)
|
suggestionResults.add(it)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user