@nahisaho/musubix-library-learner 2.1.1 → 2.2.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/dist/EnhancedLibraryLearner.d.ts +159 -0
- package/dist/EnhancedLibraryLearner.d.ts.map +1 -0
- package/dist/EnhancedLibraryLearner.js +296 -0
- package/dist/EnhancedLibraryLearner.js.map +1 -0
- package/dist/domain/DomainAwareAbstractor.d.ts +226 -0
- package/dist/domain/DomainAwareAbstractor.d.ts.map +1 -0
- package/dist/domain/DomainAwareAbstractor.js +237 -0
- package/dist/domain/DomainAwareAbstractor.js.map +1 -0
- package/dist/domain/__tests__/DomainAwareAbstractor.test.d.ts +9 -0
- package/dist/domain/__tests__/DomainAwareAbstractor.test.d.ts.map +1 -0
- package/dist/domain/__tests__/DomainAwareAbstractor.test.js +217 -0
- package/dist/domain/__tests__/DomainAwareAbstractor.test.js.map +1 -0
- package/dist/domain/index.d.ts +7 -0
- package/dist/domain/index.d.ts.map +1 -0
- package/dist/domain/index.js +6 -0
- package/dist/domain/index.js.map +1 -0
- package/dist/hierarchy/HierarchyManager.d.ts +227 -0
- package/dist/hierarchy/HierarchyManager.d.ts.map +1 -0
- package/dist/hierarchy/HierarchyManager.js +342 -0
- package/dist/hierarchy/HierarchyManager.js.map +1 -0
- package/dist/hierarchy/index.d.ts +9 -0
- package/dist/hierarchy/index.d.ts.map +1 -0
- package/dist/hierarchy/index.js +8 -0
- package/dist/hierarchy/index.js.map +1 -0
- package/dist/index.d.ts +18 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +13 -0
- package/dist/index.js.map +1 -1
- package/dist/library/IterativeCompressor.d.ts +196 -0
- package/dist/library/IterativeCompressor.d.ts.map +1 -0
- package/dist/library/IterativeCompressor.js +367 -0
- package/dist/library/IterativeCompressor.js.map +1 -0
- package/dist/library/PatternVersionManager.d.ts +177 -0
- package/dist/library/PatternVersionManager.d.ts.map +1 -0
- package/dist/library/PatternVersionManager.js +223 -0
- package/dist/library/PatternVersionManager.js.map +1 -0
- package/dist/library/__tests__/IterativeCompressor.test.d.ts +9 -0
- package/dist/library/__tests__/IterativeCompressor.test.d.ts.map +1 -0
- package/dist/library/__tests__/IterativeCompressor.test.js +200 -0
- package/dist/library/__tests__/IterativeCompressor.test.js.map +1 -0
- package/dist/library/__tests__/PatternVersionManager.test.d.ts +9 -0
- package/dist/library/__tests__/PatternVersionManager.test.d.ts.map +1 -0
- package/dist/library/__tests__/PatternVersionManager.test.js +218 -0
- package/dist/library/__tests__/PatternVersionManager.test.js.map +1 -0
- package/dist/library/index.d.ts +4 -0
- package/dist/library/index.d.ts.map +1 -1
- package/dist/library/index.js +4 -0
- package/dist/library/index.js.map +1 -1
- package/dist/metrics/MetricsExporter.d.ts +128 -0
- package/dist/metrics/MetricsExporter.d.ts.map +1 -0
- package/dist/metrics/MetricsExporter.js +157 -0
- package/dist/metrics/MetricsExporter.js.map +1 -0
- package/dist/metrics/index.d.ts +9 -0
- package/dist/metrics/index.d.ts.map +1 -0
- package/dist/metrics/index.js +8 -0
- package/dist/metrics/index.js.map +1 -0
- package/dist/rewrite/RewriteRuleSet.d.ts +136 -0
- package/dist/rewrite/RewriteRuleSet.d.ts.map +1 -0
- package/dist/rewrite/RewriteRuleSet.js +460 -0
- package/dist/rewrite/RewriteRuleSet.js.map +1 -0
- package/dist/rewrite/index.d.ts +9 -0
- package/dist/rewrite/index.d.ts.map +1 -0
- package/dist/rewrite/index.js +8 -0
- package/dist/rewrite/index.js.map +1 -0
- package/dist/search/TypeDirectedPruner.d.ts +138 -0
- package/dist/search/TypeDirectedPruner.d.ts.map +1 -0
- package/dist/search/TypeDirectedPruner.js +245 -0
- package/dist/search/TypeDirectedPruner.js.map +1 -0
- package/dist/search/index.d.ts +9 -0
- package/dist/search/index.d.ts.map +1 -0
- package/dist/search/index.js +8 -0
- package/dist/search/index.js.map +1 -0
- package/dist/updater/IncrementalUpdater.d.ts +152 -0
- package/dist/updater/IncrementalUpdater.d.ts.map +1 -0
- package/dist/updater/IncrementalUpdater.js +283 -0
- package/dist/updater/IncrementalUpdater.js.map +1 -0
- package/dist/updater/index.d.ts +7 -0
- package/dist/updater/index.d.ts.map +1 -0
- package/dist/updater/index.js +6 -0
- package/dist/updater/index.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,226 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DomainAwareAbstractor - Domain-Aware Pattern Abstraction
|
|
3
|
+
* @module @nahisaho/musubix-library-learner
|
|
4
|
+
* @see TSK-LL-106
|
|
5
|
+
* @see DES-LL-106
|
|
6
|
+
* @see REQ-LL-106 Domain-aware pattern abstraction
|
|
7
|
+
*/
|
|
8
|
+
import type { LearnedPattern } from '../types.js';
|
|
9
|
+
/**
|
|
10
|
+
* DomainAwareAbstractor configuration
|
|
11
|
+
*/
|
|
12
|
+
export interface DomainAwareAbstractorConfig {
|
|
13
|
+
/** Strict mode - require ontology for abstraction */
|
|
14
|
+
strictMode: boolean;
|
|
15
|
+
/** Maximum abstraction depth */
|
|
16
|
+
maxAbstractionDepth: number;
|
|
17
|
+
/** Minimum confidence for domain matching */
|
|
18
|
+
minMatchConfidence: number;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Domain ontology definition
|
|
22
|
+
*/
|
|
23
|
+
export interface DomainOntology {
|
|
24
|
+
/** Ontology name */
|
|
25
|
+
name: string;
|
|
26
|
+
/** Version */
|
|
27
|
+
version: string;
|
|
28
|
+
/** Domain concepts */
|
|
29
|
+
concepts: DomainConcept[];
|
|
30
|
+
/** Domain constraints */
|
|
31
|
+
constraints: DomainConstraint[];
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Domain concept
|
|
35
|
+
*/
|
|
36
|
+
export interface DomainConcept {
|
|
37
|
+
/** Unique identifier */
|
|
38
|
+
id: string;
|
|
39
|
+
/** Concept name */
|
|
40
|
+
name: string;
|
|
41
|
+
/** Description */
|
|
42
|
+
description: string;
|
|
43
|
+
/** Properties of this concept */
|
|
44
|
+
properties: string[];
|
|
45
|
+
/** Relations to other concepts */
|
|
46
|
+
relations: ConceptRelation[];
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Relation between concepts
|
|
50
|
+
*/
|
|
51
|
+
export interface ConceptRelation {
|
|
52
|
+
/** Relation type */
|
|
53
|
+
type: 'hasMany' | 'hasOne' | 'belongsTo' | 'extends' | 'implements';
|
|
54
|
+
/** Target concept ID */
|
|
55
|
+
target: string;
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Domain constraint
|
|
59
|
+
*/
|
|
60
|
+
export interface DomainConstraint {
|
|
61
|
+
/** Constraint type */
|
|
62
|
+
type: 'required' | 'unique' | 'positive' | 'range' | 'format' | 'custom';
|
|
63
|
+
/** Target concept */
|
|
64
|
+
concept: string;
|
|
65
|
+
/** Target property */
|
|
66
|
+
property: string;
|
|
67
|
+
/** Constraint parameters */
|
|
68
|
+
params?: Record<string, unknown>;
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Abstraction result with domain context
|
|
72
|
+
*/
|
|
73
|
+
export interface DomainAbstractionResult {
|
|
74
|
+
/** Original pattern */
|
|
75
|
+
pattern: LearnedPattern;
|
|
76
|
+
/** Identified domain concepts */
|
|
77
|
+
domainConcepts: string[];
|
|
78
|
+
/** Applied constraints */
|
|
79
|
+
constraints: DomainConstraint[];
|
|
80
|
+
/** Confidence score */
|
|
81
|
+
confidence: number;
|
|
82
|
+
/** Abstraction suggestions */
|
|
83
|
+
suggestions: string[];
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Concept hierarchy
|
|
87
|
+
*/
|
|
88
|
+
export interface ConceptHierarchy {
|
|
89
|
+
/** Root concept */
|
|
90
|
+
concept: DomainConcept;
|
|
91
|
+
/** Related concepts */
|
|
92
|
+
related: DomainConcept[];
|
|
93
|
+
/** Depth in hierarchy */
|
|
94
|
+
depth: number;
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Ontology load result
|
|
98
|
+
*/
|
|
99
|
+
export interface OntologyLoadResult {
|
|
100
|
+
/** Success flag */
|
|
101
|
+
success: boolean;
|
|
102
|
+
/** Error message if failed */
|
|
103
|
+
error?: string;
|
|
104
|
+
/** Validation warnings */
|
|
105
|
+
warnings: string[];
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Abstraction statistics
|
|
109
|
+
*/
|
|
110
|
+
export interface AbstractionStatistics {
|
|
111
|
+
/** Total abstractions performed */
|
|
112
|
+
totalAbstractions: number;
|
|
113
|
+
/** Ontologies loaded count */
|
|
114
|
+
ontologiesLoaded: number;
|
|
115
|
+
/** Average match confidence */
|
|
116
|
+
averageConfidence: number;
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* DomainAwareAbstractor interface
|
|
120
|
+
*/
|
|
121
|
+
export interface DomainAwareAbstractor {
|
|
122
|
+
/**
|
|
123
|
+
* Load domain ontology
|
|
124
|
+
*/
|
|
125
|
+
loadOntology(ontology: DomainOntology): OntologyLoadResult;
|
|
126
|
+
/**
|
|
127
|
+
* Get loaded ontology
|
|
128
|
+
*/
|
|
129
|
+
getLoadedOntology(): DomainOntology | undefined;
|
|
130
|
+
/**
|
|
131
|
+
* Abstract pattern with domain context
|
|
132
|
+
*/
|
|
133
|
+
abstractWithDomain(pattern: LearnedPattern): Promise<DomainAbstractionResult>;
|
|
134
|
+
/**
|
|
135
|
+
* Abstract multiple patterns
|
|
136
|
+
*/
|
|
137
|
+
abstractBatch(patterns: LearnedPattern[]): Promise<DomainAbstractionResult[]>;
|
|
138
|
+
/**
|
|
139
|
+
* Find related domain concepts
|
|
140
|
+
*/
|
|
141
|
+
findRelatedConcepts(term: string): DomainConcept[];
|
|
142
|
+
/**
|
|
143
|
+
* Get concept hierarchy
|
|
144
|
+
*/
|
|
145
|
+
getConceptHierarchy(conceptId: string): ConceptHierarchy;
|
|
146
|
+
/**
|
|
147
|
+
* Get statistics
|
|
148
|
+
*/
|
|
149
|
+
getStatistics(): AbstractionStatistics;
|
|
150
|
+
/**
|
|
151
|
+
* Reset statistics
|
|
152
|
+
*/
|
|
153
|
+
resetStatistics(): void;
|
|
154
|
+
/**
|
|
155
|
+
* Serialize to JSON
|
|
156
|
+
*/
|
|
157
|
+
toJSON(): string;
|
|
158
|
+
/**
|
|
159
|
+
* Deserialize from JSON
|
|
160
|
+
*/
|
|
161
|
+
fromJSON(json: string): void;
|
|
162
|
+
}
|
|
163
|
+
/**
|
|
164
|
+
* Default DomainAwareAbstractor implementation
|
|
165
|
+
*/
|
|
166
|
+
export declare class DefaultDomainAwareAbstractor implements DomainAwareAbstractor {
|
|
167
|
+
private config;
|
|
168
|
+
private ontology;
|
|
169
|
+
private statistics;
|
|
170
|
+
constructor(config?: Partial<DomainAwareAbstractorConfig>);
|
|
171
|
+
/**
|
|
172
|
+
* Load domain ontology
|
|
173
|
+
*/
|
|
174
|
+
loadOntology(ontology: DomainOntology): OntologyLoadResult;
|
|
175
|
+
/**
|
|
176
|
+
* Get loaded ontology
|
|
177
|
+
*/
|
|
178
|
+
getLoadedOntology(): DomainOntology | undefined;
|
|
179
|
+
/**
|
|
180
|
+
* Abstract pattern with domain context
|
|
181
|
+
*/
|
|
182
|
+
abstractWithDomain(pattern: LearnedPattern): Promise<DomainAbstractionResult>;
|
|
183
|
+
/**
|
|
184
|
+
* Abstract multiple patterns
|
|
185
|
+
*/
|
|
186
|
+
abstractBatch(patterns: LearnedPattern[]): Promise<DomainAbstractionResult[]>;
|
|
187
|
+
/**
|
|
188
|
+
* Match pattern to domain concepts
|
|
189
|
+
*/
|
|
190
|
+
private matchPatternToConcepts;
|
|
191
|
+
/**
|
|
192
|
+
* Find related domain concepts
|
|
193
|
+
*/
|
|
194
|
+
findRelatedConcepts(term: string): DomainConcept[];
|
|
195
|
+
/**
|
|
196
|
+
* Get concept hierarchy
|
|
197
|
+
*/
|
|
198
|
+
getConceptHierarchy(conceptId: string): ConceptHierarchy;
|
|
199
|
+
/**
|
|
200
|
+
* Update statistics
|
|
201
|
+
*/
|
|
202
|
+
private updateStatistics;
|
|
203
|
+
/**
|
|
204
|
+
* Get statistics
|
|
205
|
+
*/
|
|
206
|
+
getStatistics(): AbstractionStatistics;
|
|
207
|
+
/**
|
|
208
|
+
* Reset statistics
|
|
209
|
+
*/
|
|
210
|
+
resetStatistics(): void;
|
|
211
|
+
/**
|
|
212
|
+
* Serialize to JSON
|
|
213
|
+
*/
|
|
214
|
+
toJSON(): string;
|
|
215
|
+
/**
|
|
216
|
+
* Deserialize from JSON
|
|
217
|
+
*/
|
|
218
|
+
fromJSON(json: string): void;
|
|
219
|
+
}
|
|
220
|
+
/**
|
|
221
|
+
* Create a DomainAwareAbstractor instance
|
|
222
|
+
* @param config - Optional configuration
|
|
223
|
+
* @returns DomainAwareAbstractor instance
|
|
224
|
+
*/
|
|
225
|
+
export declare function createDomainAwareAbstractor(config?: Partial<DomainAwareAbstractorConfig>): DomainAwareAbstractor;
|
|
226
|
+
//# sourceMappingURL=DomainAwareAbstractor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DomainAwareAbstractor.d.ts","sourceRoot":"","sources":["../../src/domain/DomainAwareAbstractor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,237 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DomainAwareAbstractor - Domain-Aware Pattern Abstraction
|
|
3
|
+
* @module @nahisaho/musubix-library-learner
|
|
4
|
+
* @see TSK-LL-106
|
|
5
|
+
* @see DES-LL-106
|
|
6
|
+
* @see REQ-LL-106 Domain-aware pattern abstraction
|
|
7
|
+
*/
|
|
8
|
+
// ============================================================================
|
|
9
|
+
// Default Implementation
|
|
10
|
+
// ============================================================================
|
|
11
|
+
/**
|
|
12
|
+
* Default DomainAwareAbstractor implementation
|
|
13
|
+
*/
|
|
14
|
+
export class DefaultDomainAwareAbstractor {
|
|
15
|
+
config;
|
|
16
|
+
ontology;
|
|
17
|
+
statistics;
|
|
18
|
+
constructor(config) {
|
|
19
|
+
this.config = {
|
|
20
|
+
strictMode: config?.strictMode ?? false,
|
|
21
|
+
maxAbstractionDepth: config?.maxAbstractionDepth ?? 3,
|
|
22
|
+
minMatchConfidence: config?.minMatchConfidence ?? 0.5,
|
|
23
|
+
};
|
|
24
|
+
this.statistics = {
|
|
25
|
+
totalAbstractions: 0,
|
|
26
|
+
ontologiesLoaded: 0,
|
|
27
|
+
averageConfidence: 0,
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Load domain ontology
|
|
32
|
+
*/
|
|
33
|
+
loadOntology(ontology) {
|
|
34
|
+
const warnings = [];
|
|
35
|
+
// Validate ontology structure
|
|
36
|
+
if (!ontology.name) {
|
|
37
|
+
warnings.push('Ontology name is empty');
|
|
38
|
+
}
|
|
39
|
+
if (!ontology.concepts || ontology.concepts.length === 0) {
|
|
40
|
+
warnings.push('Ontology has no concepts');
|
|
41
|
+
}
|
|
42
|
+
// Store ontology
|
|
43
|
+
this.ontology = ontology;
|
|
44
|
+
this.statistics.ontologiesLoaded++;
|
|
45
|
+
return {
|
|
46
|
+
success: true,
|
|
47
|
+
warnings,
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Get loaded ontology
|
|
52
|
+
*/
|
|
53
|
+
getLoadedOntology() {
|
|
54
|
+
return this.ontology;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Abstract pattern with domain context
|
|
58
|
+
*/
|
|
59
|
+
async abstractWithDomain(pattern) {
|
|
60
|
+
const domainConcepts = [];
|
|
61
|
+
const constraints = [];
|
|
62
|
+
const suggestions = [];
|
|
63
|
+
let confidence = 0;
|
|
64
|
+
if (this.ontology) {
|
|
65
|
+
// Find matching concepts based on pattern name
|
|
66
|
+
const matchedConcepts = this.matchPatternToConcepts(pattern);
|
|
67
|
+
domainConcepts.push(...matchedConcepts.map((c) => c.id));
|
|
68
|
+
// Find applicable constraints
|
|
69
|
+
for (const concept of matchedConcepts) {
|
|
70
|
+
const conceptConstraints = this.ontology.constraints.filter((c) => c.concept === concept.id);
|
|
71
|
+
constraints.push(...conceptConstraints);
|
|
72
|
+
}
|
|
73
|
+
// Calculate confidence
|
|
74
|
+
confidence = matchedConcepts.length > 0 ? 0.8 : 0;
|
|
75
|
+
// Generate suggestions
|
|
76
|
+
if (matchedConcepts.length > 0) {
|
|
77
|
+
suggestions.push(`Consider using domain terminology: ${matchedConcepts.map((c) => c.name).join(', ')}`);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
// Update statistics
|
|
81
|
+
this.updateStatistics(confidence);
|
|
82
|
+
return {
|
|
83
|
+
pattern,
|
|
84
|
+
domainConcepts,
|
|
85
|
+
constraints,
|
|
86
|
+
confidence,
|
|
87
|
+
suggestions,
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Abstract multiple patterns
|
|
92
|
+
*/
|
|
93
|
+
async abstractBatch(patterns) {
|
|
94
|
+
return Promise.all(patterns.map((pattern) => this.abstractWithDomain(pattern)));
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Match pattern to domain concepts
|
|
98
|
+
*/
|
|
99
|
+
matchPatternToConcepts(pattern) {
|
|
100
|
+
if (!this.ontology)
|
|
101
|
+
return [];
|
|
102
|
+
const patternName = pattern.name.toLowerCase();
|
|
103
|
+
const matched = [];
|
|
104
|
+
for (const concept of this.ontology.concepts) {
|
|
105
|
+
// Check if pattern name contains concept name
|
|
106
|
+
const conceptName = concept.name.toLowerCase();
|
|
107
|
+
if (patternName.includes(conceptName)) {
|
|
108
|
+
matched.push(concept);
|
|
109
|
+
continue;
|
|
110
|
+
}
|
|
111
|
+
// Check if pattern name contains any property
|
|
112
|
+
for (const prop of concept.properties) {
|
|
113
|
+
if (patternName.includes(prop.toLowerCase())) {
|
|
114
|
+
matched.push(concept);
|
|
115
|
+
break;
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
return matched;
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Find related domain concepts
|
|
123
|
+
*/
|
|
124
|
+
findRelatedConcepts(term) {
|
|
125
|
+
if (!this.ontology)
|
|
126
|
+
return [];
|
|
127
|
+
const termLower = term.toLowerCase();
|
|
128
|
+
const related = [];
|
|
129
|
+
for (const concept of this.ontology.concepts) {
|
|
130
|
+
// Match by name
|
|
131
|
+
if (concept.name.toLowerCase().includes(termLower)) {
|
|
132
|
+
related.push(concept);
|
|
133
|
+
continue;
|
|
134
|
+
}
|
|
135
|
+
// Match by property
|
|
136
|
+
if (concept.properties.some((p) => p.toLowerCase().includes(termLower))) {
|
|
137
|
+
related.push(concept);
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
return related;
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Get concept hierarchy
|
|
144
|
+
*/
|
|
145
|
+
getConceptHierarchy(conceptId) {
|
|
146
|
+
const concept = this.ontology?.concepts.find((c) => c.id === conceptId);
|
|
147
|
+
if (!concept) {
|
|
148
|
+
return {
|
|
149
|
+
concept: {
|
|
150
|
+
id: conceptId,
|
|
151
|
+
name: 'Unknown',
|
|
152
|
+
description: '',
|
|
153
|
+
properties: [],
|
|
154
|
+
relations: [],
|
|
155
|
+
},
|
|
156
|
+
related: [],
|
|
157
|
+
depth: 0,
|
|
158
|
+
};
|
|
159
|
+
}
|
|
160
|
+
// Find related concepts through relations
|
|
161
|
+
const related = [];
|
|
162
|
+
for (const relation of concept.relations) {
|
|
163
|
+
const relatedConcept = this.ontology?.concepts.find((c) => c.id === relation.target);
|
|
164
|
+
if (relatedConcept) {
|
|
165
|
+
related.push(relatedConcept);
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
return {
|
|
169
|
+
concept,
|
|
170
|
+
related,
|
|
171
|
+
depth: 1,
|
|
172
|
+
};
|
|
173
|
+
}
|
|
174
|
+
/**
|
|
175
|
+
* Update statistics
|
|
176
|
+
*/
|
|
177
|
+
updateStatistics(confidence) {
|
|
178
|
+
const prevTotal = this.statistics.totalAbstractions;
|
|
179
|
+
const prevAvg = this.statistics.averageConfidence;
|
|
180
|
+
this.statistics.totalAbstractions++;
|
|
181
|
+
this.statistics.averageConfidence =
|
|
182
|
+
(prevAvg * prevTotal + confidence) / (prevTotal + 1);
|
|
183
|
+
}
|
|
184
|
+
/**
|
|
185
|
+
* Get statistics
|
|
186
|
+
*/
|
|
187
|
+
getStatistics() {
|
|
188
|
+
return { ...this.statistics };
|
|
189
|
+
}
|
|
190
|
+
/**
|
|
191
|
+
* Reset statistics
|
|
192
|
+
*/
|
|
193
|
+
resetStatistics() {
|
|
194
|
+
this.statistics = {
|
|
195
|
+
totalAbstractions: 0,
|
|
196
|
+
ontologiesLoaded: this.statistics.ontologiesLoaded,
|
|
197
|
+
averageConfidence: 0,
|
|
198
|
+
};
|
|
199
|
+
}
|
|
200
|
+
/**
|
|
201
|
+
* Serialize to JSON
|
|
202
|
+
*/
|
|
203
|
+
toJSON() {
|
|
204
|
+
return JSON.stringify({
|
|
205
|
+
config: this.config,
|
|
206
|
+
ontology: this.ontology,
|
|
207
|
+
statistics: this.statistics,
|
|
208
|
+
});
|
|
209
|
+
}
|
|
210
|
+
/**
|
|
211
|
+
* Deserialize from JSON
|
|
212
|
+
*/
|
|
213
|
+
fromJSON(json) {
|
|
214
|
+
const data = JSON.parse(json);
|
|
215
|
+
if (data.config) {
|
|
216
|
+
this.config = { ...this.config, ...data.config };
|
|
217
|
+
}
|
|
218
|
+
if (data.ontology) {
|
|
219
|
+
this.ontology = data.ontology;
|
|
220
|
+
}
|
|
221
|
+
if (data.statistics) {
|
|
222
|
+
this.statistics = { ...this.statistics, ...data.statistics };
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
// ============================================================================
|
|
227
|
+
// Factory Function
|
|
228
|
+
// ============================================================================
|
|
229
|
+
/**
|
|
230
|
+
* Create a DomainAwareAbstractor instance
|
|
231
|
+
* @param config - Optional configuration
|
|
232
|
+
* @returns DomainAwareAbstractor instance
|
|
233
|
+
*/
|
|
234
|
+
export function createDomainAwareAbstractor(config) {
|
|
235
|
+
return new DefaultDomainAwareAbstractor(config);
|
|
236
|
+
}
|
|
237
|
+
//# sourceMappingURL=DomainAwareAbstractor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DomainAwareAbstractor.js","sourceRoot":"","sources":["../../src/domain/DomainAwareAbstractor.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAqLH,+EAA+E;AAC/E,yBAAyB;AACzB,+EAA+E;AAE/E;;GAEG;AACH,MAAM,OAAO,4BAA4B;IAC/B,MAAM,CAA8B;IACpC,QAAQ,CAA6B;IACrC,UAAU,CAAwB;IAE1C,YAAY,MAA6C;QACvD,IAAI,CAAC,MAAM,GAAG;YACZ,UAAU,EAAE,MAAM,EAAE,UAAU,IAAI,KAAK;YACvC,mBAAmB,EAAE,MAAM,EAAE,mBAAmB,IAAI,CAAC;YACrD,kBAAkB,EAAE,MAAM,EAAE,kBAAkB,IAAI,GAAG;SACtD,CAAC;QAEF,IAAI,CAAC,UAAU,GAAG;YAChB,iBAAiB,EAAE,CAAC;YACpB,gBAAgB,EAAE,CAAC;YACnB,iBAAiB,EAAE,CAAC;SACrB,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,YAAY,CAAC,QAAwB;QACnC,MAAM,QAAQ,GAAa,EAAE,CAAC;QAE9B,8BAA8B;QAC9B,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;YACnB,QAAQ,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;QAC1C,CAAC;QAED,IAAI,CAAC,QAAQ,CAAC,QAAQ,IAAI,QAAQ,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzD,QAAQ,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;QAC5C,CAAC;QAED,iBAAiB;QACjB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,UAAU,CAAC,gBAAgB,EAAE,CAAC;QAEnC,OAAO;YACL,OAAO,EAAE,IAAI;YACb,QAAQ;SACT,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,iBAAiB;QACf,OAAO,IAAI,CAAC,QAAQ,CAAC;IACvB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,kBAAkB,CACtB,OAAuB;QAEvB,MAAM,cAAc,GAAa,EAAE,CAAC;QACpC,MAAM,WAAW,GAAuB,EAAE,CAAC;QAC3C,MAAM,WAAW,GAAa,EAAE,CAAC;QACjC,IAAI,UAAU,GAAG,CAAC,CAAC;QAEnB,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClB,+CAA+C;YAC/C,MAAM,eAAe,GAAG,IAAI,CAAC,sBAAsB,CAAC,OAAO,CAAC,CAAC;YAC7D,cAAc,CAAC,IAAI,CAAC,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YAEzD,8BAA8B;YAC9B,KAAK,MAAM,OAAO,IAAI,eAAe,EAAE,CAAC;gBACtC,MAAM,kBAAkB,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,MAAM,CACzD,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,KAAK,OAAO,CAAC,EAAE,CAChC,CAAC;gBACF,WAAW,CAAC,IAAI,CAAC,GAAG,kBAAkB,CAAC,CAAC;YAC1C,CAAC;YAED,uBAAuB;YACvB,UAAU,GAAG,eAAe,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YAElD,uBAAuB;YACvB,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC/B,WAAW,CAAC,IAAI,CACd,sCAAsC,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CACtF,CAAC;YACJ,CAAC;QACH,CAAC;QAED,oBAAoB;QACpB,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC;QAElC,OAAO;YACL,OAAO;YACP,cAAc;YACd,WAAW;YACX,UAAU;YACV,WAAW;SACZ,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,aAAa,CACjB,QAA0B;QAE1B,OAAO,OAAO,CAAC,GAAG,CAChB,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC,CAC5D,CAAC;IACJ,CAAC;IAED;;OAEG;IACK,sBAAsB,CAAC,OAAuB;QACpD,IAAI,CAAC,IAAI,CAAC,QAAQ;YAAE,OAAO,EAAE,CAAC;QAE9B,MAAM,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;QAC/C,MAAM,OAAO,GAAoB,EAAE,CAAC;QAEpC,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC;YAC7C,8CAA8C;YAC9C,MAAM,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;YAC/C,IAAI,WAAW,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;gBACtC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBACtB,SAAS;YACX,CAAC;YAED,8CAA8C;YAC9C,KAAK,MAAM,IAAI,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;gBACtC,IAAI,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,EAAE,CAAC;oBAC7C,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;oBACtB,MAAM;gBACR,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;IAED;;OAEG;IACH,mBAAmB,CAAC,IAAY;QAC9B,IAAI,CAAC,IAAI,CAAC,QAAQ;YAAE,OAAO,EAAE,CAAC;QAE9B,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;QACrC,MAAM,OAAO,GAAoB,EAAE,CAAC;QAEpC,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC;YAC7C,gBAAgB;YAChB,IAAI,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;gBACnD,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBACtB,SAAS;YACX,CAAC;YAED,oBAAoB;YACpB,IAAI,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC;gBACxE,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACxB,CAAC;QACH,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;IAED;;OAEG;IACH,mBAAmB,CAAC,SAAiB;QACnC,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,SAAS,CAAC,CAAC;QAExE,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO;gBACL,OAAO,EAAE;oBACP,EAAE,EAAE,SAAS;oBACb,IAAI,EAAE,SAAS;oBACf,WAAW,EAAE,EAAE;oBACf,UAAU,EAAE,EAAE;oBACd,SAAS,EAAE,EAAE;iBACd;gBACD,OAAO,EAAE,EAAE;gBACX,KAAK,EAAE,CAAC;aACT,CAAC;QACJ,CAAC;QAED,0CAA0C;QAC1C,MAAM,OAAO,GAAoB,EAAE,CAAC;QACpC,KAAK,MAAM,QAAQ,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;YACzC,MAAM,cAAc,GAAG,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,IAAI,CACjD,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,QAAQ,CAAC,MAAM,CAChC,CAAC;YACF,IAAI,cAAc,EAAE,CAAC;gBACnB,OAAO,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;YAC/B,CAAC;QACH,CAAC;QAED,OAAO;YACL,OAAO;YACP,OAAO;YACP,KAAK,EAAE,CAAC;SACT,CAAC;IACJ,CAAC;IAED;;OAEG;IACK,gBAAgB,CAAC,UAAkB;QACzC,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,iBAAiB,CAAC;QACpD,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,iBAAiB,CAAC;QAElD,IAAI,CAAC,UAAU,CAAC,iBAAiB,EAAE,CAAC;QACpC,IAAI,CAAC,UAAU,CAAC,iBAAiB;YAC/B,CAAC,OAAO,GAAG,SAAS,GAAG,UAAU,CAAC,GAAG,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC;IACzD,CAAC;IAED;;OAEG;IACH,aAAa;QACX,OAAO,EAAE,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;IAChC,CAAC;IAED;;OAEG;IACH,eAAe;QACb,IAAI,CAAC,UAAU,GAAG;YAChB,iBAAiB,EAAE,CAAC;YACpB,gBAAgB,EAAE,IAAI,CAAC,UAAU,CAAC,gBAAgB;YAClD,iBAAiB,EAAE,CAAC;SACrB,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,MAAM;QACJ,OAAO,IAAI,CAAC,SAAS,CAAC;YACpB,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,UAAU,EAAE,IAAI,CAAC,UAAU;SAC5B,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACH,QAAQ,CAAC,IAAY;QACnB,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAE9B,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,IAAI,CAAC,MAAM,GAAG,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;QACnD,CAAC;QAED,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;QAChC,CAAC;QAED,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACpB,IAAI,CAAC,UAAU,GAAG,EAAE,GAAG,IAAI,CAAC,UAAU,EAAE,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;QAC/D,CAAC;IACH,CAAC;CACF;AAED,+EAA+E;AAC/E,mBAAmB;AACnB,+EAA+E;AAE/E;;;;GAIG;AACH,MAAM,UAAU,2BAA2B,CACzC,MAA6C;IAE7C,OAAO,IAAI,4BAA4B,CAAC,MAAM,CAAC,CAAC;AAClD,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DomainAwareAbstractor.test.d.ts","sourceRoot":"","sources":["../../../src/domain/__tests__/DomainAwareAbstractor.test.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG"}
|