package doser.entitydisambiguation.table.logic; import java.util.LinkedList; import java.util.List; import doser.entitydisambiguation.table.dpo.ColumnResponseItem; public final class TableDisambiguationMainService { private static TableDisambiguationMainService instance = null; public static synchronized TableDisambiguationMainService getInstance() { if (instance == null) { instance = new TableDisambiguationMainService(); } return instance; } private final DisambiguateTable disTable; private TableDisambiguationMainService() { this.disTable = new DisambiguateTable(); } private Table convertToAlgorithmFormat( final List<TableDisambiguationTask> taskList) { final Table table = new Table(); table.setName("Intern unnamed"); for (int i = 0; i < taskList.size(); i++) { final List<doser.entitydisambiguation.table.dpo.TableCell> cells = taskList .get(i).getCellList(); String header = taskList.get(i).getHeader(); if ((header == null) || header.equalsIgnoreCase("") || header.equalsIgnoreCase(" ")) { header = ""; } final TableColumn col = table.addColumn(header); // final String gtString = taskList.get(i).getTypeGroundtruth(); // if ((gtString != null) && !gtString.equalsIgnoreCase("")) { // final String gtSplitter[] = gtString.split(" "); // for (final String element : gtSplitter) { // col.addTypeGt(element); // } // } for (int j = 0; j < cells.size(); j++) { col.addCell(cells.get(j).getCellContent()); } } return table; } private List<ColumnResponseItem> convertToResponseFormat(final Table table) { final List<ColumnResponseItem> res = new LinkedList<ColumnResponseItem>(); final int amountCols = table.getNumberofColumns(); for (int i = 0; i < amountCols; i++) { final ColumnResponseItem item = new ColumnResponseItem(); item.setName(table.getColumn(i).getHeader()); final List<TableCell> cellList = table.getColumn(i).getCellList(); for (int j = 0; j < cellList.size(); j++) { item.setNewCellResponse(cellList.get(j) .getDisambigutedContentString(), cellList.get(j) .getDisambiguatedContent()); } final List<String> typeList = new LinkedList<String>(); final List<Type> types = table.getColumn(i).getColumnTypes(); for (final Type type : types) { typeList.add(type.getUri()); } item.setColumnTypes(typeList); res.add(item); } return res; } public List<ColumnResponseItem> disambiguate( final List<TableDisambiguationTask> taskList) { Table table = this.convertToAlgorithmFormat(taskList); final List<String> gtList = this.extractGroundtruth(taskList); this.disTable.setGroundtruth(gtList); table = this.disTable.disambiguateTable(table); return this.convertToResponseFormat(table); } private List<String> extractGroundtruth( final List<TableDisambiguationTask> taskList) { final List<String> gtList = new LinkedList<String>(); for (final TableDisambiguationTask tableTask : taskList) { if ((tableTask.getTypeGroundtruth() == null) || tableTask.getTypeGroundtruth().equalsIgnoreCase("") || tableTask.getTypeGroundtruth().equalsIgnoreCase(" ")) { gtList.add(""); } else { gtList.add(tableTask.getTypeGroundtruth()); } } return gtList; } }