Skip to content

Commit

Permalink
feat(post): add alias for compound street names with abbreviated generic
Browse files Browse the repository at this point in the history
  • Loading branch information
missinglink committed Jan 10, 2022
1 parent 94a7f30 commit 6abb64c
Show file tree
Hide file tree
Showing 3 changed files with 67 additions and 26 deletions.
23 changes: 23 additions & 0 deletions post/_contractions_abbreviated.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
{
"DEU": {
"platz": "pl",
"markt": "mkt",
"straße": "str",
"strasse": "str"
},
"CHE": {
"platz": "pl",
"markt": "mkt",
"straße": "str",
"strasse": "str"
},
"AUT": {
"platz": "pl",
"markt": "mkt",
"straße": "str",
"strasse": "str"
},
"NLD": {
"straat": "str"
}
}
41 changes: 21 additions & 20 deletions post/seperable_street_names.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ const _ = require('lodash');
const TARGET_LAYERS = [ 'street', 'address', 'intersection' ];
const expansions = require('./_expansions.json');
const contractions = require('./_contractions.json');
const contractions_abbreviated = require('./_contractions_abbreviated.json');

function expand(str, mapping) {
let tokens = str.split(' ');
Expand Down Expand Up @@ -38,61 +39,55 @@ function contract(str, mapping) {
function expandAllFields(doc, mapping){

// index expanded version of default name
const name = doc.getName('default');
if (_.isString(name) && !_.isEmpty(name)) {
_.castArray(_.get(doc.name, 'default', [])).forEach(name => {
const expanded = expand(name, mapping);
if (_.isString(expanded) && !_.isEmpty(expanded) && (name !== expanded)) {
doc.setNameAlias('default', expanded);
}
}
});

// index expanded version of street name
const street = doc.getAddress('street');
if (_.isString(street) && !_.isEmpty(street)) {
_.castArray(_.get(doc.address_parts, 'street', [])).forEach(street => {
const expanded = expand(street, mapping);
if (_.isString(expanded) && !_.isEmpty(expanded) && (street !== expanded)) {
doc.setAddressAlias('street', expanded);
}
}
});

// index expanded version of cross_street name
const cross_street = doc.getAddress('cross_street');
if (_.isString(cross_street) && !_.isEmpty(cross_street)) {
_.castArray(_.get(doc.address_parts, 'cross_street', [])).forEach(cross_street => {
const expanded = expand(cross_street, mapping);
if (_.isString(expanded) && !_.isEmpty(expanded) && (cross_street !== expanded)) {
doc.setAddressAlias('cross_street', expanded);
}
}
});
}

function contractAllFields(doc, mapping) {

// index expanded version of default name
const name = doc.getName('default');
if (_.isString(name) && !_.isEmpty(name)) {
_.castArray(_.get(doc.name, 'default', [])).forEach(name => {
const contracted = contract(name, mapping);
if (_.isString(contracted) && !_.isEmpty(contracted) && (name !== contracted)) {
doc.setNameAlias('default', contracted);
}
}
});

// index contracted version of street name
const street = doc.getAddress('street');
if (_.isString(street) && !_.isEmpty(street)) {
_.castArray(_.get(doc.address_parts, 'street', [])).forEach(street => {
const contracted = contract(street, mapping);
if (_.isString(contracted) && !_.isEmpty(contracted) && (street !== contracted)) {
doc.setAddressAlias('street', contracted);
}
}
});

// index contracted version of cross_street name
const cross_street = doc.getAddress('cross_street');
if (_.isString(cross_street) && !_.isEmpty(cross_street)) {
_.castArray(_.get(doc.address_parts, 'cross_street', [])).forEach(cross_street => {
const contracted = contract(cross_street, mapping);
if (_.isString(contracted) && !_.isEmpty(contracted) && (cross_street !== contracted)) {
doc.setAddressAlias('cross_street', contracted);
}
}
});
}

function post(doc) {
Expand All @@ -101,7 +96,7 @@ function post(doc) {
if( !TARGET_LAYERS.includes( doc.getLayer() ) ) { return; }

// detect document country code
let docCountryCode = _.get(doc, 'parent.country_a[0]');
let docCountryCode = _.get(doc, 'parent.country_a[0]') || _.get(doc, 'parent.dependency_a[0]');
if( !_.isString(docCountryCode) || docCountryCode.length !== 3 ) { return; }

// expansions
Expand All @@ -115,6 +110,12 @@ function post(doc) {
if( _.isObject( mapping_contractions ) ) {
contractAllFields(doc, mapping_contractions);
}

// abbreviated contractions
let mapping_contractions_abbr = contractions_abbreviated[docCountryCode.toUpperCase()];
if (_.isObject(mapping_contractions_abbr)) {
contractAllFields(doc, mapping_contractions_abbr);
}
}

module.exports = {
Expand All @@ -125,4 +126,4 @@ module.exports = {
contractions: contractions,
contract: contract,
contractAllFields: contractAllFields
};
};
29 changes: 23 additions & 6 deletions test/post/seperable_street_names.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ var ssn = require('../../post/seperable_street_names');
module.exports.tests = {};

module.exports.tests.expand = function (test) {
test('expand DEU', function (t) {
test('expand DEU', function (t) {
t.equals('Example Weg', ssn.expand('Examplew.', ssn.expansions.DEU) );
t.equals('Example Weg', ssn.expand('Exampleweg', ssn.expansions.DEU) );
t.equals('Example Quelle', ssn.expand('Exampleq.', ssn.expansions.DEU) );
Expand Down Expand Up @@ -180,17 +180,23 @@ module.exports.tests.functional = function (test) {

// name aliases defined
t.deepEqual(doc.getNameAliases('default'), [
'Example Straße & Cross Platz'
'Example Straße & Cross Platz',
'Examplestraße & Crossplatz',
'Examplestr & Crosspl'
]);

// street aliases defined
t.deepEqual(doc.getAddressAliases('street'), [
'Example Straße',
'Examplestraße',
'Examplestr'
]);

// cross_street aliases defined
t.deepEqual(doc.getAddressAliases('cross_street'), [
'Cross Platz',
'Crossplatz',
'Crosspl'
]);

t.end();
Expand All @@ -208,17 +214,20 @@ module.exports.tests.functional = function (test) {

// name aliases defined
t.deepEqual(doc.getNameAliases('default'), [
'Examplestraße & Crossplatz'
'Examplestraße & Crossplatz',
'Examplestr & Crosspl'
]);

// street aliases defined
t.deepEqual(doc.getAddressAliases('street'), [
'Examplestraße',
'Examplestr'
]);

// cross_street aliases defined
t.deepEqual(doc.getAddressAliases('cross_street'), [
'Crossplatz',
'Crosspl'
]);

t.end();
Expand All @@ -235,12 +244,14 @@ module.exports.tests.functional = function (test) {

// name aliases defined
t.deepEqual(doc.getNameAliases('default'), [
'Eberswalderstraße'
'Eberswalderstraße',
'Eberswalderstr'
]);

// street aliases defined
t.deepEqual(doc.getAddressAliases('street'), [
'Eberswalderstraße'
'Eberswalderstraße',
'Eberswalderstr'
]);

t.end();
Expand All @@ -259,17 +270,23 @@ module.exports.tests.functional = function (test) {
// name aliases defined
t.deepEqual(doc.getNameAliases('default'), [
'Example Straße & Cross Platz',
'Examplestraße & Crossplatz'
'Examplestraße & Crossplatz',
'Examplestraße & Crossplatz',
'Examplestr & Crossplatz',
'Examplestr & Crosspl'
]);

// street aliases defined
t.deepEqual(doc.getAddressAliases('street'), [
'Examplestraße',
'Examplestr'
]);

// cross_street aliases defined
t.deepEqual(doc.getAddressAliases('cross_street'), [
'Cross Platz',
'Crossplatz',
'Crosspl'
]);

t.end();
Expand Down

0 comments on commit 6abb64c

Please sign in to comment.