/[projects]/dao/DaoAdresseService/src/main/java/dk/daoas/daoadresseservice/AliasGenerator.java
ViewVC logotype

Contents of /dao/DaoAdresseService/src/main/java/dk/daoas/daoadresseservice/AliasGenerator.java

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2814 - (show annotations) (download)
Thu Jan 14 17:13:55 2016 UTC (8 years, 4 months ago) by torben
File size: 9010 byte(s)
Increase performance when building structures
1 package dk.daoas.daoadresseservice;
2
3 import java.util.ArrayList;
4 import java.util.HashMap;
5 import java.util.HashSet;
6 import java.util.Map;
7 import java.util.Set;
8
9 public class AliasGenerator {
10
11 static class Replacement {
12 public String search;
13 public String replace;
14
15 public Replacement(String search, String replace) {
16 this.search = search;
17 this.replace = replace;
18 }
19 }
20
21 private ArrayList<Replacement> replacements = new ArrayList<Replacement>();
22 private Map<String, Set<String>> aliasCache = new HashMap<String, Set<String>>(8192);
23
24
25 public AliasGenerator() {
26 replacements.add( new Replacement("alle", "allé") );
27 replacements.add( new Replacement("allé", "alle") );
28
29 // forkortelser
30 replacements.add( new Replacement("dronningens", "dr") );
31 replacements.add( new Replacement("dr.", "dronningens") );
32 replacements.add( new Replacement("dr ", "dronningens") );
33
34 replacements.add( new Replacement("dronning", "dr") );
35 replacements.add( new Replacement("dr.", "dronning") );
36 replacements.add( new Replacement("dr ", "dronning") );
37
38 replacements.add( new Replacement("kng", "kongen") );
39 replacements.add( new Replacement("kongen", "kng") );
40
41 replacements.add( new Replacement("kvt", "kvarter") );
42 replacements.add( new Replacement("kvarter", "kvt") );
43
44 replacements.add( new Replacement("gl", "gammel") );
45 replacements.add( new Replacement("gammel", "gl") );
46
47 replacements.add( new Replacement("gl", "gamle") );
48 replacements.add( new Replacement("gamle", "gl") );
49
50 replacements.add( new Replacement("lille", "ll") );
51 replacements.add( new Replacement("ll ", "lille") );
52 replacements.add( new Replacement("ll.", "lille") );
53
54 replacements.add( new Replacement("store", "st") );
55 replacements.add( new Replacement("st ", "store") );
56 replacements.add( new Replacement("st.", "store") );
57
58 replacements.add( new Replacement("søndre", "sdr") );
59 replacements.add( new Replacement("sdr", "søndre") );
60 replacements.add( new Replacement("sønder", "sdr") );
61 replacements.add( new Replacement("sdr", "sønder") );
62
63
64 replacements.add( new Replacement("nørre", "nr") );
65 replacements.add( new Replacement("nr", "nørre") );
66
67 replacements.add( new Replacement("nordre", "ndr") );
68 replacements.add( new Replacement("ndr", "nordre") );
69
70
71 replacements.add( new Replacement("vestre", "vester") );
72 replacements.add( new Replacement("vester", "vestre") );
73
74 replacements.add( new Replacement("søndre", "sønder") );
75 replacements.add( new Replacement("sønder", "søndre") );
76
77 replacements.add( new Replacement("østre", "øster") );
78 replacements.add( new Replacement("øster", "østre") );
79
80 replacements.add( new Replacement("nordre", "nørre") );
81 replacements.add( new Replacement("nørre", "nordre") );
82
83 replacements.add( new Replacement("borgmester", "borgm") );
84 replacements.add( new Replacement("borgm", "borgmester") );
85
86
87 replacements.add( new Replacement("sankt", "skt") );
88 replacements.add( new Replacement("sankt", "sct") );
89 replacements.add( new Replacement("skt", "sankt") );
90
91 replacements.add( new Replacement("skt", "sct") );
92 replacements.add( new Replacement("sct", "skt") );
93
94
95
96 // fornavn forkortelser
97 replacements.add( new Replacement("john", "j") );
98 replacements.add( new Replacement("thomas", "th") );
99 replacements.add( new Replacement("thorvald", "th") );
100 replacements.add( new Replacement("frederik", "fr") );
101 replacements.add( new Replacement("frederiks", "fr") );
102
103
104 replacements.add( new Replacement("christian", "chr") );
105 replacements.add( new Replacement("christians", "chr") );
106 replacements.add( new Replacement("kristian", "kr") );
107 replacements.add( new Replacement("kristians", "kr") );
108
109 replacements.add( new Replacement("mylius", "myl") );
110 replacements.add( new Replacement("myl", "mylius") );
111
112 replacements.add( new Replacement("ludvig", "ludv") );
113 replacements.add( new Replacement("ludv", "ludvig") );
114
115
116 // alternative stavninger
117 replacements.add( new Replacement("peder", "peter") );
118 replacements.add( new Replacement("peter", "peder") );
119
120
121
122 // Romertal
123 replacements.add( new Replacement("1", "i") );
124 replacements.add( new Replacement("i", "1") );
125
126 replacements.add( new Replacement("2", "ii") );
127 replacements.add( new Replacement("ii", "2") );
128
129 replacements.add( new Replacement("3", "iii") );
130 replacements.add( new Replacement("iii", "3") );
131
132 replacements.add( new Replacement("4", "iv") );
133 replacements.add( new Replacement("iv", "4") );
134
135 replacements.add( new Replacement("5", "v") );
136 replacements.add( new Replacement("v", "5") );
137
138 replacements.add( new Replacement("6", "vi") );
139 replacements.add( new Replacement("vi", "6") );
140
141 replacements.add( new Replacement("7", "vii") );
142 replacements.add( new Replacement("vii", "7") );
143
144 replacements.add( new Replacement("8", "viii") );
145 replacements.add( new Replacement("viii", "8") );
146
147 replacements.add( new Replacement("9", "ix") );
148 replacements.add( new Replacement("ix", "9") );
149
150 replacements.add( new Replacement("10", "x") );
151 replacements.add( new Replacement("x", "10") );
152
153
154 //alternative måder at stave vej/gade/alle
155 replacements.add( new Replacement("vej", "ve") );
156 replacements.add( new Replacement("vej", "vj") );
157 replacements.add( new Replacement("vej", "v") );
158 replacements.add( new Replacement("vej", "vejen") );
159 replacements.add( new Replacement("vejen", "vej") );
160
161 replacements.add( new Replacement("v", "vej") );//Vi kan have vejnavne i DB der bare slutter på v istedet for vej
162
163 replacements.add( new Replacement("alle", "all") );
164 replacements.add( new Replacement("allé", "all") );
165 replacements.add( new Replacement("alle", "allú") ); //Fundet i logs.hentruteinfo
166 replacements.add( new Replacement("allé", "allú") );
167
168 replacements.add( new Replacement("gade", "gaed") ); //Fundet i logs.hentruteinfo
169 replacements.add( new Replacement("gade", "gde") );
170
171 replacements.add( new Replacement("plads", "pl") );
172 replacements.add( new Replacement("vænget", "vænge") );
173
174 replacements.add( new Replacement("boulevard", "blvd") );
175 replacements.add( new Replacement("blvd", "boulevard") );
176
177 replacements.add( new Replacement("boulevard", "boule") );
178 replacements.add( new Replacement("boule", "boulevard") );
179
180 replacements.add( new Replacement("kronborg", "krbg") ); //Krbg ladegårdsvej, 3000
181 replacements.add( new Replacement("krbg", "kronborg") );
182
183 System.out.println("AliasGenetator, loaded replacements: " + replacements.size() );
184
185 }
186
187
188 public Set<String> findVejAliaser(String vejnavn) {
189 vejnavn = vejnavn.toLowerCase();
190
191 Set<String> aliasSet = aliasCache.get(vejnavn);
192 if (aliasSet == null) {
193 aliasSet = genererVejAliaser(vejnavn);
194 aliasCache.put(vejnavn, aliasSet);
195 }
196
197 return aliasSet;
198
199 }
200
201
202 private Set<String> genererVejAliaser(String vejnavn) {
203
204 HashSet<String> aliasSet = new HashSet<String>();
205 aliasSet.add(vejnavn);
206
207 for (Replacement repl : replacements) {
208 if (vejnavn.indexOf(repl.search) >= 0) {
209 aliasSet.add( vejnavn.replace(repl.search, repl.replace) );
210 }
211
212 }
213
214
215
216 // Opbyg æøå varianter over alle fundne aliaser
217
218 HashSet<String> variants = new HashSet<String>( aliasSet );//brug Copy-Constructor
219
220 for (String vVejnavn : variants) {
221 // danske tegn 1
222 aliasSet.add( vVejnavn.replace("æ", "ae") );
223 aliasSet.add( vVejnavn.replace("ø", "oe") );
224 aliasSet.add( vVejnavn.replace("å", "aa") );
225 aliasSet.add( vVejnavn.replace("ae", "æ") );
226 aliasSet.add( vVejnavn.replace("oe", "ø") );
227 aliasSet.add( vVejnavn.replace("aa", "å") );
228
229 //danske tegn 2
230 aliasSet.add( vVejnavn.replace("æ", "ae").replace("ø", "oe") );
231 aliasSet.add( vVejnavn.replace("æ", "ae").replace("å", "aa") );
232 aliasSet.add( vVejnavn.replace("ø", "oe").replace("å", "aa") );
233 aliasSet.add( vVejnavn.replace("ae", "æ").replace("oe","ø") );
234 aliasSet.add( vVejnavn.replace("ae", "æ").replace("aa","å") );
235 aliasSet.add( vVejnavn.replace("oe", "ø").replace("aa", "å") );
236
237 //danske tegn 3
238 aliasSet.add( vVejnavn.replace("æ", "ae").replace("ø", "oe").replace("å", "aa") );
239 aliasSet.add( vVejnavn.replace("ae", "æ").replace("oe", "ø").replace("aa", "å") );
240
241
242 //udenlandsketegn
243 aliasSet.add( vVejnavn.replace("u", "ü") );
244 aliasSet.add( vVejnavn.replace("ü", "u") );
245
246 aliasSet.add( vVejnavn.replace("ä", "æ") );
247 aliasSet.add( vVejnavn.replace("æ", "ä") );
248
249 aliasSet.add( vVejnavn.replace("ö", "ø") );
250 aliasSet.add( vVejnavn.replace("ø", "ö") );
251 }
252
253 return aliasSet;
254 }
255 }

  ViewVC Help
Powered by ViewVC 1.1.20