@higher.archi/boe 1.0.25 → 1.0.27
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/engines/sentiment/compiler.d.ts +12 -0
- package/dist/engines/sentiment/compiler.d.ts.map +1 -0
- package/dist/engines/sentiment/compiler.js +111 -0
- package/dist/engines/sentiment/compiler.js.map +1 -0
- package/dist/engines/sentiment/engine.d.ts +71 -0
- package/dist/engines/sentiment/engine.d.ts.map +1 -0
- package/dist/engines/sentiment/engine.js +208 -0
- package/dist/engines/sentiment/engine.js.map +1 -0
- package/dist/engines/sentiment/index.d.ts +9 -0
- package/dist/engines/sentiment/index.d.ts.map +1 -0
- package/dist/engines/sentiment/index.js +21 -0
- package/dist/engines/sentiment/index.js.map +1 -0
- package/dist/engines/sentiment/strategy.d.ts +21 -0
- package/dist/engines/sentiment/strategy.d.ts.map +1 -0
- package/dist/engines/sentiment/strategy.js +397 -0
- package/dist/engines/sentiment/strategy.js.map +1 -0
- package/dist/engines/sentiment/types.d.ts +134 -0
- package/dist/engines/sentiment/types.d.ts.map +1 -0
- package/dist/engines/sentiment/types.js +31 -0
- package/dist/engines/sentiment/types.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +12 -3
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/src/engines/sentiment/compiler.ts +138 -0
- package/src/engines/sentiment/engine.ts +274 -0
- package/src/engines/sentiment/index.ts +42 -0
- package/src/engines/sentiment/strategy.ts +513 -0
- package/src/engines/sentiment/types.ts +198 -0
- package/src/index.ts +32 -0
|
@@ -0,0 +1,397 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Sentiment Engine Strategy
|
|
4
|
+
*
|
|
5
|
+
* Core execution logic for all sentiment strategies:
|
|
6
|
+
* - token-level: Score individual tokens in the full text
|
|
7
|
+
* - document-level: Split into sentences, score each, average compounds
|
|
8
|
+
* - aspect-based: Match sentences to aspect terms, score per aspect
|
|
9
|
+
*/
|
|
10
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
11
|
+
exports.sentimentStrategy = exports.SentimentExecutor = void 0;
|
|
12
|
+
const types_1 = require("./types");
|
|
13
|
+
// ========================================
|
|
14
|
+
// Helpers
|
|
15
|
+
// ========================================
|
|
16
|
+
/** Split text into tokens on whitespace and punctuation boundaries */
|
|
17
|
+
function tokenize(text) {
|
|
18
|
+
return text.match(/\w+(?:'\w+)?/g) ?? [];
|
|
19
|
+
}
|
|
20
|
+
/** Check if a token is ALL CAPS (must be >= 2 chars) */
|
|
21
|
+
function isAllCaps(token) {
|
|
22
|
+
return token.length >= 2 && token === token.toUpperCase() && /[A-Z]/.test(token);
|
|
23
|
+
}
|
|
24
|
+
/** Count trailing exclamation marks in text */
|
|
25
|
+
function countTrailingExclamations(text) {
|
|
26
|
+
const match = text.match(/!+\s*$/);
|
|
27
|
+
return match ? match[0].replace(/\s/g, '').length : 0;
|
|
28
|
+
}
|
|
29
|
+
/** Split text into sentences using a regex pattern */
|
|
30
|
+
function splitSentences(text, pattern) {
|
|
31
|
+
return text
|
|
32
|
+
.split(pattern)
|
|
33
|
+
.map(s => s.trim())
|
|
34
|
+
.filter(s => s.length > 0);
|
|
35
|
+
}
|
|
36
|
+
/** Sliding window multi-word idiom matching */
|
|
37
|
+
function scanIdioms(tokens, idioms, maxLen) {
|
|
38
|
+
if (maxLen === 0)
|
|
39
|
+
return [];
|
|
40
|
+
const matches = [];
|
|
41
|
+
const lowerTokens = tokens.map(t => t.toLowerCase());
|
|
42
|
+
for (let i = 0; i < lowerTokens.length; i++) {
|
|
43
|
+
// Try longest match first
|
|
44
|
+
for (let len = Math.min(maxLen, lowerTokens.length - i); len >= 2; len--) {
|
|
45
|
+
const phrase = lowerTokens.slice(i, i + len).join(' ');
|
|
46
|
+
if (phrase in idioms) {
|
|
47
|
+
matches.push({
|
|
48
|
+
startIdx: i,
|
|
49
|
+
endIdx: i + len - 1,
|
|
50
|
+
phrase,
|
|
51
|
+
score: idioms[phrase]
|
|
52
|
+
});
|
|
53
|
+
break; // longest match wins for this position
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
return matches;
|
|
58
|
+
}
|
|
59
|
+
/** Core token scoring loop */
|
|
60
|
+
function scoreTokens(tokens, lexicon, capsBoost, negationWindow, onToken) {
|
|
61
|
+
const results = [];
|
|
62
|
+
// Pre-scan idioms
|
|
63
|
+
const idiomMatches = scanIdioms(tokens, lexicon.idioms, lexicon._idiomMaxLength);
|
|
64
|
+
const idiomCovered = new Set();
|
|
65
|
+
for (const match of idiomMatches) {
|
|
66
|
+
for (let i = match.startIdx; i <= match.endIdx; i++) {
|
|
67
|
+
idiomCovered.add(i);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
// Insert idiom scores at their start positions
|
|
71
|
+
const idiomAtStart = new Map();
|
|
72
|
+
for (const match of idiomMatches) {
|
|
73
|
+
idiomAtStart.set(match.startIdx, { phrase: match.phrase, score: match.score });
|
|
74
|
+
}
|
|
75
|
+
let negationCountdown = 0;
|
|
76
|
+
let pendingBooster = 0;
|
|
77
|
+
for (let i = 0; i < tokens.length; i++) {
|
|
78
|
+
const token = tokens[i];
|
|
79
|
+
const normalized = token.toLowerCase();
|
|
80
|
+
// Check if this token starts an idiom
|
|
81
|
+
if (idiomAtStart.has(i)) {
|
|
82
|
+
const idiom = idiomAtStart.get(i);
|
|
83
|
+
let adjustedScore = idiom.score;
|
|
84
|
+
const modifiers = ['idiom'];
|
|
85
|
+
if (negationCountdown > 0) {
|
|
86
|
+
adjustedScore *= -1;
|
|
87
|
+
modifiers.push('negated');
|
|
88
|
+
negationCountdown--;
|
|
89
|
+
}
|
|
90
|
+
if (pendingBooster !== 0) {
|
|
91
|
+
adjustedScore *= pendingBooster;
|
|
92
|
+
modifiers.push('boosted');
|
|
93
|
+
pendingBooster = 0;
|
|
94
|
+
}
|
|
95
|
+
const result = {
|
|
96
|
+
token: idiom.phrase,
|
|
97
|
+
rawScore: idiom.score,
|
|
98
|
+
adjustedScore,
|
|
99
|
+
modifiers
|
|
100
|
+
};
|
|
101
|
+
results.push(result);
|
|
102
|
+
if (onToken)
|
|
103
|
+
onToken(result);
|
|
104
|
+
continue;
|
|
105
|
+
}
|
|
106
|
+
// Skip tokens covered by an idiom (not at start position)
|
|
107
|
+
if (idiomCovered.has(i))
|
|
108
|
+
continue;
|
|
109
|
+
// Check negation
|
|
110
|
+
if (lexicon.negation.has(normalized)) {
|
|
111
|
+
negationCountdown = negationWindow;
|
|
112
|
+
const result = {
|
|
113
|
+
token,
|
|
114
|
+
rawScore: 0,
|
|
115
|
+
adjustedScore: 0,
|
|
116
|
+
modifiers: []
|
|
117
|
+
};
|
|
118
|
+
results.push(result);
|
|
119
|
+
if (onToken)
|
|
120
|
+
onToken(result);
|
|
121
|
+
continue;
|
|
122
|
+
}
|
|
123
|
+
// Check booster
|
|
124
|
+
if (normalized in lexicon.boosters) {
|
|
125
|
+
pendingBooster = lexicon.boosters[normalized];
|
|
126
|
+
const result = {
|
|
127
|
+
token,
|
|
128
|
+
rawScore: 0,
|
|
129
|
+
adjustedScore: 0,
|
|
130
|
+
modifiers: []
|
|
131
|
+
};
|
|
132
|
+
results.push(result);
|
|
133
|
+
if (onToken)
|
|
134
|
+
onToken(result);
|
|
135
|
+
continue;
|
|
136
|
+
}
|
|
137
|
+
// Lexicon lookup
|
|
138
|
+
const rawScore = lexicon.lexicon[normalized] ?? 0;
|
|
139
|
+
if (rawScore === 0) {
|
|
140
|
+
const result = {
|
|
141
|
+
token,
|
|
142
|
+
rawScore: 0,
|
|
143
|
+
adjustedScore: 0,
|
|
144
|
+
modifiers: []
|
|
145
|
+
};
|
|
146
|
+
results.push(result);
|
|
147
|
+
if (onToken)
|
|
148
|
+
onToken(result);
|
|
149
|
+
continue;
|
|
150
|
+
}
|
|
151
|
+
let adjustedScore = rawScore;
|
|
152
|
+
const modifiers = [];
|
|
153
|
+
// Apply pending booster
|
|
154
|
+
if (pendingBooster !== 0) {
|
|
155
|
+
adjustedScore *= pendingBooster;
|
|
156
|
+
modifiers.push('boosted');
|
|
157
|
+
pendingBooster = 0;
|
|
158
|
+
}
|
|
159
|
+
// Apply negation
|
|
160
|
+
if (negationCountdown > 0) {
|
|
161
|
+
adjustedScore *= -1;
|
|
162
|
+
modifiers.push('negated');
|
|
163
|
+
negationCountdown--;
|
|
164
|
+
}
|
|
165
|
+
// Apply caps boost
|
|
166
|
+
if (isAllCaps(token)) {
|
|
167
|
+
adjustedScore *= capsBoost;
|
|
168
|
+
modifiers.push('caps');
|
|
169
|
+
}
|
|
170
|
+
const result = {
|
|
171
|
+
token,
|
|
172
|
+
rawScore,
|
|
173
|
+
adjustedScore,
|
|
174
|
+
modifiers
|
|
175
|
+
};
|
|
176
|
+
results.push(result);
|
|
177
|
+
if (onToken)
|
|
178
|
+
onToken(result);
|
|
179
|
+
}
|
|
180
|
+
return results;
|
|
181
|
+
}
|
|
182
|
+
/** Compute compound score: normalize via sum / sqrt(sum^2 + alpha), apply exclamation boost */
|
|
183
|
+
function computeCompound(tokenScores, exclamationBoost, exclamationCount) {
|
|
184
|
+
const alpha = 15;
|
|
185
|
+
const sum = tokenScores.reduce((acc, t) => acc + t.adjustedScore, 0);
|
|
186
|
+
let compound = sum / Math.sqrt(sum * sum + alpha);
|
|
187
|
+
// Apply exclamation boost
|
|
188
|
+
if (exclamationCount > 0) {
|
|
189
|
+
const boost = Math.pow(exclamationBoost, Math.min(exclamationCount, 4));
|
|
190
|
+
compound = compound * boost;
|
|
191
|
+
}
|
|
192
|
+
// Clamp to [-1, 1]
|
|
193
|
+
return Math.max(-1, Math.min(1, compound));
|
|
194
|
+
}
|
|
195
|
+
/** Compute positive/negative/neutral proportions from token scores */
|
|
196
|
+
function computeProportions(tokenScores) {
|
|
197
|
+
if (tokenScores.length === 0) {
|
|
198
|
+
return { positive: 0, negative: 0, neutral: 1 };
|
|
199
|
+
}
|
|
200
|
+
let pos = 0;
|
|
201
|
+
let neg = 0;
|
|
202
|
+
let neu = 0;
|
|
203
|
+
for (const t of tokenScores) {
|
|
204
|
+
if (t.adjustedScore > 0)
|
|
205
|
+
pos++;
|
|
206
|
+
else if (t.adjustedScore < 0)
|
|
207
|
+
neg++;
|
|
208
|
+
else
|
|
209
|
+
neu++;
|
|
210
|
+
}
|
|
211
|
+
const total = tokenScores.length;
|
|
212
|
+
return {
|
|
213
|
+
positive: round(pos / total, 4),
|
|
214
|
+
negative: round(neg / total, 4),
|
|
215
|
+
neutral: round(neu / total, 4)
|
|
216
|
+
};
|
|
217
|
+
}
|
|
218
|
+
function round(value, decimals) {
|
|
219
|
+
const factor = Math.pow(10, decimals);
|
|
220
|
+
return Math.round(value * factor) / factor;
|
|
221
|
+
}
|
|
222
|
+
// ========================================
|
|
223
|
+
// Executor
|
|
224
|
+
// ========================================
|
|
225
|
+
class SentimentExecutor {
|
|
226
|
+
run(ruleSet, wm, options = {}) {
|
|
227
|
+
const startTime = performance.now();
|
|
228
|
+
// Gather all text facts from working memory
|
|
229
|
+
const facts = wm.getAll();
|
|
230
|
+
const texts = extractTexts(facts);
|
|
231
|
+
const fullText = texts.join(' ');
|
|
232
|
+
return this.scoreText(ruleSet, fullText, options, startTime);
|
|
233
|
+
}
|
|
234
|
+
/** Score a single text string directly (no WorkingMemory involved) */
|
|
235
|
+
scoreText(ruleSet, text, options = {}, startTime = performance.now()) {
|
|
236
|
+
switch (ruleSet.strategy) {
|
|
237
|
+
case 'token-level':
|
|
238
|
+
return this.runTokenLevel(ruleSet, text, options, startTime);
|
|
239
|
+
case 'document-level':
|
|
240
|
+
return this.runDocumentLevel(ruleSet, text, options, startTime);
|
|
241
|
+
case 'aspect-based':
|
|
242
|
+
return this.runAspectBased(ruleSet, text, options, startTime);
|
|
243
|
+
default:
|
|
244
|
+
throw new Error(`Unknown sentiment strategy: '${ruleSet.strategy}'`);
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
// ========================================
|
|
248
|
+
// Token-Level Strategy
|
|
249
|
+
// ========================================
|
|
250
|
+
runTokenLevel(ruleSet, text, options, startTime) {
|
|
251
|
+
const tokens = tokenize(text);
|
|
252
|
+
const exclamationCount = countTrailingExclamations(text);
|
|
253
|
+
const tokenScores = scoreTokens(tokens, ruleSet.lexicon, ruleSet.config.capsBoost, ruleSet.config.negationWindow, options.onToken);
|
|
254
|
+
const compound = computeCompound(tokenScores, ruleSet.config.exclamationBoost, exclamationCount);
|
|
255
|
+
const proportions = computeProportions(tokenScores);
|
|
256
|
+
const executionTimeMs = round((performance.now() - startTime) * 100, 0) / 100;
|
|
257
|
+
return {
|
|
258
|
+
compound: round(compound, 4),
|
|
259
|
+
label: (0, types_1.resolveSentimentLabel)(compound),
|
|
260
|
+
positive: proportions.positive,
|
|
261
|
+
negative: proportions.negative,
|
|
262
|
+
neutral: proportions.neutral,
|
|
263
|
+
tokens: tokenScores,
|
|
264
|
+
strategy: 'token-level',
|
|
265
|
+
executionTimeMs
|
|
266
|
+
};
|
|
267
|
+
}
|
|
268
|
+
// ========================================
|
|
269
|
+
// Document-Level Strategy
|
|
270
|
+
// ========================================
|
|
271
|
+
runDocumentLevel(ruleSet, text, options, startTime) {
|
|
272
|
+
const sentences = splitSentences(text, ruleSet.sentenceSplitPattern);
|
|
273
|
+
if (sentences.length === 0) {
|
|
274
|
+
const executionTimeMs = round((performance.now() - startTime) * 100, 0) / 100;
|
|
275
|
+
return {
|
|
276
|
+
compound: 0,
|
|
277
|
+
label: 'neutral',
|
|
278
|
+
positive: 0,
|
|
279
|
+
negative: 0,
|
|
280
|
+
neutral: 1,
|
|
281
|
+
sentences: [],
|
|
282
|
+
strategy: 'document-level',
|
|
283
|
+
executionTimeMs
|
|
284
|
+
};
|
|
285
|
+
}
|
|
286
|
+
const sentenceResults = [];
|
|
287
|
+
for (const sentenceText of sentences) {
|
|
288
|
+
const tokens = tokenize(sentenceText);
|
|
289
|
+
const exclamationCount = countTrailingExclamations(sentenceText);
|
|
290
|
+
const tokenScores = scoreTokens(tokens, ruleSet.lexicon, ruleSet.config.capsBoost, ruleSet.config.negationWindow, options.onToken);
|
|
291
|
+
const compound = computeCompound(tokenScores, ruleSet.config.exclamationBoost, exclamationCount);
|
|
292
|
+
sentenceResults.push({
|
|
293
|
+
text: sentenceText,
|
|
294
|
+
compound: round(compound, 4),
|
|
295
|
+
label: (0, types_1.resolveSentimentLabel)(compound),
|
|
296
|
+
tokens: tokenScores
|
|
297
|
+
});
|
|
298
|
+
}
|
|
299
|
+
// Overall compound is average of sentence compounds
|
|
300
|
+
const avgCompound = sentenceResults.reduce((sum, s) => sum + s.compound, 0) / sentenceResults.length;
|
|
301
|
+
// Aggregate proportions across all tokens
|
|
302
|
+
const allTokens = sentenceResults.flatMap(s => s.tokens);
|
|
303
|
+
const proportions = computeProportions(allTokens);
|
|
304
|
+
const executionTimeMs = round((performance.now() - startTime) * 100, 0) / 100;
|
|
305
|
+
return {
|
|
306
|
+
compound: round(avgCompound, 4),
|
|
307
|
+
label: (0, types_1.resolveSentimentLabel)(avgCompound),
|
|
308
|
+
positive: proportions.positive,
|
|
309
|
+
negative: proportions.negative,
|
|
310
|
+
neutral: proportions.neutral,
|
|
311
|
+
sentences: sentenceResults,
|
|
312
|
+
strategy: 'document-level',
|
|
313
|
+
executionTimeMs
|
|
314
|
+
};
|
|
315
|
+
}
|
|
316
|
+
// ========================================
|
|
317
|
+
// Aspect-Based Strategy
|
|
318
|
+
// ========================================
|
|
319
|
+
runAspectBased(ruleSet, text, options, startTime) {
|
|
320
|
+
// Split into sentences using default pattern
|
|
321
|
+
const sentences = splitSentences(text, /[.!?]+/);
|
|
322
|
+
const aspectResults = [];
|
|
323
|
+
for (const aspect of ruleSet.aspects) {
|
|
324
|
+
const matchingSentences = [];
|
|
325
|
+
for (const sentenceText of sentences) {
|
|
326
|
+
// Check if sentence contains the aspect term
|
|
327
|
+
if (!sentenceText.toLowerCase().includes(aspect))
|
|
328
|
+
continue;
|
|
329
|
+
const tokens = tokenize(sentenceText);
|
|
330
|
+
const exclamationCount = countTrailingExclamations(sentenceText);
|
|
331
|
+
const tokenScores = scoreTokens(tokens, ruleSet.lexicon, ruleSet.config.capsBoost, ruleSet.config.negationWindow, options.onToken);
|
|
332
|
+
const compound = computeCompound(tokenScores, ruleSet.config.exclamationBoost, exclamationCount);
|
|
333
|
+
matchingSentences.push({
|
|
334
|
+
text: sentenceText,
|
|
335
|
+
compound: round(compound, 4),
|
|
336
|
+
label: (0, types_1.resolveSentimentLabel)(compound),
|
|
337
|
+
tokens: tokenScores
|
|
338
|
+
});
|
|
339
|
+
}
|
|
340
|
+
const aspectCompound = matchingSentences.length > 0
|
|
341
|
+
? matchingSentences.reduce((sum, s) => sum + s.compound, 0) / matchingSentences.length
|
|
342
|
+
: 0;
|
|
343
|
+
aspectResults.push({
|
|
344
|
+
aspect,
|
|
345
|
+
compound: round(aspectCompound, 4),
|
|
346
|
+
label: (0, types_1.resolveSentimentLabel)(aspectCompound),
|
|
347
|
+
sentences: matchingSentences
|
|
348
|
+
});
|
|
349
|
+
}
|
|
350
|
+
// Overall compound is average of aspect compounds (only aspects with data)
|
|
351
|
+
const aspectsWithData = aspectResults.filter(a => a.sentences.length > 0);
|
|
352
|
+
const avgCompound = aspectsWithData.length > 0
|
|
353
|
+
? aspectsWithData.reduce((sum, a) => sum + a.compound, 0) / aspectsWithData.length
|
|
354
|
+
: 0;
|
|
355
|
+
// Aggregate proportions from all aspect tokens
|
|
356
|
+
const allTokens = aspectResults.flatMap(a => a.sentences.flatMap(s => s.tokens));
|
|
357
|
+
const proportions = computeProportions(allTokens);
|
|
358
|
+
const executionTimeMs = round((performance.now() - startTime) * 100, 0) / 100;
|
|
359
|
+
return {
|
|
360
|
+
compound: round(avgCompound, 4),
|
|
361
|
+
label: (0, types_1.resolveSentimentLabel)(avgCompound),
|
|
362
|
+
positive: proportions.positive,
|
|
363
|
+
negative: proportions.negative,
|
|
364
|
+
neutral: proportions.neutral,
|
|
365
|
+
aspects: aspectResults,
|
|
366
|
+
strategy: 'aspect-based',
|
|
367
|
+
executionTimeMs
|
|
368
|
+
};
|
|
369
|
+
}
|
|
370
|
+
}
|
|
371
|
+
exports.SentimentExecutor = SentimentExecutor;
|
|
372
|
+
// ========================================
|
|
373
|
+
// Module-Level Helpers
|
|
374
|
+
// ========================================
|
|
375
|
+
/** Extract text content from facts - looks for text/content/body/message string fields */
|
|
376
|
+
function extractTexts(facts) {
|
|
377
|
+
const texts = [];
|
|
378
|
+
for (const fact of facts) {
|
|
379
|
+
const data = fact.data;
|
|
380
|
+
if (typeof data === 'string') {
|
|
381
|
+
texts.push(data);
|
|
382
|
+
}
|
|
383
|
+
else if (data && typeof data === 'object') {
|
|
384
|
+
// Try common text field names
|
|
385
|
+
for (const key of ['text', 'content', 'body', 'message', 'review', 'comment', 'feedback']) {
|
|
386
|
+
if (typeof data[key] === 'string') {
|
|
387
|
+
texts.push(data[key]);
|
|
388
|
+
break;
|
|
389
|
+
}
|
|
390
|
+
}
|
|
391
|
+
}
|
|
392
|
+
}
|
|
393
|
+
return texts;
|
|
394
|
+
}
|
|
395
|
+
/** Singleton instance */
|
|
396
|
+
exports.sentimentStrategy = new SentimentExecutor();
|
|
397
|
+
//# sourceMappingURL=strategy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"strategy.js","sourceRoot":"","sources":["../../../src/engines/sentiment/strategy.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Sentiment Engine Types
|
|
3
|
+
*
|
|
4
|
+
* Text sentiment analysis engine that scores text using dictionary-lookup
|
|
5
|
+
* and heuristic rules. Supports token-level, document-level, and aspect-based
|
|
6
|
+
* analysis strategies with injectable lexicon configuration.
|
|
7
|
+
*/
|
|
8
|
+
/** Sentiment analysis strategy */
|
|
9
|
+
export type SentimentStrategy = 'token-level' | 'document-level' | 'aspect-based';
|
|
10
|
+
/** Resolved sentiment label */
|
|
11
|
+
export type SentimentLabel = 'positive' | 'neutral' | 'negative' | 'mixed';
|
|
12
|
+
/** Injectable lexicon configuration (user-facing, optional fields) */
|
|
13
|
+
export type SentimentLexicon = {
|
|
14
|
+
lexicon: Record<string, number>;
|
|
15
|
+
boosters?: Record<string, number>;
|
|
16
|
+
negation?: string[];
|
|
17
|
+
idioms?: Record<string, number>;
|
|
18
|
+
};
|
|
19
|
+
/** Compiled lexicon with all fields required, keys lowercased */
|
|
20
|
+
export type CompiledSentimentLexicon = {
|
|
21
|
+
lexicon: Record<string, number>;
|
|
22
|
+
boosters: Record<string, number>;
|
|
23
|
+
negation: Set<string>;
|
|
24
|
+
idioms: Record<string, number>;
|
|
25
|
+
_idiomMaxLength: number;
|
|
26
|
+
};
|
|
27
|
+
export declare const SENTIMENT_DEFAULTS: {
|
|
28
|
+
readonly capsBoost: 1.2;
|
|
29
|
+
readonly exclamationBoost: 1.1;
|
|
30
|
+
readonly negationWindow: 3;
|
|
31
|
+
};
|
|
32
|
+
export type SentimentConfig = {
|
|
33
|
+
capsBoost?: number;
|
|
34
|
+
exclamationBoost?: number;
|
|
35
|
+
negationWindow?: number;
|
|
36
|
+
};
|
|
37
|
+
type SentimentRuleSetBase = {
|
|
38
|
+
id: string;
|
|
39
|
+
name?: string;
|
|
40
|
+
mode: 'sentiment';
|
|
41
|
+
lexiconConfig: SentimentLexicon;
|
|
42
|
+
config?: SentimentConfig;
|
|
43
|
+
};
|
|
44
|
+
/** Token-level: score individual tokens in the full text */
|
|
45
|
+
export type TokenLevelSentimentRuleSet = SentimentRuleSetBase & {
|
|
46
|
+
strategy: 'token-level';
|
|
47
|
+
};
|
|
48
|
+
/** Document-level: split into sentences, score each, average */
|
|
49
|
+
export type DocumentLevelSentimentRuleSet = SentimentRuleSetBase & {
|
|
50
|
+
strategy: 'document-level';
|
|
51
|
+
sentenceSplitPattern?: string;
|
|
52
|
+
};
|
|
53
|
+
/** Aspect-based: match sentences to aspect terms, score per aspect */
|
|
54
|
+
export type AspectBasedSentimentRuleSet = SentimentRuleSetBase & {
|
|
55
|
+
strategy: 'aspect-based';
|
|
56
|
+
aspects: string[];
|
|
57
|
+
};
|
|
58
|
+
export type SentimentRuleSet = TokenLevelSentimentRuleSet | DocumentLevelSentimentRuleSet | AspectBasedSentimentRuleSet;
|
|
59
|
+
type CompiledSentimentRuleSetBase = {
|
|
60
|
+
id: string;
|
|
61
|
+
name?: string;
|
|
62
|
+
mode: 'sentiment';
|
|
63
|
+
lexicon: CompiledSentimentLexicon;
|
|
64
|
+
config: {
|
|
65
|
+
capsBoost: number;
|
|
66
|
+
exclamationBoost: number;
|
|
67
|
+
negationWindow: number;
|
|
68
|
+
};
|
|
69
|
+
};
|
|
70
|
+
export type CompiledTokenLevelSentimentRuleSet = CompiledSentimentRuleSetBase & {
|
|
71
|
+
strategy: 'token-level';
|
|
72
|
+
};
|
|
73
|
+
export type CompiledDocumentLevelSentimentRuleSet = CompiledSentimentRuleSetBase & {
|
|
74
|
+
strategy: 'document-level';
|
|
75
|
+
sentenceSplitPattern: RegExp;
|
|
76
|
+
};
|
|
77
|
+
export type CompiledAspectBasedSentimentRuleSet = CompiledSentimentRuleSetBase & {
|
|
78
|
+
strategy: 'aspect-based';
|
|
79
|
+
aspects: string[];
|
|
80
|
+
};
|
|
81
|
+
export type CompiledSentimentRuleSet = CompiledTokenLevelSentimentRuleSet | CompiledDocumentLevelSentimentRuleSet | CompiledAspectBasedSentimentRuleSet;
|
|
82
|
+
/** Modifier applied to a token score */
|
|
83
|
+
export type TokenModifier = 'negated' | 'boosted' | 'caps' | 'idiom';
|
|
84
|
+
/** Per-token scoring detail */
|
|
85
|
+
export type TokenScore = {
|
|
86
|
+
token: string;
|
|
87
|
+
rawScore: number;
|
|
88
|
+
adjustedScore: number;
|
|
89
|
+
modifiers: TokenModifier[];
|
|
90
|
+
};
|
|
91
|
+
/** Per-sentence result (document-level and aspect-based) */
|
|
92
|
+
export type SentenceResult = {
|
|
93
|
+
text: string;
|
|
94
|
+
compound: number;
|
|
95
|
+
label: SentimentLabel;
|
|
96
|
+
tokens: TokenScore[];
|
|
97
|
+
};
|
|
98
|
+
/** Per-aspect result (aspect-based only) */
|
|
99
|
+
export type AspectResult = {
|
|
100
|
+
aspect: string;
|
|
101
|
+
compound: number;
|
|
102
|
+
label: SentimentLabel;
|
|
103
|
+
sentences: SentenceResult[];
|
|
104
|
+
};
|
|
105
|
+
/** Full sentiment analysis result */
|
|
106
|
+
export type SentimentResult = {
|
|
107
|
+
compound: number;
|
|
108
|
+
label: SentimentLabel;
|
|
109
|
+
positive: number;
|
|
110
|
+
negative: number;
|
|
111
|
+
neutral: number;
|
|
112
|
+
tokens?: TokenScore[];
|
|
113
|
+
sentences?: SentenceResult[];
|
|
114
|
+
aspects?: AspectResult[];
|
|
115
|
+
strategy: SentimentStrategy;
|
|
116
|
+
executionTimeMs: number;
|
|
117
|
+
};
|
|
118
|
+
/** Runtime options */
|
|
119
|
+
export type SentimentOptions = {
|
|
120
|
+
onToken?: (token: TokenScore) => void;
|
|
121
|
+
};
|
|
122
|
+
/** Result from ingest() -- includes both the individual text score and the running aggregate */
|
|
123
|
+
export type IngestResult = SentimentResult & {
|
|
124
|
+
/** Compound score for just the ingested text (not the aggregate) */
|
|
125
|
+
itemCompound: number;
|
|
126
|
+
/** Label for just the ingested text */
|
|
127
|
+
itemLabel: SentimentLabel;
|
|
128
|
+
/** Total number of texts ingested so far */
|
|
129
|
+
totalIngested: number;
|
|
130
|
+
};
|
|
131
|
+
/** Resolve a compound score (-1 to 1) to a sentiment label */
|
|
132
|
+
export declare function resolveSentimentLabel(compound: number): SentimentLabel;
|
|
133
|
+
export {};
|
|
134
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/engines/sentiment/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Sentiment Engine Types
|
|
4
|
+
*
|
|
5
|
+
* Text sentiment analysis engine that scores text using dictionary-lookup
|
|
6
|
+
* and heuristic rules. Supports token-level, document-level, and aspect-based
|
|
7
|
+
* analysis strategies with injectable lexicon configuration.
|
|
8
|
+
*/
|
|
9
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
+
exports.SENTIMENT_DEFAULTS = void 0;
|
|
11
|
+
exports.resolveSentimentLabel = resolveSentimentLabel;
|
|
12
|
+
// ========================================
|
|
13
|
+
// Config Defaults
|
|
14
|
+
// ========================================
|
|
15
|
+
exports.SENTIMENT_DEFAULTS = {
|
|
16
|
+
capsBoost: 1.2,
|
|
17
|
+
exclamationBoost: 1.1,
|
|
18
|
+
negationWindow: 3
|
|
19
|
+
};
|
|
20
|
+
// ========================================
|
|
21
|
+
// Resolver Functions
|
|
22
|
+
// ========================================
|
|
23
|
+
/** Resolve a compound score (-1 to 1) to a sentiment label */
|
|
24
|
+
function resolveSentimentLabel(compound) {
|
|
25
|
+
if (compound > 0.05)
|
|
26
|
+
return 'positive';
|
|
27
|
+
if (compound < -0.05)
|
|
28
|
+
return 'negative';
|
|
29
|
+
return 'neutral';
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/engines/sentiment/types.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;;AA2LH,sDAIC;AA9JD,2CAA2C;AAC3C,kBAAkB;AAClB,2CAA2C;AAE9B,QAAA,kBAAkB,GAAG;IAChC,SAAS,EAAE,GAAG;IACd,gBAAgB,EAAE,GAAG;IACrB,cAAc,EAAE,CAAC;CACT,CAAC;AA6IX,2CAA2C;AAC3C,qBAAqB;AACrB,2CAA2C;AAE3C,8DAA8D;AAC9D,SAAgB,qBAAqB,CAAC,QAAgB;IACpD,IAAI,QAAQ,GAAG,IAAI;QAAE,OAAO,UAAU,CAAC;IACvC,IAAI,QAAQ,GAAG,CAAC,IAAI;QAAE,OAAO,UAAU,CAAC;IACxC,OAAO,SAAS,CAAC;AACnB,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -25,6 +25,7 @@ export { ConstraintEngine } from './engines/constraint';
|
|
|
25
25
|
export { UtilityEngine } from './engines/utility';
|
|
26
26
|
export { PricingEngine } from './engines/pricing';
|
|
27
27
|
export { EnsembleEngine } from './engines/ensemble';
|
|
28
|
+
export { SentimentEngine } from './engines/sentiment';
|
|
28
29
|
export * from './core';
|
|
29
30
|
export { ForwardChainingStrategy, compileForwardRuleSet, compileForwardRule, forwardStrategy } from './engines/forward';
|
|
30
31
|
export type { ForwardRule, ForwardRuleSet, ForwardConfig, CompiledForwardRuleSet, CompiledForwardRule, ForwardOptions, ForwardResult, ActionRegistry, ActionHandler } from './engines/forward';
|
|
@@ -59,6 +60,8 @@ export { RankingEngine, RankingExecutor, compileRankingRuleSet, rankingStrategy,
|
|
|
59
60
|
export type { RankingStrategy, RankingDirection, PercentileLabel, Movement, KFactorPreset, RankingCriterion, CompiledRankingCriterion, ScoreRankingConfig, EloConfig, HeadToHeadConfig, ScoreRankingRuleSet, EloRankingRuleSet, HeadToHeadRankingRuleSet, RankingRuleSet, CompiledScoreRankingRuleSet, CompiledEloRankingRuleSet, CompiledHeadToHeadRankingRuleSet, CompiledRankingRuleSet, PreviousRanking, RankingOptions, RankedEntity, RankingResult } from './engines/ranking';
|
|
60
61
|
export { PredictionEngine, PredictionExecutor, compilePredictionRuleSet, predictionStrategy, SMOOTHING_PRESET_VALUES, HORIZON_PRESET_VALUES, isSmoothingPreset, isHorizonPreset, resolveConfidenceBracket, resolveTrendDirection } from './engines/prediction';
|
|
61
62
|
export type { PredictionStrategy, TrendDirection, SmoothingPreset, HorizonPreset, ConfidenceBracket, FieldMapping, ThresholdDefinition, LinearRegressionConfig, ExponentialSmoothingConfig, WeightedMovingAverageConfig, LinearRegressionRuleSet, ExponentialSmoothingRuleSet, WeightedMovingAverageRuleSet, PredictionRuleSet, CompiledLinearRegressionRuleSet, CompiledExponentialSmoothingRuleSet, CompiledWeightedMovingAverageRuleSet, CompiledPredictionRuleSet, ThresholdCrossing, Forecast, EntityPrediction, PredictionResult, PredictionOptions } from './engines/prediction';
|
|
63
|
+
export { SentimentExecutor, compileSentimentRuleSet, sentimentStrategy, SENTIMENT_DEFAULTS, resolveSentimentLabel } from './engines/sentiment';
|
|
64
|
+
export type { SentimentStrategy, SentimentLabel, SentimentLexicon, CompiledSentimentLexicon, SentimentConfig, TokenLevelSentimentRuleSet, DocumentLevelSentimentRuleSet, AspectBasedSentimentRuleSet, SentimentRuleSet, CompiledTokenLevelSentimentRuleSet, CompiledDocumentLevelSentimentRuleSet, CompiledAspectBasedSentimentRuleSet, CompiledSentimentRuleSet, TokenModifier, TokenScore, SentenceResult, AspectResult, SentimentResult, SentimentOptions, IngestResult } from './engines/sentiment';
|
|
62
65
|
export { soundex, nysiis, caverphone2, cosineSimilarity } from './functions';
|
|
63
66
|
export { BOEError, CompilationError, RuntimeError } from './core/errors';
|
|
64
67
|
export type { ErrorContext } from './core/errors';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAOH,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|