package storm.applications.model.fraud.predictor; import java.util.Arrays; import java.util.List; import java.util.Scanner; /** * * @author maycon */ public class MarkovModel { private List<String> states; private double[][] stateTransitionProb; private int numStates; public MarkovModel(String model) { Scanner scanner = new Scanner(model); int lineCount = 0; int row = 0; while (scanner.hasNextLine()) { String line = scanner.nextLine(); if (0 == lineCount) { //states String[] items = line.split(","); states = Arrays.asList(items); numStates = items.length; stateTransitionProb = new double[numStates][numStates]; } else { //populate state transtion probability deseralizeTableRow(stateTransitionProb, line, ",", row, numStates); ++row; } ++lineCount; } scanner.close(); } /** * @param table * @param data * @param delim * @param row * @param numCol */ private void deseralizeTableRow(double[][] table, String data, String delim, int row, int numCol) { String[] items = data.split(delim); if (items.length != numCol) { throw new IllegalArgumentException("Row serialization failed, number of tokens in string does not match with number of columns"); } for (int c = 0; c < numCol; ++c) { table[row][c] = Double.parseDouble(items[c]); } } public List<String> getStates() { return states; } public double[][] getStateTransitionProb() { return stateTransitionProb; } public int getNumStates() { return numStates; } }