@natlibfi/melinda-record-matching 5.0.0-alpha.1 → 5.0.0-alpha.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.github/workflows/{melinda-node-tests.yml → melinda-node-tests-and-publish.yml} +22 -12
- package/dist/candidate-search/candidate-search-utils.js +18 -0
- package/dist/candidate-search/candidate-search-utils.js.map +7 -0
- package/dist/candidate-search/choose-queries.js +75 -0
- package/dist/candidate-search/choose-queries.js.map +7 -0
- package/dist/candidate-search/index.js +118 -0
- package/dist/candidate-search/index.js.map +7 -0
- package/dist/candidate-search/index.test.js +92 -0
- package/dist/candidate-search/index.test.js.map +7 -0
- package/dist/candidate-search/query-list/bib.js +260 -0
- package/dist/candidate-search/query-list/bib.js.map +7 -0
- package/dist/candidate-search/query-list/bib.test.js +34 -0
- package/dist/candidate-search/query-list/bib.test.js.map +7 -0
- package/dist/candidate-search/query-list/component.js +87 -0
- package/dist/candidate-search/query-list/component.js.map +7 -0
- package/dist/candidate-search/query-list/index.js +53 -0
- package/dist/candidate-search/query-list/index.js.map +7 -0
- package/dist/cli.js +138 -0
- package/dist/cli.js.map +7 -0
- package/dist/index.js +204 -0
- package/dist/index.js.map +7 -0
- package/dist/index.test.js +69 -0
- package/dist/index.test.js.map +7 -0
- package/dist/match-detection/features/bib/all-source-ids.js +48 -0
- package/dist/match-detection/features/bib/all-source-ids.js.map +7 -0
- package/dist/match-detection/features/bib/authors.js +57 -0
- package/dist/match-detection/features/bib/authors.js.map +7 -0
- package/dist/match-detection/features/bib/bibliographic-level.js +6 -0
- package/dist/match-detection/features/bib/bibliographic-level.js.map +7 -0
- package/dist/match-detection/features/bib/host-component.js +6 -0
- package/dist/match-detection/features/bib/host-component.js.map +7 -0
- package/dist/match-detection/features/bib/index.js +17 -0
- package/dist/match-detection/features/bib/index.js.map +7 -0
- package/dist/match-detection/features/bib/index.test.js +40 -0
- package/dist/match-detection/features/bib/index.test.js.map +7 -0
- package/dist/match-detection/features/bib/isbn.js +21 -0
- package/dist/match-detection/features/bib/isbn.js.map +7 -0
- package/dist/match-detection/features/bib/issn.js +6 -0
- package/dist/match-detection/features/bib/issn.js.map +7 -0
- package/dist/match-detection/features/bib/language.js +80 -0
- package/dist/match-detection/features/bib/language.js.map +7 -0
- package/dist/match-detection/features/bib/media-type.js +31 -0
- package/dist/match-detection/features/bib/media-type.js.map +7 -0
- package/dist/match-detection/features/bib/melinda-id.js +6 -0
- package/dist/match-detection/features/bib/melinda-id.js.map +7 -0
- package/dist/match-detection/features/bib/melinda-identifier-factory.js +38 -0
- package/dist/match-detection/features/bib/melinda-identifier-factory.js.map +7 -0
- package/dist/match-detection/features/bib/other-standard-identifier.js +6 -0
- package/dist/match-detection/features/bib/other-standard-identifier.js.map +7 -0
- package/dist/match-detection/features/bib/publication-time-allow-cons-years-multi.js +116 -0
- package/dist/match-detection/features/bib/publication-time-allow-cons-years-multi.js.map +7 -0
- package/dist/match-detection/features/bib/publication-time-allow-cons-years.js +28 -0
- package/dist/match-detection/features/bib/publication-time-allow-cons-years.js.map +7 -0
- package/dist/match-detection/features/bib/publication-time.js +10 -0
- package/dist/match-detection/features/bib/publication-time.js.map +7 -0
- package/dist/match-detection/features/bib/record-type.js +6 -0
- package/dist/match-detection/features/bib/record-type.js.map +7 -0
- package/dist/match-detection/features/bib/standard-identifier-factory.js +99 -0
- package/dist/match-detection/features/bib/standard-identifier-factory.js.map +7 -0
- package/dist/match-detection/features/bib/title-version-original.js +37 -0
- package/dist/match-detection/features/bib/title-version-original.js.map +7 -0
- package/dist/match-detection/features/bib/title.js +46 -0
- package/dist/match-detection/features/bib/title.js.map +7 -0
- package/dist/match-detection/features/index.js +3 -0
- package/dist/match-detection/features/index.js.map +7 -0
- package/dist/match-detection/index.js +86 -0
- package/dist/match-detection/index.js.map +7 -0
- package/dist/match-detection/index.test.js +44 -0
- package/dist/match-detection/index.test.js.map +7 -0
- package/dist/matching-utils.js +79 -0
- package/dist/matching-utils.js.map +7 -0
- package/package.json +12 -12
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import createDebugLogger from "debug";
|
|
2
|
+
const debug = createDebugLogger("@natlibfi/melinda-record-matching:utils");
|
|
3
|
+
const debugData = debug.extend("data");
|
|
4
|
+
export function getMelindaIdsF035(record) {
|
|
5
|
+
const debug2 = createDebugLogger("@natlibfi/melinda-record-matching:melinda-id");
|
|
6
|
+
const debugData2 = debug2.extend("data");
|
|
7
|
+
const f035s = record.getFields("035");
|
|
8
|
+
if (f035s.length < 1) {
|
|
9
|
+
debug2(`No f035s found.`);
|
|
10
|
+
return [];
|
|
11
|
+
}
|
|
12
|
+
const allF035MelindaIds = [].concat(...f035s.map((field) => toMelindaIds(field)));
|
|
13
|
+
const f035MelindaIds = [...new Set(allF035MelindaIds)];
|
|
14
|
+
debugData2(`Fields (${f035s.length}): ${JSON.stringify(f035s)}`);
|
|
15
|
+
debugData2(`Ids (${allF035MelindaIds.length}): ${JSON.stringify(allF035MelindaIds)}`);
|
|
16
|
+
debugData2(`Unique ids (${f035MelindaIds.length}): ${JSON.stringify(f035MelindaIds)}`);
|
|
17
|
+
return f035MelindaIds;
|
|
18
|
+
}
|
|
19
|
+
export function toMelindaIds({ subfields }, subfieldsToParse = ["a", "z"]) {
|
|
20
|
+
const melindaIdRegExp = /^(?<prefix>\(FI-MELINDA\)|FCC)(?<id>\d{9})$/u;
|
|
21
|
+
return subfields.filter((sub) => subfieldsToParse.includes(sub.code)).filter((sub) => testStringOrNumber(sub.value) && melindaIdRegExp.test(String(sub.value))).map(({ value }) => testStringOrNumber(value) ? String(value).replace(melindaIdRegExp, "$<id>") : "");
|
|
22
|
+
}
|
|
23
|
+
export function validateSidFieldSubfieldCounts(field) {
|
|
24
|
+
debugData(`Validating SID field ${JSON.stringify(field)}`);
|
|
25
|
+
const countC = countSubfields(field, "c");
|
|
26
|
+
const countB = countSubfields(field, "b");
|
|
27
|
+
debug(`Found ${countC} sf $cs and ${countB} sf $bs. IsValid: ${countC === 1 && countB === 1}`);
|
|
28
|
+
return countC === 1 && countB === 1;
|
|
29
|
+
}
|
|
30
|
+
function countSubfields(field, subfieldCode) {
|
|
31
|
+
return field.subfields.filter(({ code }) => code === subfieldCode).length;
|
|
32
|
+
}
|
|
33
|
+
export function getSubfieldValues(field, subfieldCode) {
|
|
34
|
+
debugData(`Get subfield(s) $${subfieldCode} from ${JSON.stringify(field)}`);
|
|
35
|
+
return field.subfields.filter(({ code }) => code === subfieldCode).map(({ value }) => testStringOrNumber(value) ? String(value) : "").filter((value) => value);
|
|
36
|
+
}
|
|
37
|
+
export function testStringOrNumber(value) {
|
|
38
|
+
if (typeof value === "string" || typeof value === "number") {
|
|
39
|
+
return true;
|
|
40
|
+
}
|
|
41
|
+
return false;
|
|
42
|
+
}
|
|
43
|
+
export function extractSubfieldsFromField(field, subfieldCodes) {
|
|
44
|
+
if (field === void 0 || field.subfields === void 0) {
|
|
45
|
+
return [];
|
|
46
|
+
}
|
|
47
|
+
const resultSubfields = field.subfields.filter(({ code }) => subfieldCodes.includes(code)).map(({ code, value }) => ({ code, value: testStringOrNumber(value) ? String(value) : "" })).filter((value) => value);
|
|
48
|
+
return resultSubfields;
|
|
49
|
+
}
|
|
50
|
+
export function uniqueSubfields(subfields) {
|
|
51
|
+
return subfields.reduce((arr, e) => {
|
|
52
|
+
if (!arr.find((item) => item.code === e.code && item.value === e.value)) {
|
|
53
|
+
const newArr = arr.concat(e);
|
|
54
|
+
return newArr;
|
|
55
|
+
}
|
|
56
|
+
return arr;
|
|
57
|
+
}, []);
|
|
58
|
+
}
|
|
59
|
+
export function getMatchCounts(aValues, bValues) {
|
|
60
|
+
const matchingValues = getMatchingValuesAmount(aValues, bValues);
|
|
61
|
+
return {
|
|
62
|
+
maxValues: aValues.length > bValues.length ? aValues.length : bValues.length,
|
|
63
|
+
// possibleMatchingValues: amount of identifiers in set of less identifiers (we cannot more values than these)
|
|
64
|
+
possibleMatchValues: aValues.length > bValues.length ? bValues.length : aValues.length,
|
|
65
|
+
matchingValues
|
|
66
|
+
};
|
|
67
|
+
function getMatchingValuesAmount(aValues2, bValues2) {
|
|
68
|
+
if (bValues2.length > aValues2.length) {
|
|
69
|
+
return aValues2.filter((aValue) => bValues2.some((bValue) => aValue === bValue)).length;
|
|
70
|
+
}
|
|
71
|
+
if (aValues2.length > bValues2.length) {
|
|
72
|
+
return bValues2.filter((bValue) => aValues2.some((aValue) => bValue === aValue)).length;
|
|
73
|
+
}
|
|
74
|
+
const aToB = aValues2.filter((aValue) => bValues2.some((bValue) => aValue === bValue)).length;
|
|
75
|
+
const bToA = bValues2.filter((bValue) => aValues2.some((aValue) => bValue === aValue)).length;
|
|
76
|
+
return aToB < bToA ? aToB : bToA;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
//# sourceMappingURL=matching-utils.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/matching-utils.js"],
|
|
4
|
+
"sourcesContent": ["import createDebugLogger from 'debug';\n\nconst debug = createDebugLogger('@natlibfi/melinda-record-matching:utils');\nconst debugData = debug.extend('data');\n\nexport function getMelindaIdsF035(record) {\n\n const debug = createDebugLogger('@natlibfi/melinda-record-matching:melinda-id');\n const debugData = debug.extend('data');\n\n const f035s = record.getFields('035');\n\n if (f035s.length < 1) {\n debug(`No f035s found.`);\n return [];\n }\n\n const allF035MelindaIds = [].concat(...f035s.map(field => toMelindaIds(field)));\n const f035MelindaIds = [...new Set(allF035MelindaIds)];\n\n debugData(`Fields (${f035s.length}): ${JSON.stringify(f035s)}`);\n debugData(`Ids (${allF035MelindaIds.length}): ${JSON.stringify(allF035MelindaIds)}`);\n debugData(`Unique ids (${f035MelindaIds.length}): ${JSON.stringify(f035MelindaIds)}`);\n\n return f035MelindaIds;\n}\n\nexport function toMelindaIds({subfields}, subfieldsToParse = ['a', 'z']) {\n const melindaIdRegExp = /^(?<prefix>\\(FI-MELINDA\\)|FCC)(?<id>\\d{9})$/u;\n\n return subfields\n .filter(sub => subfieldsToParse.includes(sub.code))\n .filter(sub => testStringOrNumber(sub.value) && melindaIdRegExp.test(String(sub.value)))\n .map(({value}) => testStringOrNumber(value) ? String(value).replace(melindaIdRegExp, '$<id>') : '');\n}\n\nexport function validateSidFieldSubfieldCounts(field) {\n // Valid SID-fields have just one $c and one $b\n debugData(`Validating SID field ${JSON.stringify(field)}`);\n const countC = countSubfields(field, 'c');\n const countB = countSubfields(field, 'b');\n debug(`Found ${countC} sf $cs and ${countB} sf $bs. IsValid: ${countC === 1 && countB === 1}`);\n\n return countC === 1 && countB === 1;\n}\n\nfunction countSubfields(field, subfieldCode) {\n // debug(`Counting subfields ${subfieldCode}`);\n return field.subfields.filter(({code}) => code === subfieldCode).length;\n}\n\nexport function getSubfieldValues(field, subfieldCode) {\n debugData(`Get subfield(s) $${subfieldCode} from ${JSON.stringify(field)}`);\n return field.subfields\n .filter(({code}) => code === subfieldCode)\n .map(({value}) => testStringOrNumber(value) ? String(value) : '')\n .filter(value => value);\n}\n\nexport function testStringOrNumber(value) {\n if (typeof value === 'string' || typeof value === 'number') {\n return true;\n }\n return false;\n}\n\nexport function extractSubfieldsFromField(field, subfieldCodes) {\n if (field === undefined || field.subfields === undefined) {\n return [];\n }\n const resultSubfields = field.subfields\n .filter(({code}) => subfieldCodes.includes(code))\n .map(({code, value}) => ({code, value: testStringOrNumber(value) ? String(value) : ''}))\n .filter(value => value);\n return resultSubfields;\n}\n\nexport function uniqueSubfields(subfields) {\n return subfields.reduce((arr, e) => {\n if (!arr.find(item => item.code === e.code && item.value === e.value)) {\n const newArr = arr.concat(e);\n return newArr;\n }\n return arr;\n }, []);\n}\n\nexport function getMatchCounts(aValues, bValues) {\n\n const matchingValues = getMatchingValuesAmount(aValues, bValues);\n\n return {\n maxValues: aValues.length > bValues.length ? aValues.length : bValues.length,\n // possibleMatchingValues: amount of identifiers in set of less identifiers (we cannot more values than these)\n possibleMatchValues: aValues.length > bValues.length ? bValues.length : aValues.length,\n matchingValues\n };\n\n function getMatchingValuesAmount(aValues, bValues) {\n if (bValues.length > aValues.length) {\n return aValues.filter(aValue => bValues.some(bValue => aValue === bValue)).length;\n }\n if (aValues.length > bValues.length) {\n return bValues.filter(bValue => aValues.some(aValue => bValue === aValue)).length;\n }\n\n // If we have same amount of values, we'll check matches both ways, to avoid mixups in cases\n // there would be duplicate values\n const aToB = aValues.filter(aValue => bValues.some(bValue => aValue === bValue)).length;\n const bToA = bValues.filter(bValue => aValues.some(aValue => bValue === aValue)).length;\n\n return aToB < bToA ? aToB : bToA;\n }\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["debug", "debugData", "aValues", "bValues"]
|
|
7
|
+
}
|
package/package.json
CHANGED
|
@@ -5,16 +5,15 @@
|
|
|
5
5
|
"name": "The National Library of Finland"
|
|
6
6
|
},
|
|
7
7
|
"keywords": [],
|
|
8
|
-
"homepage": "https://
|
|
8
|
+
"homepage": "https://www.npmjs.com/package/@natlibfi/melinda-record-matching",
|
|
9
9
|
"bugs": {
|
|
10
10
|
"url": "https://github.com/natlibfi/melinda-record-matching-js/issues"
|
|
11
11
|
},
|
|
12
12
|
"repository": {
|
|
13
|
-
"
|
|
14
|
-
"url": "git@github.com:natlibfi/melinda-record-matching-js.git"
|
|
13
|
+
"url": "https://github.com/NatLibFi/melinda-record-matching-js"
|
|
15
14
|
},
|
|
16
15
|
"license": "MIT",
|
|
17
|
-
"version": "5.0.0-alpha.
|
|
16
|
+
"version": "5.0.0-alpha.3",
|
|
18
17
|
"main": "./dist/index.js",
|
|
19
18
|
"type": "module",
|
|
20
19
|
"bin": "./dist/cli.js",
|
|
@@ -25,6 +24,7 @@
|
|
|
25
24
|
"access": "public"
|
|
26
25
|
},
|
|
27
26
|
"scripts": {
|
|
27
|
+
"prepare": "npm run build",
|
|
28
28
|
"start": "node dist/index.js",
|
|
29
29
|
"build": "esbuild \"src/**/*.js\" --sourcemap --platform=node --outdir=dist",
|
|
30
30
|
"cli": "node dist/cli.js",
|
|
@@ -37,22 +37,22 @@
|
|
|
37
37
|
"dev:debug": "cross-env LOG_LEVEL=debug DEBUG=@natlibfi/* NODE_ENV=test npm run watch:test"
|
|
38
38
|
},
|
|
39
39
|
"dependencies": {
|
|
40
|
-
"@natlibfi/marc-record": "
|
|
41
|
-
"@natlibfi/marc-record-serializers": "
|
|
42
|
-
"@natlibfi/melinda-commons": "
|
|
43
|
-
"@natlibfi/sru-client": "
|
|
40
|
+
"@natlibfi/marc-record": "next",
|
|
41
|
+
"@natlibfi/marc-record-serializers": "next",
|
|
42
|
+
"@natlibfi/melinda-commons": "next",
|
|
43
|
+
"@natlibfi/sru-client": "next",
|
|
44
44
|
"debug": "^4.4.1",
|
|
45
45
|
"isbn3": "^1.2.14",
|
|
46
46
|
"moment": "^2.30.1",
|
|
47
47
|
"natural": "^8.0.1",
|
|
48
|
-
"uuid": "^
|
|
48
|
+
"uuid": "^13.0.0",
|
|
49
49
|
"winston": "^3.17.0",
|
|
50
50
|
"yargs": "^18.0.0"
|
|
51
51
|
},
|
|
52
52
|
"devDependencies": {
|
|
53
|
-
"@natlibfi/fixugen": "
|
|
54
|
-
"@natlibfi/fixugen-http-client": "
|
|
55
|
-
"@natlibfi/fixura": "
|
|
53
|
+
"@natlibfi/fixugen": "next",
|
|
54
|
+
"@natlibfi/fixugen-http-client": "next",
|
|
55
|
+
"@natlibfi/fixura": "next",
|
|
56
56
|
"cross-env": "^7.0.3",
|
|
57
57
|
"esbuild": "^0.25.9",
|
|
58
58
|
"eslint": "^9.35.0"
|