in geoentitylinker-addon/src/main/java/opennlp/addons/geoentitylinker/AdminBoundaryContextGenerator.java [149:207]
private AdminBoundaryContext process(String text) {
try {
reset();
Map<String, Set<Integer>> countryhitMap = regexfind(text, countryMap, countryHitSet, "country");
if (!countryhitMap.isEmpty()) {
for (String cc : countryhitMap.keySet()) {
Map<String, String> provsForCc = provMap.get(cc);
if (provsForCc != null) {
provMentions.putAll(regexfind(text, provsForCc, provHits, "province"));
if (provMentions != null) {
for (String prov : provMentions.keySet()) {
Map<String, String> get = countyMap.get(prov);
if (get != null) {
countyMentions.putAll(regexfind(text, get, countyHits, "province"));
}
}
}
}
}
} else {
for (Map<String, String> provsForCc : provMap.values()) {
if (provsForCc != null) {
provMentions = regexfind(text, provsForCc, provHits, "province");
if (provMentions != null) {
for (String prov : provMentions.keySet()) {
//fake a country hit based on a province hit... this gets fuzzy
String cc = prov.split("\\.")[0];
if (!countryhitMap.containsKey(cc)) {
countryhitMap.put(cc, provMentions.get(prov));
countryHitSet.add(cc);
} else {
countryhitMap.get(cc).addAll(provMentions.get(prov));
}
Map<String, String> get = countyMap.get(prov);
if (get != null) {
countyMentions = regexfind(text, get, countyHits, "oounty");
}
}
}
}
}
}
Map<String, String> countryRefMap = new HashMap<>();
for (String c : countryHitSet) {
String countryName = countryMap.get(c);
if (countryName != null) {
countryRefMap.put(c, countryName);
}
}
return new AdminBoundaryContext(countryhitMap, provMentions, countyMentions, countryHitSet, provHits, countyHits,
countryRefMap, provMap, countyMap, nameCodesMap, countryRegexMap, provinceRegexMap, countyRegexMap);
} catch (Exception e) {
LOG.error(e.getLocalizedMessage(), e);
}
return null;
}