Metching algorithm
This commit is contained in:
parent
2f8c798304
commit
1d0aff07fe
2 changed files with 97 additions and 91 deletions
|
|
@ -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
|
||||
}
|
||||
}
|
||||
)
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue