mirror of
https://gitlab.futo.org/keyboard/latinime.git
synced 2024-09-28 14:54:30 +01:00
Get stats from dictionary.
Bug: 16553957 Change-Id: I70c7a7be3c902dc8a0dfe8f946f9ef75ba6c9655
This commit is contained in:
parent
c724864c61
commit
743a9b4499
@ -598,7 +598,7 @@ public final class BinaryDictionary extends Dictionary {
|
||||
}
|
||||
|
||||
@UsedForTesting
|
||||
public String getPropertyForTest(final String query) {
|
||||
public String getPropertyForGettingStats(final String query) {
|
||||
if (!isValidDictionary()) return "";
|
||||
return getPropertyNative(mNativeDict, query);
|
||||
}
|
||||
|
@ -20,16 +20,24 @@ import java.io.File;
|
||||
import java.util.Locale;
|
||||
|
||||
public class DictionaryStats {
|
||||
public static final int NOT_AN_ENTRY_COUNT = -1;
|
||||
|
||||
public final Locale mLocale;
|
||||
public final String mDictName;
|
||||
public final String mDictFilePath;
|
||||
public final long mDictFileSize;
|
||||
|
||||
public final int mUnigramCount;
|
||||
public final int mNgramCount;
|
||||
// TODO: Add more members.
|
||||
|
||||
public DictionaryStats(final Locale locale, final String dictName, final File dictFile) {
|
||||
public DictionaryStats(final Locale locale, final String dictName, final File dictFile,
|
||||
final int unigramCount, final int ngramCount) {
|
||||
mLocale = locale;
|
||||
mDictName = dictName;
|
||||
mDictFilePath = dictFile.getAbsolutePath();
|
||||
mDictFileSize = dictFile.length();
|
||||
mUnigramCount = unigramCount;
|
||||
mNgramCount = ngramCount;
|
||||
}
|
||||
}
|
||||
|
@ -644,14 +644,36 @@ abstract public class ExpandableBinaryDictionary extends Dictionary {
|
||||
});
|
||||
}
|
||||
|
||||
private static int parseEntryCount(final String entryCountStr) {
|
||||
int entryCount;
|
||||
try {
|
||||
entryCount = Integer.parseInt(entryCountStr);
|
||||
} catch (final NumberFormatException e) {
|
||||
entryCount = DictionaryStats.NOT_AN_ENTRY_COUNT;
|
||||
}
|
||||
return entryCount;
|
||||
}
|
||||
|
||||
public DictionaryStats getDictionaryStats() {
|
||||
reloadDictionaryIfRequired();
|
||||
final AsyncResultHolder<DictionaryStats> result = new AsyncResultHolder<>();
|
||||
asyncExecuteTaskWithLock(mLock.readLock(), mDictName /* executorName */, new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
// TODO: Get stats from the dictionary.
|
||||
result.set(new DictionaryStats(mLocale, mDictName, mDictFile));
|
||||
if (mBinaryDictionary == null) {
|
||||
result.set(new DictionaryStats(mLocale, mDictName, mDictFile,
|
||||
DictionaryStats.NOT_AN_ENTRY_COUNT,
|
||||
DictionaryStats.NOT_AN_ENTRY_COUNT));
|
||||
}
|
||||
final int unigramCount = parseEntryCount(
|
||||
mBinaryDictionary.getPropertyForGettingStats(
|
||||
BinaryDictionary.MAX_UNIGRAM_COUNT_QUERY));
|
||||
// TODO: Get dedicated entry counts for bigram, trigram, and so on.
|
||||
final int ngramCount = parseEntryCount(mBinaryDictionary.getPropertyForGettingStats(
|
||||
BinaryDictionary.MAX_BIGRAM_COUNT_QUERY));
|
||||
// TODO: Get more information from dictionary.
|
||||
result.set(new DictionaryStats(mLocale, mDictName, mDictFile, unigramCount,
|
||||
ngramCount));
|
||||
}
|
||||
});
|
||||
return result.get(null /* defaultValue */, TIMEOUT_FOR_READ_OPS_IN_MILLISECONDS);
|
||||
|
@ -342,31 +342,31 @@ public class BinaryDictionaryDecayingTests extends AndroidTestCase {
|
||||
}
|
||||
|
||||
final int maxUnigramCount = Integer.parseInt(
|
||||
binaryDictionary.getPropertyForTest(BinaryDictionary.MAX_UNIGRAM_COUNT_QUERY));
|
||||
binaryDictionary.getPropertyForGettingStats(BinaryDictionary.MAX_UNIGRAM_COUNT_QUERY));
|
||||
for (int i = 0; i < unigramTypedCount; i++) {
|
||||
final String word = words.get(random.nextInt(words.size()));
|
||||
addUnigramWord(binaryDictionary, word, DUMMY_PROBABILITY);
|
||||
|
||||
if (binaryDictionary.needsToRunGC(true /* mindsBlockByGC */)) {
|
||||
final int unigramCountBeforeGC =
|
||||
Integer.parseInt(binaryDictionary.getPropertyForTest(
|
||||
Integer.parseInt(binaryDictionary.getPropertyForGettingStats(
|
||||
BinaryDictionary.UNIGRAM_COUNT_QUERY));
|
||||
while (binaryDictionary.needsToRunGC(true /* mindsBlockByGC */)) {
|
||||
forcePassingShortTime(binaryDictionary);
|
||||
}
|
||||
final int unigramCountAfterGC =
|
||||
Integer.parseInt(binaryDictionary.getPropertyForTest(
|
||||
Integer.parseInt(binaryDictionary.getPropertyForGettingStats(
|
||||
BinaryDictionary.UNIGRAM_COUNT_QUERY));
|
||||
assertTrue(unigramCountBeforeGC > unigramCountAfterGC);
|
||||
}
|
||||
}
|
||||
|
||||
assertTrue(Integer.parseInt(binaryDictionary.getPropertyForTest(
|
||||
assertTrue(Integer.parseInt(binaryDictionary.getPropertyForGettingStats(
|
||||
BinaryDictionary.UNIGRAM_COUNT_QUERY)) > 0);
|
||||
assertTrue(Integer.parseInt(binaryDictionary.getPropertyForTest(
|
||||
assertTrue(Integer.parseInt(binaryDictionary.getPropertyForGettingStats(
|
||||
BinaryDictionary.UNIGRAM_COUNT_QUERY)) <= maxUnigramCount);
|
||||
forcePassingLongTime(binaryDictionary);
|
||||
assertEquals(0, Integer.parseInt(binaryDictionary.getPropertyForTest(
|
||||
assertEquals(0, Integer.parseInt(binaryDictionary.getPropertyForGettingStats(
|
||||
BinaryDictionary.UNIGRAM_COUNT_QUERY)));
|
||||
}
|
||||
|
||||
@ -415,13 +415,13 @@ public class BinaryDictionaryDecayingTests extends AndroidTestCase {
|
||||
}
|
||||
if (binaryDictionary.needsToRunGC(true /* mindsBlockByGC */)) {
|
||||
final int unigramCountBeforeGC =
|
||||
Integer.parseInt(binaryDictionary.getPropertyForTest(
|
||||
Integer.parseInt(binaryDictionary.getPropertyForGettingStats(
|
||||
BinaryDictionary.UNIGRAM_COUNT_QUERY));
|
||||
assertTrue(binaryDictionary.isValidWord(strong));
|
||||
assertTrue(binaryDictionary.isValidWord(weak));
|
||||
binaryDictionary.flushWithGC();
|
||||
final int unigramCountAfterGC =
|
||||
Integer.parseInt(binaryDictionary.getPropertyForTest(
|
||||
Integer.parseInt(binaryDictionary.getPropertyForGettingStats(
|
||||
BinaryDictionary.UNIGRAM_COUNT_QUERY));
|
||||
assertTrue(unigramCountBeforeGC > unigramCountAfterGC);
|
||||
assertFalse(binaryDictionary.isValidWord(weak));
|
||||
@ -477,7 +477,7 @@ public class BinaryDictionaryDecayingTests extends AndroidTestCase {
|
||||
}
|
||||
|
||||
final int maxBigramCount = Integer.parseInt(
|
||||
binaryDictionary.getPropertyForTest(BinaryDictionary.MAX_BIGRAM_COUNT_QUERY));
|
||||
binaryDictionary.getPropertyForGettingStats(BinaryDictionary.MAX_BIGRAM_COUNT_QUERY));
|
||||
for (int i = 0; i < bigramTypedCount; ++i) {
|
||||
final Pair<String, String> bigram = bigrams.get(random.nextInt(bigrams.size()));
|
||||
addUnigramWord(binaryDictionary, bigram.first, DUMMY_PROBABILITY);
|
||||
@ -486,24 +486,24 @@ public class BinaryDictionaryDecayingTests extends AndroidTestCase {
|
||||
|
||||
if (binaryDictionary.needsToRunGC(true /* mindsBlockByGC */)) {
|
||||
final int bigramCountBeforeGC =
|
||||
Integer.parseInt(binaryDictionary.getPropertyForTest(
|
||||
Integer.parseInt(binaryDictionary.getPropertyForGettingStats(
|
||||
BinaryDictionary.BIGRAM_COUNT_QUERY));
|
||||
while (binaryDictionary.needsToRunGC(true /* mindsBlockByGC */)) {
|
||||
forcePassingShortTime(binaryDictionary);
|
||||
}
|
||||
final int bigramCountAfterGC =
|
||||
Integer.parseInt(binaryDictionary.getPropertyForTest(
|
||||
Integer.parseInt(binaryDictionary.getPropertyForGettingStats(
|
||||
BinaryDictionary.BIGRAM_COUNT_QUERY));
|
||||
assertTrue(bigramCountBeforeGC > bigramCountAfterGC);
|
||||
}
|
||||
}
|
||||
|
||||
assertTrue(Integer.parseInt(binaryDictionary.getPropertyForTest(
|
||||
assertTrue(Integer.parseInt(binaryDictionary.getPropertyForGettingStats(
|
||||
BinaryDictionary.BIGRAM_COUNT_QUERY)) > 0);
|
||||
assertTrue(Integer.parseInt(binaryDictionary.getPropertyForTest(
|
||||
assertTrue(Integer.parseInt(binaryDictionary.getPropertyForGettingStats(
|
||||
BinaryDictionary.BIGRAM_COUNT_QUERY)) <= maxBigramCount);
|
||||
forcePassingLongTime(binaryDictionary);
|
||||
assertEquals(0, Integer.parseInt(binaryDictionary.getPropertyForTest(
|
||||
assertEquals(0, Integer.parseInt(binaryDictionary.getPropertyForGettingStats(
|
||||
BinaryDictionary.BIGRAM_COUNT_QUERY)));
|
||||
}
|
||||
|
||||
@ -574,11 +574,11 @@ public class BinaryDictionaryDecayingTests extends AndroidTestCase {
|
||||
}
|
||||
if (binaryDictionary.needsToRunGC(true /* mindsBlockByGC */)) {
|
||||
final int bigramCountBeforeGC =
|
||||
Integer.parseInt(binaryDictionary.getPropertyForTest(
|
||||
Integer.parseInt(binaryDictionary.getPropertyForGettingStats(
|
||||
BinaryDictionary.BIGRAM_COUNT_QUERY));
|
||||
binaryDictionary.flushWithGC();
|
||||
final int bigramCountAfterGC =
|
||||
Integer.parseInt(binaryDictionary.getPropertyForTest(
|
||||
Integer.parseInt(binaryDictionary.getPropertyForGettingStats(
|
||||
BinaryDictionary.BIGRAM_COUNT_QUERY));
|
||||
assertTrue(bigramCountBeforeGC > bigramCountAfterGC);
|
||||
assertTrue(isValidBigram(binaryDictionary, strong, target));
|
||||
|
@ -892,14 +892,18 @@ public class BinaryDictionaryTests extends AndroidTestCase {
|
||||
addBigramWords(binaryDictionary, word0, word1, bigramProbability);
|
||||
}
|
||||
assertEquals(new HashSet<>(words).size(), Integer.parseInt(
|
||||
binaryDictionary.getPropertyForTest(BinaryDictionary.UNIGRAM_COUNT_QUERY)));
|
||||
binaryDictionary.getPropertyForGettingStats(
|
||||
BinaryDictionary.UNIGRAM_COUNT_QUERY)));
|
||||
assertEquals(new HashSet<>(bigrams).size(), Integer.parseInt(
|
||||
binaryDictionary.getPropertyForTest(BinaryDictionary.BIGRAM_COUNT_QUERY)));
|
||||
binaryDictionary.getPropertyForGettingStats(
|
||||
BinaryDictionary.BIGRAM_COUNT_QUERY)));
|
||||
binaryDictionary.flushWithGC();
|
||||
assertEquals(new HashSet<>(words).size(), Integer.parseInt(
|
||||
binaryDictionary.getPropertyForTest(BinaryDictionary.UNIGRAM_COUNT_QUERY)));
|
||||
binaryDictionary.getPropertyForGettingStats(
|
||||
BinaryDictionary.UNIGRAM_COUNT_QUERY)));
|
||||
assertEquals(new HashSet<>(bigrams).size(), Integer.parseInt(
|
||||
binaryDictionary.getPropertyForTest(BinaryDictionary.BIGRAM_COUNT_QUERY)));
|
||||
binaryDictionary.getPropertyForGettingStats(
|
||||
BinaryDictionary.BIGRAM_COUNT_QUERY)));
|
||||
binaryDictionary.close();
|
||||
}
|
||||
|
||||
@ -1434,7 +1438,7 @@ public class BinaryDictionaryTests extends AndroidTestCase {
|
||||
assertEquals((int)unigramProbabilities.get(word), binaryDictionary.getFrequency(word));
|
||||
}
|
||||
assertEquals(unigramProbabilities.size(), Integer.parseInt(
|
||||
binaryDictionary.getPropertyForTest(BinaryDictionary.UNIGRAM_COUNT_QUERY)));
|
||||
binaryDictionary.getPropertyForGettingStats(BinaryDictionary.UNIGRAM_COUNT_QUERY)));
|
||||
|
||||
for (final Pair<String, String> bigram : bigrams) {
|
||||
if (canCheckBigramProbability(toFormatVersion)) {
|
||||
@ -1444,7 +1448,7 @@ public class BinaryDictionaryTests extends AndroidTestCase {
|
||||
assertTrue(isValidBigram(binaryDictionary, bigram.first, bigram.second));
|
||||
}
|
||||
assertEquals(bigramProbabilities.size(), Integer.parseInt(
|
||||
binaryDictionary.getPropertyForTest(BinaryDictionary.BIGRAM_COUNT_QUERY)));
|
||||
binaryDictionary.getPropertyForGettingStats(BinaryDictionary.BIGRAM_COUNT_QUERY)));
|
||||
}
|
||||
|
||||
public void testBeginningOfSentence() {
|
||||
|
Loading…
Reference in New Issue
Block a user