Metching algorithm

This commit is contained in:
Konstantin Mamalakis 2018-03-01 19:19:04 +02:00 committed by Josh Harvey
parent 2f8c798304
commit 1d0aff07fe
2 changed files with 97 additions and 91 deletions

View file

@ -158,36 +158,22 @@ function promiseParseDocument (source) {
const readdir = util.promisify(fs.readdir)
// const {id, individual, words} = result
//
// const individualEntry = [id, individual]
// individuals.push(individualEntry)
//
// const phoneticWithWord = pair => {
// const [word, phonetics] = pair
// const makeEntry = phonetic => ({word, phonetic, individualId: id})
// return _.map(makeEntry, phonetics)
// }
//
// const phoneticEntries = _.flatten(_.map(phoneticWithWord, words))
// allPhonetics.push(...phoneticEntries)
const mapAliases = _.curry((iteratee, individuals) => {
const foreachIndividual = individual => {
const mapIndividual = individual => {
const {id, aliases} = individual
return _.map(alias => iteratee(id, alias), aliases)
}
return _.flatten(_.map(foreachIndividual, individuals))
return _.flatMap(mapIndividual, individuals)
})
const getPhoneticEntries = (individualId, alias) => {
const pairPhoneticsWithWords = word => {
const pairPhoneticsWithValues = word => {
const {value, phonetics} = word
const makeEntry = phonetic => ({value, phonetic, aliasId: alias.id})
return _.map(makeEntry, phonetics)
}
return _.flatten(_.map(pairPhoneticsWithWords, alias.words))
return _.flatMap(pairPhoneticsWithValues, alias.words)
}
const producePhoneticMap = _.flow(
@ -219,6 +205,13 @@ const combineAndDedupe = _.flow(
_.compact,
_.uniqBy(_.get('id')),
individuals => {
const individualsMap = _.flow(
_.groupBy(_.get('id')),
_.mapValues(_.first),
_.toPairs,
entries => new Map(entries)
)(individuals)
const getIdPairs = (individualId, alias) => [alias.id, individualId]
const idPairs = mapAliases(getIdPairs, individuals)
const aliasToIndividual = new Map(idPairs)
@ -226,7 +219,13 @@ const combineAndDedupe = _.flow(
const phoneticMap = producePhoneticMap(individuals)
const wordList = produceWordList(individuals)
return {individuals, aliasToIndividual, phoneticMap, wordList}
return {
individuals,
individualsMap,
aliasToIndividual,
phoneticMap,
wordList
}
}
)