127 lines
3.0 KiB
Java
Executable File
127 lines
3.0 KiB
Java
Executable File
package org.gcube.contentmanagement.lexicalmatcher.analysis.guesser.data;
|
|
|
|
|
|
import java.math.BigDecimal;
|
|
import java.math.BigInteger;
|
|
import java.util.ArrayList;
|
|
import java.util.HashMap;
|
|
|
|
import org.slf4j.Logger;
|
|
import org.slf4j.LoggerFactory;
|
|
|
|
//score relative to a certain category and column
|
|
|
|
public class CategoryScoresOld {
|
|
|
|
private static Logger logger = LoggerFactory.getLogger(CategoryScoresOld.class);
|
|
|
|
// column names vs percentage
|
|
private HashMap<String, BigDecimal> columnsScore;
|
|
|
|
private BigDecimal maximumElements;
|
|
|
|
public CategoryScoresOld(BigInteger maxelements) {
|
|
this.maximumElements = new BigDecimal(maxelements);
|
|
columnsScore = new HashMap<String, BigDecimal>();
|
|
}
|
|
|
|
public void setMaximumElements(BigDecimal MaximumElements) {
|
|
maximumElements = MaximumElements;
|
|
}
|
|
|
|
public void incrementScore(String columnName,float increment) {
|
|
|
|
BigDecimal score = columnsScore.get(columnName);
|
|
|
|
BigDecimal reciproc = BigDecimal.valueOf(increment);
|
|
|
|
if (score == null) {
|
|
// build up a new score : 1/TOTAL
|
|
score = reciproc;
|
|
} else {
|
|
score = score.add(reciproc);
|
|
}
|
|
columnsScore.put(columnName, score);
|
|
// AnalysisLogger.getLogger().debug("CategoryOrderedList->checkUnkEntriesOnEntireCategory-> SCORE "+score);
|
|
}
|
|
|
|
public double getScore(String columnName) {
|
|
|
|
double score = 0;
|
|
try {
|
|
|
|
BigDecimal percentage = columnsScore.get(columnName);
|
|
try {
|
|
if (percentage == null)
|
|
percentage = BigDecimal.ZERO;
|
|
|
|
logger.trace("getScore -> Score for "+columnName+": " + percentage + " vs " + maximumElements);
|
|
percentage = percentage.divide(maximumElements, 2, BigDecimal.ROUND_DOWN);
|
|
} catch (ArithmeticException e) {
|
|
percentage = BigDecimal.ZERO;
|
|
e.printStackTrace();
|
|
}
|
|
|
|
score = percentage.doubleValue();
|
|
} catch (Exception e) {
|
|
}
|
|
return score;
|
|
|
|
}
|
|
|
|
// take the best performing column
|
|
public String findBest() {
|
|
|
|
String bestCol = null;
|
|
BigDecimal bestscore = BigDecimal.valueOf(-1);
|
|
|
|
for (String column : columnsScore.keySet()) {
|
|
|
|
BigDecimal score = BigDecimal.ZERO;
|
|
try {
|
|
score = columnsScore.get(column);
|
|
} catch (Exception e) {
|
|
logger.error("ERROR in getting SCORE ",e);
|
|
}
|
|
if (bestscore.compareTo(score) < 0) {
|
|
bestscore = score;
|
|
bestCol = column;
|
|
}
|
|
}
|
|
|
|
return bestCol;
|
|
}
|
|
|
|
// take the best performing columns
|
|
public ArrayList<String> findBestList() {
|
|
|
|
ArrayList<String> bestCols = new ArrayList<String>();
|
|
|
|
for (String column : columnsScore.keySet()) {
|
|
|
|
BigDecimal score = BigDecimal.ZERO;
|
|
|
|
try {
|
|
score = columnsScore.get(column);
|
|
} catch (Exception e) {
|
|
logger.error("ERROR in getting SCORE ",e);
|
|
}
|
|
|
|
// find best place where to put column
|
|
int size = bestCols.size();
|
|
int index = size;
|
|
for (int i = 0; i < size; i++) {
|
|
if (columnsScore.get(bestCols.get(i)).compareTo(score) <= 0) {
|
|
index = i;
|
|
break;
|
|
}
|
|
}
|
|
bestCols.add(index, column);
|
|
|
|
}
|
|
|
|
return bestCols;
|
|
}
|
|
|
|
}
|