Improve performance and scope of the generic name validation

This commit is contained in:
Quincy Morgan
2019-02-18 10:02:49 -05:00
parent c6d9bee226
commit 2c1955d630

View File

@@ -9,26 +9,38 @@ import { discardNames } from '../../node_modules/name-suggestion-index/config/fi
export function validationGenericName() {
var type = 'generic_name';
// known list of generic names (e.g. "bar")
var discardNamesRegexes = discardNames.map(function(discardName) {
return new RegExp(discardName, 'i');
});
var keysToTestForGenericValues = ['amenity', 'building', 'leisure', 'man_made', 'shop', 'tourism'];
function isGenericName(entity) {
var name = entity.tags.name;
if (!name) return false;
name = name.toLowerCase();
var i, re;
var i, key, val;
// test if the name is just the tag value (e.g. "park")
var keys = ['amenity', 'leisure', 'shop', 'man_made', 'tourism'];
for (i = 0; i < keys.length; i++) {
var val = entity.tags[keys[i]];
if (val && val.replace(/\_/g, ' ').toLowerCase() === name.toLowerCase()) {
return name;
// test if the name is just the key or tag value (e.g. "park")
for (i = 0; i < keysToTestForGenericValues.length; i++) {
key = keysToTestForGenericValues[i];
val = entity.tags[key];
if (val) {
val = val.toLowerCase();
if (key === name ||
val === name ||
key.replace(/\_/g, ' ') === name ||
val.replace(/\_/g, ' ') === name) {
return name;
}
}
}
// test if the name is a generic name (e.g. "pizzaria")
for (i = 0; i < discardNames.length; i++) {
re = new RegExp(discardNames[i], 'i');
if (re.test(name)) {
// test if the name is otherwise generic
for (i = 0; i < discardNamesRegexes.length; i++) {
if (discardNamesRegexes[i].test(name)) {
return name;
}
}