// License: GPL. For details, see LICENSE file. package org.openstreetmap.josm.plugins.osmrec.parsers; import java.io.FileNotFoundException; import java.io.InputStream; import java.util.Collections; import java.util.HashMap; import java.util.LinkedHashMap; import java.util.Map; import java.util.Scanner; /** * MappingsParser takes the Map file which contains the LGD mappings and extracts information * about the OSM tags and the ontology classes * This info is used in the vector construction. * * @author imis-nkarag */ public class Mapper { //private static final org.apache.log4j.Logger LOG = org.apache.log4j.Logger.getLogger(Mapper.class); private final HashMap<String, String> mappings; private final HashMap<String, Integer> mappingsWithIDs; private final Map<Integer, String> idsWithMappings; public Mapper() { mappings = new LinkedHashMap<>(); mappingsWithIDs = new HashMap<>(); idsWithMappings = new HashMap<>(); } public void parseFile(InputStream inps) throws FileNotFoundException { Scanner input = new Scanner(inps); //the Map file contains lines of the mappings separated with the symbol "|" //e.g. highway motorway | Motorway //the key will be the string "highway motorway" and the value "Motorway" while (input.hasNext()) { String nextLine = input.nextLine(); String[] splitContent = nextLine.split("\\|", 2); //split current line in two parts, //separated by the "|" symbol String key = splitContent[0]; //this key will be mapped to a class String value = splitContent[1]; //this value is the mapped class key = key.trim(); value = value.trim(); mappings.put(key, value); } constructMappingsWithIDs(); constructIDsWithMappings(); System.out.println("Mappings file parsed successfully!"); //LOG.info("Mappings file parsed successfully!"); } private void constructMappingsWithIDs() { Integer i = 1; //starting ID is 1: SVM multiclass does not accept 0 as a class ID for (String ontologyClass : mappings.values()) { mappingsWithIDs.put(ontologyClass, i); i++; } } public Map<String, Integer> getMappingsWithIDs() { return Collections.unmodifiableMap(mappingsWithIDs); } public Map<String, String> getMappings() { return Collections.unmodifiableMap(mappings); } private void constructIDsWithMappings() { int i = 1; //starting ID is 1: SVM multiclass does not accept 0 as a class ID for (String ontologyClass : mappings.values()) { idsWithMappings.put(i, ontologyClass); i++; } } public Map<Integer, String> getIDsWithMappings() { return Collections.unmodifiableMap(idsWithMappings); } }