package com.bericotech.clavin.resolver; import com.bericotech.clavin.ClavinException; import com.bericotech.clavin.extractor.LocationOccurrence; import com.bericotech.clavin.gazetteer.query.LuceneGazetteer; import java.io.File; import java.io.IOException; import java.util.List; import org.apache.lucene.queryparser.classic.ParseException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /*##################################################################### * * CLAVIN (Cartographic Location And Vicinity INdexer) * --------------------------------------------------- * * Copyright (C) 2012-2013 Berico Technologies * http://clavin.bericotechnologies.com * * ==================================================================== * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or * implied. See the License for the specific language governing * permissions and limitations under the License. * * ==================================================================== * * LuceneLocationResolver.java * *###################################################################*/ /** * Resolves location names into GeoName objects. * * Takes location names extracted from unstructured text documents by * {@link com.bericotech.clavin.extractor.LocationExtractor} and resolves them into the appropriate * geographic entities (as intended by the document's author based on * context) by finding the best match in a gazetteer. * * @deprecated 2.0.0 Use {@link ClavinLocationResolver} */ @Deprecated public class LuceneLocationResolver implements LocationResolver { public final static Logger logger = LoggerFactory.getLogger(LuceneLocationResolver.class); private final ClavinLocationResolver delegate; // maximum number of matches to be fetched from Lucene index // (i.e., search depth) -- use a value of 1 to simply retrieve the // matching geo entity having the highest population private int maxHitDepth; // maximum number of adjacent location name to consider during // heuristic matching (i.e., search breadth) -- use a value of 1 to // turn off context-based heuristics private int maxContextWindow; /** * Builds a {@link LuceneLocationResolver} by loading a pre-built Lucene * index from disk and setting configuration parameters for * resolving location names to GeoName objects. * * @param indexDir Lucene index directory to be loaded * @param maxHitDepth number of candidate matches to consider * @param maxContextWindow how much context to consider when resolving * @throws IOException * @throws ParseException * @deprecated 2.0.0 Use {@link ClavinLocationResolver} */ @Deprecated public LuceneLocationResolver(File indexDir, int maxHitDepth, int maxContextWindow) throws IOException, ParseException { logger.warn("LuceneLocationResolver is deprecated. Use ClavinLocationResolver."); try { delegate = new ClavinLocationResolver(new LuceneGazetteer(indexDir)); } catch (ClavinException ce) { Throwable t = ce.getCause(); if (t instanceof ParseException) { throw (ParseException)t; } else if (t instanceof IOException) { throw (IOException)t; } else { throw new IllegalStateException("Error initializing LuceneLocationResolver.", ce); } } } /** * Resolves the supplied list of location names into * {@link ResolvedLocation}s containing {@link com.bericotech.clavin.gazetteer.GeoName} objects. * * Calls {@link com.bericotech.clavin.gazetteer.query.Gazetteer#getClosestLocations} on * each location name to find all possible matches, then uses * heuristics to select the best match for each by calling * {@link ClavinLocationResolver#pickBestCandidates}. * * @param locations list of location names to be resolved * @param fuzzy switch for turning on/off fuzzy matching * @return list of {@link ResolvedLocation} objects * @throws ParseException * @throws IOException * @deprecated 2.0.0 Use {@link ClavinLocationResolver#resolveLocations(java.util.List, boolean)} or * {@link ClavinLocationResolver#resolveLocations(java.util.List, int, int, boolean)} **/ @Override @Deprecated public List<ResolvedLocation> resolveLocations(List<LocationOccurrence> locations, boolean fuzzy) throws IOException, ParseException { logger.warn("LuceneLocationResolver is deprecated. Use ClavinLocationResolver."); try { return delegate.resolveLocations(locations, maxHitDepth, maxContextWindow, fuzzy); } catch (ClavinException ce) { Throwable t = ce.getCause(); if (t instanceof ParseException) { throw (ParseException)t; } else if (t instanceof IOException) { throw (IOException)t; } else { throw new IllegalStateException("Error resolving locations.", ce); } } } }