CombinedFormatUtils.java revision c6a6f6a9905ab98516d944ac85933d016e4147fb
1/*
2 * Copyright (C) 2014 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License"); you may not
5 * use this file except in compliance with the License. You may obtain a copy of
6 * the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
12 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13 * License for the specific language governing permissions and limitations under
14 * the License.
15 */
16
17package com.android.inputmethod.latin.utils;
18
19import com.android.inputmethod.latin.makedict.DictionaryHeader;
20import com.android.inputmethod.latin.makedict.ProbabilityInfo;
21import com.android.inputmethod.latin.makedict.WeightedString;
22import com.android.inputmethod.latin.makedict.WordProperty;
23
24import java.util.HashMap;
25
26public class CombinedFormatUtils {
27    public static final String DICTIONARY_TAG = "dictionary";
28    public static final String BIGRAM_TAG = "bigram";
29    public static final String SHORTCUT_TAG = "shortcut";
30    public static final String PROBABILITY_TAG = "f";
31    public static final String HISTORICAL_INFO_TAG = "historicalInfo";
32    public static final String HISTORICAL_INFO_SEPARATOR = ":";
33    public static final String WORD_TAG = "word";
34    public static final String BEGINNING_OF_SENTENCE_TAG = "beginning_of_sentence";
35    public static final String NOT_A_WORD_TAG = "not_a_word";
36    public static final String BLACKLISTED_TAG = "blacklisted";
37
38    public static String formatAttributeMap(final HashMap<String, String> attributeMap) {
39        final StringBuilder builder = new StringBuilder();
40        builder.append(DICTIONARY_TAG + "=");
41        if (attributeMap.containsKey(DictionaryHeader.DICTIONARY_ID_KEY)) {
42            builder.append(attributeMap.get(DictionaryHeader.DICTIONARY_ID_KEY));
43        }
44        for (final String key : attributeMap.keySet()) {
45            if (key.equals(DictionaryHeader.DICTIONARY_ID_KEY)) {
46                continue;
47            }
48            final String value = attributeMap.get(key);
49            builder.append("," + key + "=" + value);
50        }
51        builder.append("\n");
52        return builder.toString();
53    }
54
55    public static String formatWordProperty(final WordProperty wordProperty) {
56        final StringBuilder builder = new StringBuilder();
57        builder.append(" " + WORD_TAG + "=" + wordProperty.mWord);
58        builder.append(",");
59        builder.append(formatProbabilityInfo(wordProperty.mProbabilityInfo));
60        if (wordProperty.mIsBeginningOfSentence) {
61            builder.append("," + BEGINNING_OF_SENTENCE_TAG + "=true");
62        }
63        if (wordProperty.mIsNotAWord) {
64            builder.append("," + NOT_A_WORD_TAG + "=true");
65        }
66        if (wordProperty.mIsBlacklistEntry) {
67            builder.append("," + BLACKLISTED_TAG + "=true");
68        }
69        builder.append("\n");
70        if (wordProperty.mHasShortcuts) {
71            for (final WeightedString shortcutTarget : wordProperty.mShortcutTargets) {
72                builder.append("  " + SHORTCUT_TAG + "=" + shortcutTarget.mWord);
73                builder.append(",");
74                builder.append(formatProbabilityInfo(shortcutTarget.mProbabilityInfo));
75                builder.append("\n");
76            }
77        }
78        if (wordProperty.mHasNgrams) {
79            // TODO: Support ngram.
80            for (final WeightedString bigram : wordProperty.getBigrams()) {
81                builder.append("  " + BIGRAM_TAG + "=" + bigram.mWord);
82                builder.append(",");
83                builder.append(formatProbabilityInfo(bigram.mProbabilityInfo));
84                builder.append("\n");
85            }
86        }
87        return builder.toString();
88    }
89
90    public static String formatProbabilityInfo(final ProbabilityInfo probabilityInfo) {
91        final StringBuilder builder = new StringBuilder();
92        builder.append(PROBABILITY_TAG + "=" + probabilityInfo.mProbability);
93        if (probabilityInfo.hasHistoricalInfo()) {
94            builder.append(",");
95            builder.append(HISTORICAL_INFO_TAG + "=");
96            builder.append(probabilityInfo.mTimestamp);
97            builder.append(HISTORICAL_INFO_SEPARATOR);
98            builder.append(probabilityInfo.mLevel);
99            builder.append(HISTORICAL_INFO_SEPARATOR);
100            builder.append(probabilityInfo.mCount);
101        }
102        return builder.toString();
103    }
104}
105