function buildGraph(quotations) {
const nodes = _.chain(quotations)
.flatMap((quote) => quote.addressees.concat([quote.speaker]))
.uniq()
.map((name) => ({ id: charMap[name] }))
.sortBy((node) => node.id)
.value();
const links = _.chain(quotations)
.flatMap((quote) =>
quote.addressees.map((a) => ({
target: charMap[a],
source: charMap[quote.speaker],
value: 1
}))
)
.groupBy((edge) => [edge.source, edge.target].sort().join("-"))
.entries()
.map(([key, items]) => ({
source: items[0].source,
target: items[0].target,
value: items.length
}))
.sortBy((edge) => edge.source)
.value();
return { nodes, links };
}