All Downloads are FREE. Search and download functionalities are using the official Maven repository.

eu.fbk.twm.utils.AirpediaOntology Maven / Gradle / Ivy

The newest version!
package eu.fbk.twm.utils;

import org.apache.commons.cli.CommandLine;
import org.apache.commons.cli.OptionBuilder;
import org.apache.log4j.Logger;
import org.apache.log4j.PropertyConfigurator;

import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * Created with IntelliJ IDEA.
 * User: alessio
 * Date: 04/02/14
 * Time: 16:46
 * To change this template use File | Settings | File Templates.
 */

public class AirpediaOntology extends DBpediaOntology {

	static Logger logger = Logger.getLogger(AirpediaOntology.class.getName());
	Pattern startsWithSpaces = Pattern.compile("^(\\s*)[^\\s]");

	public AirpediaOntology(String ontologyFile) {
		super(ontologyFile);
		addenda(null);
	}

	public AirpediaOntology(String ontologyFile, String addendaFile) {
		super(ontologyFile);
		addenda(addendaFile);
	}

	private void addenda(String addendaFile) {
		nodes.add(new DBpediaOntologyNode("SportsSeason", null));

		if (addendaFile != null) {
			try {
				BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(addendaFile), "utf-8"));
				String line;

				int level = 0;
				ArrayList lastClasses = new ArrayList<>();

				while ((line = reader.readLine()) != null) {

					if (line.trim().startsWith("-")) {
						line = line.trim().substring(1).trim();

						logger.trace(String.format("Removing %s", line));
						DBpediaOntologyNode node = getNodeByName(line);
						if (node != null) {
							removeNode(node);
						}
						continue;
					}

					Matcher m = startsWithSpaces.matcher(line);
					if (m.find()) {
						String spaces = m.group(1);
						int n = spaces.length();
						for (int i = 0; i < spaces.length(); i++) {
							char c = spaces.charAt(i);
							if (c == '\t') {
								n += 3;
							}
						}

						line = line.trim();

						level = n / 4;
						for (int i = lastClasses.size(); i <= level; i++) {
							lastClasses.add(null);
						}
						lastClasses.set(level, line);
						String superClass = null;
						if (level > 0) {
							superClass = lastClasses.get(level - 1);
						}

						logger.trace(String.format("%s [%d] [%s]", line, level, superClass));

						DBpediaOntologyNode node = getNodeByName(line);
						if (node != null) {
							node.superClass = superClass;
						}
						else {
							nodes.add(new DBpediaOntologyNode(line, superClass));
						}
					}
				}
				reader.close();
			} catch (Exception e) {
				e.printStackTrace();
				logger.error(e.getMessage());
			}
		}

		updateTree();
	}

	public static void main(String[] args) {
		CommandLineWithLogger commandLineWithLogger = new CommandLineWithLogger();

		commandLineWithLogger.addOption(OptionBuilder.withDescription("Ontology file").isRequired().hasArg().withArgName("file").withLongOpt("ontology").create("o"));
		commandLineWithLogger.addOption(OptionBuilder.withDescription("Addenda file").hasArg().withArgName("file").withLongOpt("addenda").create("a"));

		CommandLine commandLine = null;
		try {
			commandLine = commandLineWithLogger.getCommandLine(args);
			PropertyConfigurator.configure(commandLineWithLogger.getLoggerProps());
		} catch (Exception e) {
			System.exit(1);
		}

		String ontologyFile = commandLine.getOptionValue("ontology");
		String addendaFile = commandLine.getOptionValue("addenda");

		AirpediaOntology ontology = new AirpediaOntology(ontologyFile, addendaFile);
		System.out.println(ontology);
	}
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy