From 051dac127b87a06a09f80fb67bc9d330a4a3a540 Mon Sep 17 00:00:00 2001 From: Konstantin Mamalakis Date: Tue, 6 Mar 2018 00:23:25 +0200 Subject: [PATCH] Match aliases with only one word --- lib/ofac/matching.js | 6 +++++- lib/ofac/parsing.js | 4 ++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/lib/ofac/matching.js b/lib/ofac/matching.js index 5cf87d66..e00de128 100644 --- a/lib/ofac/matching.js +++ b/lib/ofac/matching.js @@ -66,12 +66,16 @@ function match (structs, candidate, threshold) { )(wordValues) // At least two name-parts must match per alias + const adequateMatch = ([aliasId, count]) => { + const alias = structs.aliasesMap.get(aliasId) + return count >= Math.min(2, alias.words.length) + } const aliasIdsFromNamePart = _.flow( _.uniqWith(_.isEqual), _.map(_.get('aliasId')), _.countBy(_.identity), _.toPairs, - _.filter(_.flow(_.last, _.lte(2))), + _.filter(adequateMatch), _.map(_.first) )([...phoneticMatches, ...stringMatches]) diff --git a/lib/ofac/parsing.js b/lib/ofac/parsing.js index 7c712637..b2f410a4 100644 --- a/lib/ofac/parsing.js +++ b/lib/ofac/parsing.js @@ -207,6 +207,9 @@ function parse (sources) { entries => new Map(entries) )(individuals) + const makeEntries = (individualId, alias) => [alias.id, alias] + const aliasesMap = new Map(mapAliases(makeEntries, individuals)) + const getIdPairs = (individualId, alias) => [alias.id, individualId] const idPairs = mapAliases(getIdPairs, individuals) const aliasToIndividual = new Map(idPairs) @@ -217,6 +220,7 @@ function parse (sources) { return { individuals, individualsMap, + aliasesMap, aliasToIndividual, phoneticMap, wordList