Loading java/src/com/android/inputmethod/latin/NgramContext.java +8 −2 Original line number Diff line number Diff line Loading @@ -169,8 +169,14 @@ public class NgramContext { @Override public int hashCode() { // Just for having equals(). return mPrevWordsInfo[0].hashCode(); int hashValue = 0; for (final WordInfo wordInfo : mPrevWordsInfo) { if (wordInfo == null || !WordInfo.EMPTY_WORD_INFO.equals(wordInfo)) { break; } hashValue ^= wordInfo.hashCode(); } return hashValue; } @Override Loading java/src/com/android/inputmethod/latin/makedict/NgramProperty.java 0 → 100644 +26 −0 Original line number Diff line number Diff line package com.android.inputmethod.latin.makedict; import com.android.inputmethod.latin.NgramContext; public class NgramProperty { public final WeightedString mTargetWord; public final NgramContext mNgramContext; public NgramProperty(final WeightedString targetWord, final NgramContext ngramContext) { mTargetWord = targetWord; mNgramContext = ngramContext; } @Override public int hashCode() { return mTargetWord.hashCode() ^ mNgramContext.hashCode(); } @Override public boolean equals(Object o) { if (o == this) return true; if (!(o instanceof NgramProperty)) return false; final NgramProperty n = (NgramProperty)o; return mTargetWord.equals(n.mTargetWord) && mNgramContext.equals(n.mNgramContext); } } java/src/com/android/inputmethod/latin/makedict/WordProperty.java +41 −16 Original line number Diff line number Diff line Loading @@ -18,6 +18,8 @@ package com.android.inputmethod.latin.makedict; import com.android.inputmethod.annotations.UsedForTesting; import com.android.inputmethod.latin.BinaryDictionary; import com.android.inputmethod.latin.NgramContext; import com.android.inputmethod.latin.NgramContext.WordInfo; import com.android.inputmethod.latin.utils.CombinedFormatUtils; import com.android.inputmethod.latin.utils.StringUtils; Loading @@ -33,16 +35,17 @@ public final class WordProperty implements Comparable<WordProperty> { public final String mWord; public final ProbabilityInfo mProbabilityInfo; public final ArrayList<WeightedString> mShortcutTargets; public final ArrayList<WeightedString> mBigrams; public final ArrayList<NgramProperty> mNgrams; // TODO: Support mIsBeginningOfSentence. public final boolean mIsBeginningOfSentence; public final boolean mIsNotAWord; public final boolean mIsBlacklistEntry; public final boolean mHasShortcuts; public final boolean mHasBigrams; public final boolean mHasNgrams; private int mHashCode = 0; // TODO: Support n-gram. @UsedForTesting public WordProperty(final String word, final ProbabilityInfo probabilityInfo, final ArrayList<WeightedString> shortcutTargets, Loading @@ -51,11 +54,17 @@ public final class WordProperty implements Comparable<WordProperty> { mWord = word; mProbabilityInfo = probabilityInfo; mShortcutTargets = shortcutTargets; mBigrams = bigrams; mNgrams = new ArrayList<>(); final NgramContext ngramContext = new NgramContext(new WordInfo(mWord)); if (bigrams != null) { for (final WeightedString bigramTarget : bigrams) { mNgrams.add(new NgramProperty(bigramTarget, ngramContext)); } } mIsBeginningOfSentence = false; mIsNotAWord = isNotAWord; mIsBlacklistEntry = isBlacklistEntry; mHasBigrams = bigrams != null && !bigrams.isEmpty(); mHasNgrams = bigrams != null && !bigrams.isEmpty(); mHasShortcuts = shortcutTargets != null && !shortcutTargets.isEmpty(); } Loading @@ -78,19 +87,24 @@ public final class WordProperty implements Comparable<WordProperty> { mWord = StringUtils.getStringFromNullTerminatedCodePointArray(codePoints); mProbabilityInfo = createProbabilityInfoFromArray(probabilityInfo); mShortcutTargets = new ArrayList<>(); mBigrams = new ArrayList<>(); mNgrams = new ArrayList<>(); mIsBeginningOfSentence = isBeginningOfSentence; mIsNotAWord = isNotAWord; mIsBlacklistEntry = isBlacklisted; mHasShortcuts = hasShortcuts; mHasBigrams = hasBigram; final int bigramTargetCount = bigramTargets.size(); for (int i = 0; i < bigramTargetCount; i++) { final String bigramTargetString = mHasNgrams = hasBigram; final int relatedNgramCount = bigramTargets.size(); final WordInfo currentWordInfo = mIsBeginningOfSentence ? WordInfo.BEGINNING_OF_SENTENCE : new WordInfo(mWord); final NgramContext ngramContext = new NgramContext(currentWordInfo); for (int i = 0; i < relatedNgramCount; i++) { final String ngramTargetString = StringUtils.getStringFromNullTerminatedCodePointArray(bigramTargets.get(i)); mBigrams.add(new WeightedString(bigramTargetString, createProbabilityInfoFromArray(bigramProbabilityInfo.get(i)))); final WeightedString ngramTarget = new WeightedString(ngramTargetString, createProbabilityInfoFromArray(bigramProbabilityInfo.get(i))); // TODO: Support n-gram. mNgrams.add(new NgramProperty(ngramTarget, ngramContext)); } final int shortcutTargetCount = shortcutTargets.size(); Loading @@ -102,6 +116,17 @@ public final class WordProperty implements Comparable<WordProperty> { } } // TODO: Remove public ArrayList<WeightedString> getBigrams() { final ArrayList<WeightedString> bigrams = new ArrayList<>(); for (final NgramProperty ngram : mNgrams) { if (ngram.mNgramContext.getPrevWordCount() == 1) { bigrams.add(ngram.mTargetWord); } } return bigrams; } public int getProbability() { return mProbabilityInfo.mProbability; } Loading @@ -110,8 +135,8 @@ public final class WordProperty implements Comparable<WordProperty> { return Arrays.hashCode(new Object[] { word.mWord, word.mProbabilityInfo, word.mShortcutTargets.hashCode(), word.mBigrams.hashCode(), word.mShortcutTargets, word.mNgrams, word.mIsNotAWord, word.mIsBlacklistEntry }); Loading Loading @@ -142,9 +167,9 @@ public final class WordProperty implements Comparable<WordProperty> { if (!(o instanceof WordProperty)) return false; WordProperty w = (WordProperty)o; return mProbabilityInfo.equals(w.mProbabilityInfo) && mWord.equals(w.mWord) && mShortcutTargets.equals(w.mShortcutTargets) && mBigrams.equals(w.mBigrams) && mShortcutTargets.equals(w.mShortcutTargets) && mNgrams.equals(w.mNgrams) && mIsNotAWord == w.mIsNotAWord && mIsBlacklistEntry == w.mIsBlacklistEntry && mHasBigrams == w.mHasBigrams && mHasShortcuts && w.mHasBigrams; && mHasNgrams == w.mHasNgrams && mHasShortcuts && w.mHasNgrams; } @Override Loading java/src/com/android/inputmethod/latin/utils/CombinedFormatUtils.java +4 −3 Original line number Diff line number Diff line Loading @@ -67,7 +67,7 @@ public class CombinedFormatUtils { builder.append("," + BLACKLISTED_TAG + "=true"); } builder.append("\n"); if (wordProperty.mShortcutTargets != null) { if (wordProperty.mHasShortcuts) { for (final WeightedString shortcutTarget : wordProperty.mShortcutTargets) { builder.append(" " + SHORTCUT_TAG + "=" + shortcutTarget.mWord); builder.append(","); Loading @@ -75,8 +75,9 @@ public class CombinedFormatUtils { builder.append("\n"); } } if (wordProperty.mBigrams != null) { for (final WeightedString bigram : wordProperty.mBigrams) { if (wordProperty.mHasNgrams) { // TODO: Support ngram. for (final WeightedString bigram : wordProperty.getBigrams()) { builder.append(" " + BIGRAM_TAG + "=" + bigram.mWord); builder.append(","); builder.append(formatProbabilityInfo(bigram.mProbabilityInfo)); Loading tests/src/com/android/inputmethod/latin/BinaryDictionaryTests.java +10 −8 Original line number Diff line number Diff line Loading @@ -1105,7 +1105,7 @@ public class BinaryDictionaryTests extends AndroidTestCase { assertTrue(wordProperty.isValid()); assertEquals(isNotAWord, wordProperty.mIsNotAWord); assertEquals(isBlacklisted, wordProperty.mIsBlacklistEntry); assertEquals(false, wordProperty.mHasBigrams); assertEquals(false, wordProperty.mHasNgrams); assertEquals(false, wordProperty.mHasShortcuts); assertEquals(unigramProbability, wordProperty.mProbabilityInfo.mProbability); assertTrue(wordProperty.mShortcutTargets.isEmpty()); Loading Loading @@ -1142,13 +1142,14 @@ public class BinaryDictionaryTests extends AndroidTestCase { final HashSet<String> bigramWord1s = bigrams.get(word0); final WordProperty wordProperty = binaryDictionary.getWordProperty(word0, false /* isBeginningOfSentence */); assertEquals(bigramWord1s.size(), wordProperty.mBigrams.size()); for (int j = 0; j < wordProperty.mBigrams.size(); j++) { final String word1 = wordProperty.mBigrams.get(j).mWord; assertEquals(bigramWord1s.size(), wordProperty.mNgrams.size()); // TODO: Support ngram. for (final WeightedString bigramTarget : wordProperty.getBigrams()) { final String word1 = bigramTarget.mWord; assertTrue(bigramWord1s.contains(word1)); if (canCheckBigramProbability(formatVersion)) { final int bigramProbability = bigramProbabilities.get(new Pair<>(word0, word1)); assertEquals(bigramProbability, wordProperty.mBigrams.get(j).getProbability()); assertEquals(bigramProbability, bigramTarget.getProbability()); } } } Loading Loading @@ -1235,13 +1236,14 @@ public class BinaryDictionaryTests extends AndroidTestCase { wordProperty.mProbabilityInfo.mProbability); wordSet.remove(word0); final HashSet<String> bigramWord1s = bigrams.get(word0); for (int j = 0; j < wordProperty.mBigrams.size(); j++) { final String word1 = wordProperty.mBigrams.get(j).mWord; // TODO: Support ngram. for (final WeightedString bigramTarget : wordProperty.getBigrams()) { final String word1 = bigramTarget.mWord; assertTrue(bigramWord1s.contains(word1)); final Pair<String, String> bigram = new Pair<>(word0, word1); if (canCheckBigramProbability(formatVersion)) { final int bigramProbability = bigramProbabilitiesToCheckLater.get(bigram); assertEquals(bigramProbability, wordProperty.mBigrams.get(j).getProbability()); assertEquals(bigramProbability, bigramTarget.getProbability()); } bigramSet.remove(bigram); } Loading Loading
java/src/com/android/inputmethod/latin/NgramContext.java +8 −2 Original line number Diff line number Diff line Loading @@ -169,8 +169,14 @@ public class NgramContext { @Override public int hashCode() { // Just for having equals(). return mPrevWordsInfo[0].hashCode(); int hashValue = 0; for (final WordInfo wordInfo : mPrevWordsInfo) { if (wordInfo == null || !WordInfo.EMPTY_WORD_INFO.equals(wordInfo)) { break; } hashValue ^= wordInfo.hashCode(); } return hashValue; } @Override Loading
java/src/com/android/inputmethod/latin/makedict/NgramProperty.java 0 → 100644 +26 −0 Original line number Diff line number Diff line package com.android.inputmethod.latin.makedict; import com.android.inputmethod.latin.NgramContext; public class NgramProperty { public final WeightedString mTargetWord; public final NgramContext mNgramContext; public NgramProperty(final WeightedString targetWord, final NgramContext ngramContext) { mTargetWord = targetWord; mNgramContext = ngramContext; } @Override public int hashCode() { return mTargetWord.hashCode() ^ mNgramContext.hashCode(); } @Override public boolean equals(Object o) { if (o == this) return true; if (!(o instanceof NgramProperty)) return false; final NgramProperty n = (NgramProperty)o; return mTargetWord.equals(n.mTargetWord) && mNgramContext.equals(n.mNgramContext); } }
java/src/com/android/inputmethod/latin/makedict/WordProperty.java +41 −16 Original line number Diff line number Diff line Loading @@ -18,6 +18,8 @@ package com.android.inputmethod.latin.makedict; import com.android.inputmethod.annotations.UsedForTesting; import com.android.inputmethod.latin.BinaryDictionary; import com.android.inputmethod.latin.NgramContext; import com.android.inputmethod.latin.NgramContext.WordInfo; import com.android.inputmethod.latin.utils.CombinedFormatUtils; import com.android.inputmethod.latin.utils.StringUtils; Loading @@ -33,16 +35,17 @@ public final class WordProperty implements Comparable<WordProperty> { public final String mWord; public final ProbabilityInfo mProbabilityInfo; public final ArrayList<WeightedString> mShortcutTargets; public final ArrayList<WeightedString> mBigrams; public final ArrayList<NgramProperty> mNgrams; // TODO: Support mIsBeginningOfSentence. public final boolean mIsBeginningOfSentence; public final boolean mIsNotAWord; public final boolean mIsBlacklistEntry; public final boolean mHasShortcuts; public final boolean mHasBigrams; public final boolean mHasNgrams; private int mHashCode = 0; // TODO: Support n-gram. @UsedForTesting public WordProperty(final String word, final ProbabilityInfo probabilityInfo, final ArrayList<WeightedString> shortcutTargets, Loading @@ -51,11 +54,17 @@ public final class WordProperty implements Comparable<WordProperty> { mWord = word; mProbabilityInfo = probabilityInfo; mShortcutTargets = shortcutTargets; mBigrams = bigrams; mNgrams = new ArrayList<>(); final NgramContext ngramContext = new NgramContext(new WordInfo(mWord)); if (bigrams != null) { for (final WeightedString bigramTarget : bigrams) { mNgrams.add(new NgramProperty(bigramTarget, ngramContext)); } } mIsBeginningOfSentence = false; mIsNotAWord = isNotAWord; mIsBlacklistEntry = isBlacklistEntry; mHasBigrams = bigrams != null && !bigrams.isEmpty(); mHasNgrams = bigrams != null && !bigrams.isEmpty(); mHasShortcuts = shortcutTargets != null && !shortcutTargets.isEmpty(); } Loading @@ -78,19 +87,24 @@ public final class WordProperty implements Comparable<WordProperty> { mWord = StringUtils.getStringFromNullTerminatedCodePointArray(codePoints); mProbabilityInfo = createProbabilityInfoFromArray(probabilityInfo); mShortcutTargets = new ArrayList<>(); mBigrams = new ArrayList<>(); mNgrams = new ArrayList<>(); mIsBeginningOfSentence = isBeginningOfSentence; mIsNotAWord = isNotAWord; mIsBlacklistEntry = isBlacklisted; mHasShortcuts = hasShortcuts; mHasBigrams = hasBigram; final int bigramTargetCount = bigramTargets.size(); for (int i = 0; i < bigramTargetCount; i++) { final String bigramTargetString = mHasNgrams = hasBigram; final int relatedNgramCount = bigramTargets.size(); final WordInfo currentWordInfo = mIsBeginningOfSentence ? WordInfo.BEGINNING_OF_SENTENCE : new WordInfo(mWord); final NgramContext ngramContext = new NgramContext(currentWordInfo); for (int i = 0; i < relatedNgramCount; i++) { final String ngramTargetString = StringUtils.getStringFromNullTerminatedCodePointArray(bigramTargets.get(i)); mBigrams.add(new WeightedString(bigramTargetString, createProbabilityInfoFromArray(bigramProbabilityInfo.get(i)))); final WeightedString ngramTarget = new WeightedString(ngramTargetString, createProbabilityInfoFromArray(bigramProbabilityInfo.get(i))); // TODO: Support n-gram. mNgrams.add(new NgramProperty(ngramTarget, ngramContext)); } final int shortcutTargetCount = shortcutTargets.size(); Loading @@ -102,6 +116,17 @@ public final class WordProperty implements Comparable<WordProperty> { } } // TODO: Remove public ArrayList<WeightedString> getBigrams() { final ArrayList<WeightedString> bigrams = new ArrayList<>(); for (final NgramProperty ngram : mNgrams) { if (ngram.mNgramContext.getPrevWordCount() == 1) { bigrams.add(ngram.mTargetWord); } } return bigrams; } public int getProbability() { return mProbabilityInfo.mProbability; } Loading @@ -110,8 +135,8 @@ public final class WordProperty implements Comparable<WordProperty> { return Arrays.hashCode(new Object[] { word.mWord, word.mProbabilityInfo, word.mShortcutTargets.hashCode(), word.mBigrams.hashCode(), word.mShortcutTargets, word.mNgrams, word.mIsNotAWord, word.mIsBlacklistEntry }); Loading Loading @@ -142,9 +167,9 @@ public final class WordProperty implements Comparable<WordProperty> { if (!(o instanceof WordProperty)) return false; WordProperty w = (WordProperty)o; return mProbabilityInfo.equals(w.mProbabilityInfo) && mWord.equals(w.mWord) && mShortcutTargets.equals(w.mShortcutTargets) && mBigrams.equals(w.mBigrams) && mShortcutTargets.equals(w.mShortcutTargets) && mNgrams.equals(w.mNgrams) && mIsNotAWord == w.mIsNotAWord && mIsBlacklistEntry == w.mIsBlacklistEntry && mHasBigrams == w.mHasBigrams && mHasShortcuts && w.mHasBigrams; && mHasNgrams == w.mHasNgrams && mHasShortcuts && w.mHasNgrams; } @Override Loading
java/src/com/android/inputmethod/latin/utils/CombinedFormatUtils.java +4 −3 Original line number Diff line number Diff line Loading @@ -67,7 +67,7 @@ public class CombinedFormatUtils { builder.append("," + BLACKLISTED_TAG + "=true"); } builder.append("\n"); if (wordProperty.mShortcutTargets != null) { if (wordProperty.mHasShortcuts) { for (final WeightedString shortcutTarget : wordProperty.mShortcutTargets) { builder.append(" " + SHORTCUT_TAG + "=" + shortcutTarget.mWord); builder.append(","); Loading @@ -75,8 +75,9 @@ public class CombinedFormatUtils { builder.append("\n"); } } if (wordProperty.mBigrams != null) { for (final WeightedString bigram : wordProperty.mBigrams) { if (wordProperty.mHasNgrams) { // TODO: Support ngram. for (final WeightedString bigram : wordProperty.getBigrams()) { builder.append(" " + BIGRAM_TAG + "=" + bigram.mWord); builder.append(","); builder.append(formatProbabilityInfo(bigram.mProbabilityInfo)); Loading
tests/src/com/android/inputmethod/latin/BinaryDictionaryTests.java +10 −8 Original line number Diff line number Diff line Loading @@ -1105,7 +1105,7 @@ public class BinaryDictionaryTests extends AndroidTestCase { assertTrue(wordProperty.isValid()); assertEquals(isNotAWord, wordProperty.mIsNotAWord); assertEquals(isBlacklisted, wordProperty.mIsBlacklistEntry); assertEquals(false, wordProperty.mHasBigrams); assertEquals(false, wordProperty.mHasNgrams); assertEquals(false, wordProperty.mHasShortcuts); assertEquals(unigramProbability, wordProperty.mProbabilityInfo.mProbability); assertTrue(wordProperty.mShortcutTargets.isEmpty()); Loading Loading @@ -1142,13 +1142,14 @@ public class BinaryDictionaryTests extends AndroidTestCase { final HashSet<String> bigramWord1s = bigrams.get(word0); final WordProperty wordProperty = binaryDictionary.getWordProperty(word0, false /* isBeginningOfSentence */); assertEquals(bigramWord1s.size(), wordProperty.mBigrams.size()); for (int j = 0; j < wordProperty.mBigrams.size(); j++) { final String word1 = wordProperty.mBigrams.get(j).mWord; assertEquals(bigramWord1s.size(), wordProperty.mNgrams.size()); // TODO: Support ngram. for (final WeightedString bigramTarget : wordProperty.getBigrams()) { final String word1 = bigramTarget.mWord; assertTrue(bigramWord1s.contains(word1)); if (canCheckBigramProbability(formatVersion)) { final int bigramProbability = bigramProbabilities.get(new Pair<>(word0, word1)); assertEquals(bigramProbability, wordProperty.mBigrams.get(j).getProbability()); assertEquals(bigramProbability, bigramTarget.getProbability()); } } } Loading Loading @@ -1235,13 +1236,14 @@ public class BinaryDictionaryTests extends AndroidTestCase { wordProperty.mProbabilityInfo.mProbability); wordSet.remove(word0); final HashSet<String> bigramWord1s = bigrams.get(word0); for (int j = 0; j < wordProperty.mBigrams.size(); j++) { final String word1 = wordProperty.mBigrams.get(j).mWord; // TODO: Support ngram. for (final WeightedString bigramTarget : wordProperty.getBigrams()) { final String word1 = bigramTarget.mWord; assertTrue(bigramWord1s.contains(word1)); final Pair<String, String> bigram = new Pair<>(word0, word1); if (canCheckBigramProbability(formatVersion)) { final int bigramProbability = bigramProbabilitiesToCheckLater.get(bigram); assertEquals(bigramProbability, wordProperty.mBigrams.get(j).getProbability()); assertEquals(bigramProbability, bigramTarget.getProbability()); } bigramSet.remove(bigram); } Loading