--- dao/DaoAdresseService/src/main/java/dk/daoas/daoadresseservice/AliasGenerator.java 2016/01/14 13:28:08 2813 +++ dao/DaoAdresseService/src/main/java/dk/daoas/daoadresseservice/AliasGenerator.java 2016/01/19 10:02:51 2821 @@ -1,9 +1,13 @@ package dk.daoas.daoadresseservice; import java.util.ArrayList; +import java.util.HashMap; import java.util.HashSet; +import java.util.Map; import java.util.Set; +import dk.daoas.daoadresseservice.util.DeduplicateHelper; + public class AliasGenerator { static class Replacement { @@ -16,7 +20,11 @@ } } - ArrayList replacements = new ArrayList(); + private ArrayList replacements = new ArrayList(); + private Map> aliasCache = new HashMap>(8192); + + DeduplicateHelper aliasHelper = new DeduplicateHelper(400000); // Indeholder pt 379664 entries + public AliasGenerator() { replacements.add( new Replacement("alle", "allé") ); @@ -176,14 +184,47 @@ replacements.add( new Replacement("kronborg", "krbg") ); //Krbg ladegårdsvej, 3000 replacements.add( new Replacement("krbg", "kronborg") ); - System.out.println("AliasGenetator, loaded replacements: " + replacements.size() ); + System.out.println("AliasGenerator, loaded replacements: " + replacements.size() ); } + public void clear() { + aliasCache.clear(); + aliasHelper.clear(); + } public Set findVejAliaser(String vejnavn) { vejnavn = vejnavn.toLowerCase(); + + Set aliasSet = aliasCache.get(vejnavn); + if (aliasSet == null) { + aliasSet = genererVejAliaser(vejnavn); + + aliasSet = vaskAliaser( aliasSet ); + + aliasCache.put(vejnavn, aliasSet); + } + + return aliasSet; + + } + + private Set vaskAliaser(Set input) { + HashSet output = new HashSet( input.size() ); + + for (String alias : input) { + String vasketAlias = AddressUtils.vaskVejnavn(alias); + vasketAlias = aliasHelper.getInstance(vasketAlias); + output.add(vasketAlias); + } + + return output; + } + + + private Set genererVejAliaser(String vejnavn) { + HashSet aliasSet = new HashSet(); aliasSet.add(vejnavn);