@concordance-wiki/inference 0.1.0
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/LICENSE +674 -0
- package/README.md +15 -0
- package/dist/combine/confidence.d.ts +16 -0
- package/dist/combine/confidence.d.ts.map +1 -0
- package/dist/combine/confidence.js +24 -0
- package/dist/combine/confidence.js.map +1 -0
- package/dist/combine/links.d.ts +15 -0
- package/dist/combine/links.d.ts.map +1 -0
- package/dist/combine/links.js +0 -0
- package/dist/combine/links.js.map +1 -0
- package/dist/display/neighbourhood.d.ts +15 -0
- package/dist/display/neighbourhood.d.ts.map +1 -0
- package/dist/display/neighbourhood.js +83 -0
- package/dist/display/neighbourhood.js.map +1 -0
- package/dist/display/options.d.ts +5 -0
- package/dist/display/options.d.ts.map +1 -0
- package/dist/display/options.js +6 -0
- package/dist/display/options.js.map +1 -0
- package/dist/display/serialize.d.ts +7 -0
- package/dist/display/serialize.d.ts.map +1 -0
- package/dist/display/serialize.js +13 -0
- package/dist/display/serialize.js.map +1 -0
- package/dist/display/types.d.ts +44 -0
- package/dist/display/types.d.ts.map +1 -0
- package/dist/display/types.js +2 -0
- package/dist/display/types.js.map +1 -0
- package/dist/duplicates/content.d.ts +29 -0
- package/dist/duplicates/content.d.ts.map +1 -0
- package/dist/duplicates/content.js +42 -0
- package/dist/duplicates/content.js.map +1 -0
- package/dist/duplicates/lsh.d.ts +8 -0
- package/dist/duplicates/lsh.d.ts.map +1 -0
- package/dist/duplicates/lsh.js +38 -0
- package/dist/duplicates/lsh.js.map +1 -0
- package/dist/duplicates/minhash.d.ts +11 -0
- package/dist/duplicates/minhash.d.ts.map +1 -0
- package/dist/duplicates/minhash.js +51 -0
- package/dist/duplicates/minhash.js.map +1 -0
- package/dist/duplicates/options.d.ts +6 -0
- package/dist/duplicates/options.d.ts.map +1 -0
- package/dist/duplicates/options.js +23 -0
- package/dist/duplicates/options.js.map +1 -0
- package/dist/duplicates/resolve.d.ts +13 -0
- package/dist/duplicates/resolve.d.ts.map +1 -0
- package/dist/duplicates/resolve.js +257 -0
- package/dist/duplicates/resolve.js.map +1 -0
- package/dist/duplicates/score.d.ts +22 -0
- package/dist/duplicates/score.d.ts.map +1 -0
- package/dist/duplicates/score.js +190 -0
- package/dist/duplicates/score.js.map +1 -0
- package/dist/duplicates/shingles.d.ts +15 -0
- package/dist/duplicates/shingles.d.ts.map +1 -0
- package/dist/duplicates/shingles.js +35 -0
- package/dist/duplicates/shingles.js.map +1 -0
- package/dist/duplicates/similarity.d.ts +23 -0
- package/dist/duplicates/similarity.d.ts.map +1 -0
- package/dist/duplicates/similarity.js +86 -0
- package/dist/duplicates/similarity.js.map +1 -0
- package/dist/duplicates/types.d.ts +97 -0
- package/dist/duplicates/types.d.ts.map +1 -0
- package/dist/duplicates/types.js +2 -0
- package/dist/duplicates/types.js.map +1 -0
- package/dist/explicit/links.d.ts +30 -0
- package/dist/explicit/links.d.ts.map +1 -0
- package/dist/explicit/links.js +173 -0
- package/dist/explicit/links.js.map +1 -0
- package/dist/explicit/types.d.ts +35 -0
- package/dist/explicit/types.d.ts.map +1 -0
- package/dist/explicit/types.js +2 -0
- package/dist/explicit/types.js.map +1 -0
- package/dist/frontmatter/links.d.ts +21 -0
- package/dist/frontmatter/links.d.ts.map +1 -0
- package/dist/frontmatter/links.js +131 -0
- package/dist/frontmatter/links.js.map +1 -0
- package/dist/frontmatter/resolve.d.ts +32 -0
- package/dist/frontmatter/resolve.d.ts.map +1 -0
- package/dist/frontmatter/resolve.js +62 -0
- package/dist/frontmatter/resolve.js.map +1 -0
- package/dist/index.d.ts +26 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +19 -0
- package/dist/index.js.map +1 -0
- package/dist/mentions/links.d.ts +43 -0
- package/dist/mentions/links.d.ts.map +1 -0
- package/dist/mentions/links.js +106 -0
- package/dist/mentions/links.js.map +1 -0
- package/dist/mentions/sections.d.ts +17 -0
- package/dist/mentions/sections.d.ts.map +1 -0
- package/dist/mentions/sections.js +26 -0
- package/dist/mentions/sections.js.map +1 -0
- package/dist/neighbourhood/accumulate.d.ts +11 -0
- package/dist/neighbourhood/accumulate.d.ts.map +1 -0
- package/dist/neighbourhood/accumulate.js +73 -0
- package/dist/neighbourhood/accumulate.js.map +1 -0
- package/dist/neighbourhood/links.d.ts +13 -0
- package/dist/neighbourhood/links.d.ts.map +1 -0
- package/dist/neighbourhood/links.js +35 -0
- package/dist/neighbourhood/links.js.map +1 -0
- package/dist/neighbourhood/options.d.ts +5 -0
- package/dist/neighbourhood/options.d.ts.map +1 -0
- package/dist/neighbourhood/options.js +6 -0
- package/dist/neighbourhood/options.js.map +1 -0
- package/dist/neighbourhood/order.d.ts +5 -0
- package/dist/neighbourhood/order.d.ts.map +1 -0
- package/dist/neighbourhood/order.js +9 -0
- package/dist/neighbourhood/order.js.map +1 -0
- package/dist/neighbourhood/serialize.d.ts +4 -0
- package/dist/neighbourhood/serialize.d.ts.map +1 -0
- package/dist/neighbourhood/serialize.js +10 -0
- package/dist/neighbourhood/serialize.js.map +1 -0
- package/dist/neighbourhood/types.d.ts +24 -0
- package/dist/neighbourhood/types.d.ts.map +1 -0
- package/dist/neighbourhood/types.js +2 -0
- package/dist/neighbourhood/types.js.map +1 -0
- package/dist/operations/index.d.ts +30 -0
- package/dist/operations/index.d.ts.map +1 -0
- package/dist/operations/index.js +118 -0
- package/dist/operations/index.js.map +1 -0
- package/dist/operations/match.d.ts +64 -0
- package/dist/operations/match.d.ts.map +1 -0
- package/dist/operations/match.js +251 -0
- package/dist/operations/match.js.map +1 -0
- package/dist/operations/merge.d.ts +14 -0
- package/dist/operations/merge.d.ts.map +1 -0
- package/dist/operations/merge.js +60 -0
- package/dist/operations/merge.js.map +1 -0
- package/dist/relations/index.d.ts +3 -0
- package/dist/relations/index.d.ts.map +1 -0
- package/dist/relations/index.js +3 -0
- package/dist/relations/index.js.map +1 -0
- package/dist/relations/labels.d.ts +14 -0
- package/dist/relations/labels.d.ts.map +1 -0
- package/dist/relations/labels.js +22 -0
- package/dist/relations/labels.js.map +1 -0
- package/dist/relations/type.d.ts +40 -0
- package/dist/relations/type.d.ts.map +1 -0
- package/dist/relations/type.js +161 -0
- package/dist/relations/type.js.map +1 -0
- package/package.json +46 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/relations/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAA6B,MAAM,aAAa,CAAC;AACvE,OAAO,EACL,iBAAiB,EACjB,eAAe,EACf,aAAa,GAId,MAAM,WAAW,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { Locale } from "@concordance-wiki/core";
|
|
2
|
+
import type { Profile } from "@concordance-wiki/profile";
|
|
3
|
+
export interface RelationLabelOptions {
|
|
4
|
+
/** Read the relation from its target, the way a screen names the application it is part of. */
|
|
5
|
+
inverse?: boolean;
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* The label the profile gives a relation, read from the source by default and from the target with
|
|
9
|
+
* `inverse`: the `inverse_label` of the relation, or its plain label when it has none, as an
|
|
10
|
+
* undirected one. A relation the profile does not declare reads as its slug: the site never
|
|
11
|
+
* invents a label.
|
|
12
|
+
*/
|
|
13
|
+
export declare function relationLabel(profile: Profile, relation: string, locale: Locale, options?: RelationLabelOptions): string;
|
|
14
|
+
//# sourceMappingURL=labels.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"labels.d.ts","sourceRoot":"","sources":["../../src/relations/labels.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,KAAK,EAAS,OAAO,EAAE,MAAM,2BAA2B,CAAC;AAEhE,MAAM,WAAW,oBAAoB;IACnC,+FAA+F;IAC/F,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AASD;;;;;GAKG;AACH,wBAAgB,aAAa,CAC3B,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EACd,OAAO,GAAE,oBAAyB,GACjC,MAAM,CAQR"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/** The label of `locale`, else of its language (`fr` for `fr-CA`), else the English one. */
|
|
2
|
+
function localised(label, locale) {
|
|
3
|
+
// The spread gives the label an anonymous type that a locale string can index.
|
|
4
|
+
const byLocale = { ...label };
|
|
5
|
+
return byLocale[locale] ?? byLocale[locale.replace(/-[^]*/, "")] ?? label.en;
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* The label the profile gives a relation, read from the source by default and from the target with
|
|
9
|
+
* `inverse`: the `inverse_label` of the relation, or its plain label when it has none, as an
|
|
10
|
+
* undirected one. A relation the profile does not declare reads as its slug: the site never
|
|
11
|
+
* invents a label.
|
|
12
|
+
*/
|
|
13
|
+
export function relationLabel(profile, relation, locale, options = {}) {
|
|
14
|
+
const definition = profile.relations[relation];
|
|
15
|
+
if (definition === undefined)
|
|
16
|
+
return relation;
|
|
17
|
+
const label = options.inverse === true && definition.inverse_label !== undefined
|
|
18
|
+
? definition.inverse_label
|
|
19
|
+
: definition.label;
|
|
20
|
+
return localised(label, locale);
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=labels.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"labels.js","sourceRoot":"","sources":["../../src/relations/labels.ts"],"names":[],"mappings":"AAQA,4FAA4F;AAC5F,SAAS,SAAS,CAAC,KAAY,EAAE,MAAc;IAC7C,+EAA+E;IAC/E,MAAM,QAAQ,GAAoC,EAAE,GAAG,KAAK,EAAE,CAAC;IAC/D,OAAO,QAAQ,CAAC,MAAM,CAAC,IAAI,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;AAC/E,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,aAAa,CAC3B,OAAgB,EAChB,QAAgB,EAChB,MAAc,EACd,UAAgC,EAAE;IAElC,MAAM,UAAU,GAAG,OAAO,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;IAC/C,IAAI,UAAU,KAAK,SAAS;QAAE,OAAO,QAAQ,CAAC;IAC9C,MAAM,KAAK,GACT,OAAO,CAAC,OAAO,KAAK,IAAI,IAAI,UAAU,CAAC,aAAa,KAAK,SAAS;QAChE,CAAC,CAAC,UAAU,CAAC,aAAa;QAC1B,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC;IACvB,OAAO,SAAS,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;AAClC,CAAC"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { type Finding, type Link } from "@concordance-wiki/core";
|
|
2
|
+
import { type Profile } from "@concordance-wiki/profile";
|
|
3
|
+
/** What the typing step needs of an entity; the file lets a finding name the source it was read in. */
|
|
4
|
+
export interface TypedEntity {
|
|
5
|
+
id: string;
|
|
6
|
+
type: string;
|
|
7
|
+
source?: {
|
|
8
|
+
name: string;
|
|
9
|
+
/** Forward-slash path relative to the source root. */
|
|
10
|
+
path: string;
|
|
11
|
+
};
|
|
12
|
+
}
|
|
13
|
+
export interface TypeRelationsInput {
|
|
14
|
+
links: readonly Link[];
|
|
15
|
+
entities: readonly TypedEntity[];
|
|
16
|
+
profile: Profile;
|
|
17
|
+
}
|
|
18
|
+
export interface TypeRelationsResult {
|
|
19
|
+
links: Link[];
|
|
20
|
+
findings: Finding[];
|
|
21
|
+
}
|
|
22
|
+
/** The relation a producer gives a link it cannot name; the profile caps it and allows it everywhere. */
|
|
23
|
+
export declare const FALLBACK_RELATION = "related";
|
|
24
|
+
/** The attribute that says the type pair named the relation, not a section or a frontmatter attribute. */
|
|
25
|
+
export declare const RELATION_ORIGIN = "relation_origin";
|
|
26
|
+
/**
|
|
27
|
+
* Names the relation of every link from the profile, once every producer has spoken and their
|
|
28
|
+
* links are combined. A relation a producer named, from a mapped section or a typed frontmatter
|
|
29
|
+
* attribute, stands: the step only checks that the profile allows it between the two types and
|
|
30
|
+
* drops it with `E-META-REL` otherwise. A `related` link, which no producer could name, takes the
|
|
31
|
+
* single relation the profile admits for its type pair, marked `relation_origin: pair`, turned
|
|
32
|
+
* around when only the reverse pair admits one; it stays `related` when the pair admits none or
|
|
33
|
+
* several. Links that now say the same thing are combined again, a pair-named link joining a
|
|
34
|
+
* declared link of the same triple and attributes and losing its marker; then the cap of the
|
|
35
|
+
* relation applies and every `related` link yields `I-REL-AMBIGUOUS`, located on the first
|
|
36
|
+
* provenance that names a file, unless co-occurrence alone knows it. A link with an endpoint the
|
|
37
|
+
* entity list does not type is kept as produced, since nothing can check it. Pure and idempotent.
|
|
38
|
+
*/
|
|
39
|
+
export declare function typeRelations(input: TypeRelationsInput): TypeRelationsResult;
|
|
40
|
+
//# sourceMappingURL=type.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"type.d.ts","sourceRoot":"","sources":["../../src/relations/type.ts"],"names":[],"mappings":"AAAA,OAAO,EAAmB,KAAK,OAAO,EAAE,KAAK,IAAI,EAAmB,MAAM,wBAAwB,CAAC;AACnG,OAAO,EAAoC,KAAK,OAAO,EAAE,MAAM,2BAA2B,CAAC;AAK3F,uGAAuG;AACvG,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE;QACP,IAAI,EAAE,MAAM,CAAC;QACb,sDAAsD;QACtD,IAAI,EAAE,MAAM,CAAC;KACd,CAAC;CACH;AAED,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,SAAS,IAAI,EAAE,CAAC;IACvB,QAAQ,EAAE,SAAS,WAAW,EAAE,CAAC;IACjC,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,IAAI,EAAE,CAAC;IACd,QAAQ,EAAE,OAAO,EAAE,CAAC;CACrB;AAED,yGAAyG;AACzG,eAAO,MAAM,iBAAiB,YAAY,CAAC;AAE3C,0GAA0G;AAC1G,eAAO,MAAM,eAAe,oBAAoB,CAAC;AAuIjD;;;;;;;;;;;;GAYG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,kBAAkB,GAAG,mBAAmB,CA2D5E"}
|
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
import { compareFindings } from "@concordance-wiki/core";
|
|
2
|
+
import { allowedRelations, singleRelation } from "@concordance-wiki/profile";
|
|
3
|
+
import { combineLinks, combineOptions } from "../combine/links.js";
|
|
4
|
+
import { byCodeUnit } from "../neighbourhood/order.js";
|
|
5
|
+
/** The relation a producer gives a link it cannot name; the profile caps it and allows it everywhere. */
|
|
6
|
+
export const FALLBACK_RELATION = "related";
|
|
7
|
+
/** The attribute that says the type pair named the relation, not a section or a frontmatter attribute. */
|
|
8
|
+
export const RELATION_ORIGIN = "relation_origin";
|
|
9
|
+
const PAIR_ORIGIN = "pair";
|
|
10
|
+
const AMBIGUOUS_REMEDIATION = "Move the mention under a mapped section, or declare the reference in frontmatter.";
|
|
11
|
+
const OUTSIDE_MATRIX_REMEDIATION = "Point the reference at an entity of an allowed type, or extend the profile's allowed pairs for that relation.";
|
|
12
|
+
function describe(id, entity) {
|
|
13
|
+
return entity === undefined ? id : `${entity.type} ${id}`;
|
|
14
|
+
}
|
|
15
|
+
/** The endpoint whose file the provenance was read in; `from` when no file matches or none is named. */
|
|
16
|
+
function carrierOf(link, provenance, ends) {
|
|
17
|
+
const named = [ends.from, ends.to].find((entity) => entity?.source !== undefined && entity.source.path === provenance?.path);
|
|
18
|
+
return named ?? ends.from ?? { id: link.from };
|
|
19
|
+
}
|
|
20
|
+
/** A finding points at a file when any provenance names one; a co-occurrence names none. */
|
|
21
|
+
function located(link, ends) {
|
|
22
|
+
const provenance = link.provenance.find((candidate) => candidate.path !== undefined) ?? link.provenance[0];
|
|
23
|
+
const carrier = carrierOf(link, provenance, ends);
|
|
24
|
+
return {
|
|
25
|
+
...(carrier.source === undefined ? {} : { source: carrier.source.name }),
|
|
26
|
+
...(provenance?.path === undefined ? {} : { path: provenance.path }),
|
|
27
|
+
...(provenance?.line === undefined ? {} : { line: provenance.line }),
|
|
28
|
+
entity: carrier.id,
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
function outsideMatrix(link, ends, reason) {
|
|
32
|
+
const attribute = link.provenance.find((candidate) => candidate.attribute !== undefined)?.attribute;
|
|
33
|
+
const declared = attribute === undefined ? "" : ` (attribute ${attribute})`;
|
|
34
|
+
return {
|
|
35
|
+
check: "E-META-REL",
|
|
36
|
+
severity: "error",
|
|
37
|
+
...located(link, ends),
|
|
38
|
+
message: `relation ${link.relation} from ${describe(link.from, ends.from)} to ${describe(link.to, ends.to)} ${reason}${declared}`,
|
|
39
|
+
remediation: OUTSIDE_MATRIX_REMEDIATION,
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
function ambiguous(link, ends) {
|
|
43
|
+
return {
|
|
44
|
+
check: "I-REL-AMBIGUOUS",
|
|
45
|
+
severity: "info",
|
|
46
|
+
...located(link, ends),
|
|
47
|
+
message: `the link from ${link.from} to ${link.to} fell back to the generic ${FALLBACK_RELATION} relation`,
|
|
48
|
+
remediation: AMBIGUOUS_REMEDIATION,
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* A link known from co-occurrences alone: nobody wrote it, so nobody can be asked to name it. The
|
|
53
|
+
* ambiguity finding is for a written link or a located mention that fell back to `related`.
|
|
54
|
+
*/
|
|
55
|
+
function unnamedByNature(link) {
|
|
56
|
+
return link.provenance.every((provenance) => provenance.method === "cooccurrence");
|
|
57
|
+
}
|
|
58
|
+
/** An undirected relation joins its pair in either order. */
|
|
59
|
+
function allowedBetween(profile, relation, undirected, ends) {
|
|
60
|
+
return (allowedRelations(profile, ends.from.type, ends.to.type).includes(relation) ||
|
|
61
|
+
(undirected && allowedRelations(profile, ends.to.type, ends.from.type).includes(relation)));
|
|
62
|
+
}
|
|
63
|
+
/** The attributes without the origin marker, keys in code-unit order so that equal sets serialise alike. */
|
|
64
|
+
function bareAttributes(link) {
|
|
65
|
+
const entries = Object.entries(link.attributes ?? {})
|
|
66
|
+
.filter(([key]) => key !== RELATION_ORIGIN)
|
|
67
|
+
.sort(([a], [b]) => byCodeUnit(a, b));
|
|
68
|
+
return Object.fromEntries(entries);
|
|
69
|
+
}
|
|
70
|
+
function stripped(link) {
|
|
71
|
+
return { ...link, attributes: bareAttributes(link), provenance: [...link.provenance] };
|
|
72
|
+
}
|
|
73
|
+
function groupKey(link) {
|
|
74
|
+
return [link.from, link.to, link.relation, JSON.stringify(bareAttributes(link))].join(" ");
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* The relation the type pair names for a fallback link: the single one the profile admits from the
|
|
78
|
+
* source type to the target type, else the single one it admits the other way round, in which case
|
|
79
|
+
* the link is turned around. Nothing when either end is untyped or the pair admits none or several.
|
|
80
|
+
*/
|
|
81
|
+
function fromPair(link, ends, profile) {
|
|
82
|
+
if (ends.from === undefined || ends.to === undefined)
|
|
83
|
+
return undefined;
|
|
84
|
+
const forward = singleRelation(profile, ends.from.type, ends.to.type);
|
|
85
|
+
if (forward !== undefined)
|
|
86
|
+
return { ...stripped(link), relation: forward };
|
|
87
|
+
const backward = singleRelation(profile, ends.to.type, ends.from.type);
|
|
88
|
+
if (backward !== undefined) {
|
|
89
|
+
return { ...stripped(link), from: link.to, to: link.from, relation: backward };
|
|
90
|
+
}
|
|
91
|
+
return undefined;
|
|
92
|
+
}
|
|
93
|
+
/** An undirected link goes from the smaller identifier, so that the two readings of one pair merge. */
|
|
94
|
+
function oriented(link, undirected) {
|
|
95
|
+
return undirected.has(link.relation) && link.to < link.from
|
|
96
|
+
? { ...link, from: link.to, to: link.from }
|
|
97
|
+
: link;
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Names the relation of every link from the profile, once every producer has spoken and their
|
|
101
|
+
* links are combined. A relation a producer named, from a mapped section or a typed frontmatter
|
|
102
|
+
* attribute, stands: the step only checks that the profile allows it between the two types and
|
|
103
|
+
* drops it with `E-META-REL` otherwise. A `related` link, which no producer could name, takes the
|
|
104
|
+
* single relation the profile admits for its type pair, marked `relation_origin: pair`, turned
|
|
105
|
+
* around when only the reverse pair admits one; it stays `related` when the pair admits none or
|
|
106
|
+
* several. Links that now say the same thing are combined again, a pair-named link joining a
|
|
107
|
+
* declared link of the same triple and attributes and losing its marker; then the cap of the
|
|
108
|
+
* relation applies and every `related` link yields `I-REL-AMBIGUOUS`, located on the first
|
|
109
|
+
* provenance that names a file, unless co-occurrence alone knows it. A link with an endpoint the
|
|
110
|
+
* entity list does not type is kept as produced, since nothing can check it. Pure and idempotent.
|
|
111
|
+
*/
|
|
112
|
+
export function typeRelations(input) {
|
|
113
|
+
const { profile } = input;
|
|
114
|
+
const entities = new Map(input.entities.map((entity) => [entity.id, entity]));
|
|
115
|
+
const definitions = Object.entries(profile.relations);
|
|
116
|
+
const undirected = new Set(definitions.filter(([, d]) => !d.directed).map(([slug]) => slug));
|
|
117
|
+
const caps = new Map(definitions.flatMap(([slug, d]) => (d.cap === undefined ? [] : [[slug, d.cap]])));
|
|
118
|
+
const findings = [];
|
|
119
|
+
const kept = [];
|
|
120
|
+
for (const link of input.links) {
|
|
121
|
+
const ends = { from: entities.get(link.from), to: entities.get(link.to) };
|
|
122
|
+
if (!Object.hasOwn(profile.relations, link.relation)) {
|
|
123
|
+
findings.push(outsideMatrix(link, ends, "is not a relation of the profile"));
|
|
124
|
+
continue;
|
|
125
|
+
}
|
|
126
|
+
if (link.relation === FALLBACK_RELATION) {
|
|
127
|
+
const named = fromPair(link, ends, profile);
|
|
128
|
+
kept.push(named === undefined ? { link, pair: false } : { link: named, pair: true });
|
|
129
|
+
continue;
|
|
130
|
+
}
|
|
131
|
+
if (ends.from !== undefined &&
|
|
132
|
+
ends.to !== undefined &&
|
|
133
|
+
!allowedBetween(profile, link.relation, undirected.has(link.relation), {
|
|
134
|
+
from: ends.from,
|
|
135
|
+
to: ends.to,
|
|
136
|
+
})) {
|
|
137
|
+
findings.push(outsideMatrix(link, ends, "is not allowed between these types"));
|
|
138
|
+
continue;
|
|
139
|
+
}
|
|
140
|
+
kept.push({ link, pair: link.attributes?.[RELATION_ORIGIN] === PAIR_ORIGIN });
|
|
141
|
+
}
|
|
142
|
+
const declared = new Set(kept.filter((entry) => !entry.pair).map((entry) => groupKey(oriented(entry.link, undirected))));
|
|
143
|
+
const combined = combineLinks(kept.map((entry) => stripped(oriented(entry.link, undirected))), combineOptions(profile));
|
|
144
|
+
const links = combined.map((link) => {
|
|
145
|
+
const cap = caps.get(link.relation);
|
|
146
|
+
return {
|
|
147
|
+
...link,
|
|
148
|
+
attributes: declared.has(groupKey(link))
|
|
149
|
+
? { ...link.attributes }
|
|
150
|
+
: { ...link.attributes, [RELATION_ORIGIN]: PAIR_ORIGIN },
|
|
151
|
+
confidence: cap === undefined ? link.confidence : Math.min(link.confidence, cap),
|
|
152
|
+
};
|
|
153
|
+
});
|
|
154
|
+
for (const link of links) {
|
|
155
|
+
if (link.relation === FALLBACK_RELATION && !unnamedByNature(link)) {
|
|
156
|
+
findings.push(ambiguous(link, { from: entities.get(link.from), to: entities.get(link.to) }));
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
return { links, findings: findings.toSorted(compareFindings) };
|
|
160
|
+
}
|
|
161
|
+
//# sourceMappingURL=type.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"type.js","sourceRoot":"","sources":["../../src/relations/type.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@concordance-wiki/inference",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "Link production, confidence combination, relation typing, bounded neighbourhood, term candidates.",
|
|
5
|
+
"license": "GPL-3.0-or-later",
|
|
6
|
+
"repository": {
|
|
7
|
+
"type": "git",
|
|
8
|
+
"url": "git+https://github.com/concordance-wiki/concordance.git",
|
|
9
|
+
"directory": "packages/inference"
|
|
10
|
+
},
|
|
11
|
+
"homepage": "https://github.com/concordance-wiki/concordance/tree/main/packages/inference#readme",
|
|
12
|
+
"bugs": "https://github.com/concordance-wiki/concordance/issues",
|
|
13
|
+
"type": "module",
|
|
14
|
+
"sideEffects": false,
|
|
15
|
+
"engines": {
|
|
16
|
+
"node": ">=22"
|
|
17
|
+
},
|
|
18
|
+
"publishConfig": {
|
|
19
|
+
"access": "public"
|
|
20
|
+
},
|
|
21
|
+
"exports": {
|
|
22
|
+
".": {
|
|
23
|
+
"types": "./dist/index.d.ts",
|
|
24
|
+
"default": "./dist/index.js"
|
|
25
|
+
}
|
|
26
|
+
},
|
|
27
|
+
"files": [
|
|
28
|
+
"dist",
|
|
29
|
+
"README.md",
|
|
30
|
+
"LICENSE"
|
|
31
|
+
],
|
|
32
|
+
"scripts": {
|
|
33
|
+
"typecheck": "tsc -b tsconfig.json"
|
|
34
|
+
},
|
|
35
|
+
"dependencies": {
|
|
36
|
+
"@concordance-wiki/core": "workspace:*",
|
|
37
|
+
"@concordance-wiki/ingest": "workspace:*",
|
|
38
|
+
"@concordance-wiki/profile": "workspace:*"
|
|
39
|
+
},
|
|
40
|
+
"devDependencies": {
|
|
41
|
+
"@concordance-wiki/nlp": "workspace:*",
|
|
42
|
+
"@concordance-wiki/plugin-contract-openapi": "workspace:*",
|
|
43
|
+
"@concordance-wiki/plugin-contract-wsdl": "workspace:*",
|
|
44
|
+
"@concordance-wiki/typing": "workspace:*"
|
|
45
|
+
}
|
|
46
|
+
}
|