Skip to content

Commit

Permalink
Fix for #1077, fail to search Saint.. cities in structured queries
Browse files Browse the repository at this point in the history
  • Loading branch information
Joxit authored and orangejulius committed Feb 28, 2018
1 parent c56336d commit d187e7d
Show file tree
Hide file tree
Showing 2 changed files with 17 additions and 17 deletions.
16 changes: 8 additions & 8 deletions sanitizer/_city_name_standardizer.js
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
const _ = require('lodash');

// matches 'ft', 'mt', 'saint', and 'sainte' on word boundary
const mountSaintFort = /\b([fm]t|sainte?)\b/g;
const mountSaintFort = /\b([fm]t|ste?)\b/g;

const transliterations = {
'mt': 'mount',
'ft': 'fort',
'saint': 'st',
'sainte': 'ste'
'st': 'saint',
'ste': 'sainte'
};

function transliterate(match) {
Expand All @@ -22,15 +22,15 @@ function _sanitize(raw, clean) {

// only try to transliterate if there is a city in parsed_text
if (!_.isEmpty(_.get(clean, 'parsed_text.city'))) {
// eg input: Ft. Saint Louis
// after 1. ft saint louis
// after 2. fort st louis
// after 3. fort st louis
// eg input: Ft. st Louis
// after 1. ft st louis
// after 2. fort saint louis
// after 3. fort saint louis

// 1. remove '.' that could abbreviate ft and mt (makes transliteration regex easier)
const periods_removed = _.toLower(clean.parsed_text.city).replace(/\b(mt|ft)\./g, '$1 ');

// 2. transliterate 'saint'->'st', etc
// 2. transliterate 'st'->'saint', etc
const transliterated = periods_removed.replace(mountSaintFort, transliterate);

// 3. reduce whitespace sequences that can occur when removing periods down to a single space
Expand Down
18 changes: 9 additions & 9 deletions test/unit/sanitizer/_city_name_standardizer.js
Original file line number Diff line number Diff line change
Expand Up @@ -48,15 +48,15 @@ module.exports.tests.text_parser = function(test, common) {

});

test('\'saint\' should be abbreviated to \'st\' wherever it appears in the city', function(t) {
test('\'st\' should be expanded to \'saint\' wherever it appears in the city', function(t) {
const raw = {};

const clean = {
parsed_text: {
query: 'saint query value',
neighbourhood: 'saint neighbourhood value',
borough: 'saint borough value',
city: 'SainT city sAiNt value saInt',
city: 'st city ST value St',
county: 'saint county value',
state: 'saint state value',
postalcode: 'saint postalcode value',
Expand All @@ -69,7 +69,7 @@ module.exports.tests.text_parser = function(test, common) {
query: 'saint query value',
neighbourhood: 'saint neighbourhood value',
borough: 'saint borough value',
city: 'st city st value st',
city: 'saint city saint value saint',
county: 'saint county value',
state: 'saint state value',
postalcode: 'saint postalcode value',
Expand All @@ -86,15 +86,15 @@ module.exports.tests.text_parser = function(test, common) {

});

test('\'sainte\' should be abbreviated to \'ste\' wherever it appears in the city', function(t) {
test('\'ste\' should be expanded to \'sainte\' wherever it appears in the city', function(t) {
const raw = {};

const clean = {
parsed_text: {
query: 'sainte query value',
neighbourhood: 'sainte neighbourhood value',
borough: 'sainte borough value',
city: 'SaintE city sAinTe value saINte',
city: 'ste city STE value StE',
county: 'sainte county value',
state: 'sainte state value',
postalcode: 'sainte postalcode value',
Expand All @@ -107,7 +107,7 @@ module.exports.tests.text_parser = function(test, common) {
query: 'sainte query value',
neighbourhood: 'sainte neighbourhood value',
borough: 'sainte borough value',
city: 'ste city ste value ste',
city: 'sainte city sainte value sainte',
county: 'sainte county value',
state: 'sainte state value',
postalcode: 'sainte postalcode value',
Expand Down Expand Up @@ -200,18 +200,18 @@ module.exports.tests.text_parser = function(test, common) {

});

test('mixture of \'mt\', \'ft\', \'saint\', and \'sainte\' should be expanded/abbreviated', function(t) {
test('mixture of \'mt\', \'ft\', \'st\', and \'st\' should be expanded', function(t) {
const raw = {};

const clean = {
parsed_text: {
city: 'mt. ft saint sainte mt ft.'
city: 'mt. ft st ste mt ft.'
}
};

const expected_clean = {
parsed_text: {
city: 'mount fort st ste mount fort'
city: 'mount fort saint sainte mount fort'
}
};

Expand Down

0 comments on commit d187e7d

Please sign in to comment.