Refactoring

pull/191/head
M66B 4 years ago
parent feb422c48e
commit 64f2e30a98

@ -74,12 +74,6 @@ public class MessageClassifier {
// Load data if needed
load(context);
// Initialize data if needed
if (!classMessages.containsKey(folder.account))
classMessages.put(folder.account, new HashMap<>());
if (!wordClassFrequency.containsKey(folder.account))
wordClassFrequency.put(folder.account, new HashMap<>());
// Classify texts
String classified = classify(folder.account, folder.name, texts, target == null, context);
@ -93,14 +87,6 @@ public class MessageClassifier {
" re=" + message.auto_classified +
" elapsed=" + elapsed);
Integer m = classMessages.get(folder.account).get(folder.name);
m = (m == null ? 0 : m) + (target == null ? 1 : -1);
if (m <= 0)
classMessages.get(folder.account).remove(folder.name);
else
classMessages.get(folder.account).put(folder.name, m);
Log.i("Classifier " + folder.name + "=" + m + " msgs");
dirty = true;
// Auto classify message
@ -168,6 +154,12 @@ public class MessageClassifier {
}
private static String classify(long account, @NonNull String currentClass, @NonNull List<String> texts, boolean added, @NonNull Context context) {
// Initialize data if needed
if (!classMessages.containsKey(account))
classMessages.put(account, new HashMap<>());
if (!wordClassFrequency.containsKey(account))
wordClassFrequency.put(account, new HashMap<>());
State state = new State();
Log.i("Classifier texts=" + texts.size());
@ -201,11 +193,6 @@ public class MessageClassifier {
// final word
processWord(account, added, null, state);
updateFrequencies(account, currentClass, added, state);
if (!added)
return null;
int maxMessages = 0;
for (String clazz : classMessages.get(account).keySet()) {
int count = classMessages.get(account).get(clazz);
@ -213,11 +200,16 @@ public class MessageClassifier {
maxMessages = count;
}
updateFrequencies(account, currentClass, added, state);
if (maxMessages == 0) {
Log.i("Classifier no messages account=" + account);
return null;
}
if (!added)
return null;
// Calculate chance per class
DB db = DB.getInstance(context);
int words = state.words.size() - texts.size() - 1;
@ -335,7 +327,15 @@ public class MessageClassifier {
}
}
private static void updateFrequencies(long account, @NonNull String clazz, boolean added, @NonNull State state) {
private static void updateFrequencies(long account, @NonNull String currentClass, boolean added, @NonNull State state) {
Integer m = classMessages.get(account).get(currentClass);
m = (m == null ? 0 : m) + (added ? 1 : -1);
if (m <= 0)
classMessages.get(account).remove(currentClass);
else
classMessages.get(account).put(currentClass, m);
Log.i("Classifier " + currentClass + "=" + m + " msgs");
for (int i = 1; i < state.words.size() - 1; i++) {
String before = state.words.get(i - 1);
String current = state.words.get(i);
@ -350,14 +350,14 @@ public class MessageClassifier {
classFrequency = new HashMap<>();
wordClassFrequency.get(account).put(current, classFrequency);
}
Frequency c = classFrequency.get(clazz);
Frequency c = classFrequency.get(currentClass);
if (c == null) {
c = new Frequency();
classFrequency.put(clazz, c);
classFrequency.put(currentClass, c);
}
c.add(before, after, 1, state.words.indexOf(current) < i);
} else {
Frequency c = (classFrequency == null ? null : classFrequency.get(clazz));
Frequency c = (classFrequency == null ? null : classFrequency.get(currentClass));
if (c != null)
c.add(before, after, -1, state.words.indexOf(current) < i);
}

Loading…
Cancel
Save