@natlibfi/melinda-record-match-validator
Version:
Validates if two records matched by melinda-record-matching can be merged and sets merge priority
43 lines (42 loc) • 1.72 kB
JavaScript
import createDebugLogger from "debug";
import { hasFields, getSubfield, getSubfields, removeExtraSpaces, stripPunc } from "./collectUtils.js";
const debug = createDebugLogger("@natlibfi/melinda-record-match-validator:title");
const debugData = debug.extend("data");
export function getAllTitleFeatures(record) {
return {
titleFeatures: getTitleFeatures(record),
seriesFeatures: getSeriesFeatures(record),
f946Features: get946Features(record)
};
}
export function getTitleFeatures(record) {
const [f245] = hasFields("245", record, titleFieldToJSON);
debugData("Field 245 info: %o", f245);
return f245;
}
export function get946Features(record) {
const f946Data = hasFields("946", record, titleFieldToJSON);
debugData("Field 946 info: %o", JSON.stringify(f946Data));
return f946Data;
}
function titleFieldToJSON(field) {
const title = cleanValue(getSubfield(field, "a"));
const remainderOfTitle = cleanValue(getSubfield(field, "b"));
const numbersOfPartInSectionOfAWork = getSubfields(field, "n").map((sf) => cleanValue(sf));
const namesOfPartInSectionOfAWork = getSubfields(field, "p").map((sf) => cleanValue(sf));
return { title, remainderOfTitle, numbersOfPartInSectionOfAWork, namesOfPartInSectionOfAWork };
}
export function getSeriesFeatures(record) {
const fields490 = record.get("490");
return fields490.map((f) => f490ToJSON(f));
return f490Data;
function f490ToJSON(field) {
const seriesTitle = cleanValue(getSubfield(field, "a"));
const seriesNumber = cleanValue(getSubfield(field, "v"));
return { seriesTitle, seriesNumber };
}
}
function cleanValue(value) {
return removeExtraSpaces(stripPunc(value));
}
//# sourceMappingURL=collectTitle.js.map