Match aliases with only one word

This commit is contained in:
Konstantin Mamalakis 2018-03-06 00:23:25 +02:00 committed by Josh Harvey
parent 9d609e6461
commit 051dac127b
2 changed files with 9 additions and 1 deletions

View file

@ -66,12 +66,16 @@ function match (structs, candidate, threshold) {
)(wordValues) )(wordValues)
// At least two name-parts must match per alias // 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( const aliasIdsFromNamePart = _.flow(
_.uniqWith(_.isEqual), _.uniqWith(_.isEqual),
_.map(_.get('aliasId')), _.map(_.get('aliasId')),
_.countBy(_.identity), _.countBy(_.identity),
_.toPairs, _.toPairs,
_.filter(_.flow(_.last, _.lte(2))), _.filter(adequateMatch),
_.map(_.first) _.map(_.first)
)([...phoneticMatches, ...stringMatches]) )([...phoneticMatches, ...stringMatches])

View file

@ -207,6 +207,9 @@ function parse (sources) {
entries => new Map(entries) entries => new Map(entries)
)(individuals) )(individuals)
const makeEntries = (individualId, alias) => [alias.id, alias]
const aliasesMap = new Map(mapAliases(makeEntries, individuals))
const getIdPairs = (individualId, alias) => [alias.id, individualId] const getIdPairs = (individualId, alias) => [alias.id, individualId]
const idPairs = mapAliases(getIdPairs, individuals) const idPairs = mapAliases(getIdPairs, individuals)
const aliasToIndividual = new Map(idPairs) const aliasToIndividual = new Map(idPairs)
@ -217,6 +220,7 @@ function parse (sources) {
return { return {
individuals, individuals,
individualsMap, individualsMap,
aliasesMap,
aliasToIndividual, aliasToIndividual,
phoneticMap, phoneticMap,
wordList wordList