@nahisaho/katashiro-analyzer 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/dist/entity/entity-extractor.d.ts +44 -0
- package/dist/entity/entity-extractor.d.ts.map +1 -0
- package/dist/entity/entity-extractor.js +176 -0
- package/dist/entity/entity-extractor.js.map +1 -0
- package/dist/entity/index.d.ts +6 -0
- package/dist/entity/index.d.ts.map +1 -0
- package/dist/entity/index.js +5 -0
- package/dist/entity/index.js.map +1 -0
- package/dist/index.d.ts +17 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +16 -0
- package/dist/index.js.map +1 -0
- package/dist/interfaces.d.ts +37 -0
- package/dist/interfaces.d.ts.map +1 -0
- package/dist/interfaces.js +8 -0
- package/dist/interfaces.js.map +1 -0
- package/dist/quality/index.d.ts +6 -0
- package/dist/quality/index.d.ts.map +1 -0
- package/dist/quality/index.js +5 -0
- package/dist/quality/index.js.map +1 -0
- package/dist/quality/quality-scorer.d.ts +65 -0
- package/dist/quality/quality-scorer.d.ts.map +1 -0
- package/dist/quality/quality-scorer.js +308 -0
- package/dist/quality/quality-scorer.js.map +1 -0
- package/dist/relation/index.d.ts +6 -0
- package/dist/relation/index.d.ts.map +1 -0
- package/dist/relation/index.js +5 -0
- package/dist/relation/index.js.map +1 -0
- package/dist/relation/relation-analyzer.d.ts +80 -0
- package/dist/relation/relation-analyzer.d.ts.map +1 -0
- package/dist/relation/relation-analyzer.js +192 -0
- package/dist/relation/relation-analyzer.js.map +1 -0
- package/dist/structure/index.d.ts +5 -0
- package/dist/structure/index.d.ts.map +1 -0
- package/dist/structure/index.js +5 -0
- package/dist/structure/index.js.map +1 -0
- package/dist/structure/structure-analyzer.d.ts +108 -0
- package/dist/structure/structure-analyzer.d.ts.map +1 -0
- package/dist/structure/structure-analyzer.js +248 -0
- package/dist/structure/structure-analyzer.js.map +1 -0
- package/dist/text/index.d.ts +5 -0
- package/dist/text/index.d.ts.map +1 -0
- package/dist/text/index.js +5 -0
- package/dist/text/index.js.map +1 -0
- package/dist/text/text-analyzer.d.ts +56 -0
- package/dist/text/text-analyzer.d.ts.map +1 -0
- package/dist/text/text-analyzer.js +281 -0
- package/dist/text/text-analyzer.js.map +1 -0
- package/dist/topic/index.d.ts +6 -0
- package/dist/topic/index.d.ts.map +1 -0
- package/dist/topic/index.js +5 -0
- package/dist/topic/index.js.map +1 -0
- package/dist/topic/topic-modeler.d.ts +79 -0
- package/dist/topic/topic-modeler.d.ts.map +1 -0
- package/dist/topic/topic-modeler.js +267 -0
- package/dist/topic/topic-modeler.js.map +1 -0
- package/dist/types.d.ts +74 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +7 -0
- package/dist/types.js.map +1 -0
- package/package.json +39 -0
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* EntityExtractor - エンティティ抽出
|
|
3
|
+
*
|
|
4
|
+
* @requirement REQ-ANALYZE-008
|
|
5
|
+
* @design DES-KATASHIRO-001 §2.2 Analyzer Container
|
|
6
|
+
* @task TSK-022
|
|
7
|
+
*/
|
|
8
|
+
/**
|
|
9
|
+
* エンティティタイプ
|
|
10
|
+
*/
|
|
11
|
+
export type EntityType = 'person' | 'organization' | 'location' | 'date' | 'time' | 'url' | 'email' | 'phone' | 'money' | 'percentage' | 'number';
|
|
12
|
+
/**
|
|
13
|
+
* 抽出されたエンティティ
|
|
14
|
+
*/
|
|
15
|
+
export interface Entity {
|
|
16
|
+
readonly type: EntityType;
|
|
17
|
+
readonly text: string;
|
|
18
|
+
readonly start: number;
|
|
19
|
+
readonly end: number;
|
|
20
|
+
readonly normalized?: string;
|
|
21
|
+
readonly count?: number;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* エンティティ抽出実装
|
|
25
|
+
*/
|
|
26
|
+
export declare class EntityExtractor {
|
|
27
|
+
/**
|
|
28
|
+
* テキストからエンティティを抽出
|
|
29
|
+
*/
|
|
30
|
+
extractEntities(text: string): Entity[];
|
|
31
|
+
/**
|
|
32
|
+
* 特定のタイプのエンティティのみ抽出
|
|
33
|
+
*/
|
|
34
|
+
extractByType(text: string, type: EntityType): Entity[];
|
|
35
|
+
/**
|
|
36
|
+
* エンティティを正規化
|
|
37
|
+
*/
|
|
38
|
+
normalizeEntity(entity: Entity): Entity;
|
|
39
|
+
/**
|
|
40
|
+
* 重複エンティティをマージ
|
|
41
|
+
*/
|
|
42
|
+
mergeEntities(entities: Entity[]): Entity[];
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=entity-extractor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"entity-extractor.d.ts","sourceRoot":"","sources":["../../src/entity/entity-extractor.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH;;GAEG;AACH,MAAM,MAAM,UAAU,GAClB,QAAQ,GACR,cAAc,GACd,UAAU,GACV,MAAM,GACN,MAAM,GACN,KAAK,GACL,OAAO,GACP,OAAO,GACP,OAAO,GACP,YAAY,GACZ,QAAQ,CAAC;AAEb;;GAEG;AACH,MAAM,WAAW,MAAM;IACrB,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;CACzB;AAwCD;;GAEG;AACH,qBAAa,eAAe;IAC1B;;OAEG;IACH,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE;IA0DvC;;OAEG;IACH,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,GAAG,MAAM,EAAE;IAoBvD;;OAEG;IACH,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM;IAqDvC;;OAEG;IACH,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE;CAgB5C"}
|
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* EntityExtractor - エンティティ抽出
|
|
3
|
+
*
|
|
4
|
+
* @requirement REQ-ANALYZE-008
|
|
5
|
+
* @design DES-KATASHIRO-001 §2.2 Analyzer Container
|
|
6
|
+
* @task TSK-022
|
|
7
|
+
*/
|
|
8
|
+
/**
|
|
9
|
+
* 正規表現パターン定義
|
|
10
|
+
*/
|
|
11
|
+
const PATTERNS = {
|
|
12
|
+
// URL pattern (stops at Japanese characters, whitespace, common punctuation)
|
|
13
|
+
url: /https?:\/\/[a-zA-Z0-9\-._~:/?#\[\]@!$&'()*+,;=%]+/g,
|
|
14
|
+
// Email pattern
|
|
15
|
+
email: /[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}/g,
|
|
16
|
+
// Japanese phone numbers
|
|
17
|
+
phone: /(?:0\d{1,4}[-\s]?\d{1,4}[-\s]?\d{4})|(?:\d{2,4}[-\s]\d{2,4}[-\s]\d{4})/g,
|
|
18
|
+
// Japanese dates
|
|
19
|
+
date: /(?:\d{4}年\d{1,2}月\d{1,2}日)|(?:\d{1,2}月\d{1,2}日)|(?:\d{4}[-/]\d{1,2}[-/]\d{1,2})/g,
|
|
20
|
+
// Time patterns
|
|
21
|
+
time: /(?:\d{1,2}:\d{2}(?::\d{2})?)|(?:\d{1,2}時\d{1,2}分(?:\d{1,2}秒)?)/g,
|
|
22
|
+
// Money amounts
|
|
23
|
+
money: /(?:[¥$€£]\s?[\d,]+(?:\.\d{2})?)|(?:[\d,]+(?:\.\d{2})?\s?(?:円|ドル|ユーロ))/g,
|
|
24
|
+
// Percentages
|
|
25
|
+
percentage: /\d+(?:\.\d+)?%/g,
|
|
26
|
+
// Numbers with units
|
|
27
|
+
number: /\d+(?:,\d{3})*(?:\.\d+)?(?:\s*(?:個|件|人|台|本|枚|回|年|月|日|時間|分|秒))?/g,
|
|
28
|
+
// Japanese organization names
|
|
29
|
+
organization: /(?:株式会社|有限会社|合同会社|一般社団法人|NPO法人|独立行政法人)[^\s、。]+|[^\s、。]+(?:株式会社|有限会社|合同会社)/g,
|
|
30
|
+
// Japanese locations
|
|
31
|
+
location: /(?:東京都|北海道|(?:大阪|京都|神奈川|埼玉|千葉|愛知|福岡|兵庫|広島|宮城|新潟|長野|静岡|岐阜|三重|滋賀|奈良|和歌山|岡山|山口|鳥取|島根|香川|徳島|愛媛|高知|福井|石川|富山|青森|岩手|秋田|山形|福島|茨城|栃木|群馬|山梨|長崎|熊本|大分|宮崎|鹿児島|沖縄)(?:府|県))[^\s、。]*(?:市|区|町|村)?/g,
|
|
32
|
+
// Japanese person names (simplified pattern)
|
|
33
|
+
person: /[一-龯]{1,4}(?:さん|様|氏|君|先生|教授|社長|部長|課長|係長|主任)/g,
|
|
34
|
+
};
|
|
35
|
+
/**
|
|
36
|
+
* エンティティ抽出実装
|
|
37
|
+
*/
|
|
38
|
+
export class EntityExtractor {
|
|
39
|
+
/**
|
|
40
|
+
* テキストからエンティティを抽出
|
|
41
|
+
*/
|
|
42
|
+
extractEntities(text) {
|
|
43
|
+
if (!text || text.trim().length === 0) {
|
|
44
|
+
return [];
|
|
45
|
+
}
|
|
46
|
+
const entities = [];
|
|
47
|
+
const extractionOrder = [
|
|
48
|
+
'url',
|
|
49
|
+
'email',
|
|
50
|
+
'phone',
|
|
51
|
+
'date',
|
|
52
|
+
'time',
|
|
53
|
+
'money',
|
|
54
|
+
'percentage',
|
|
55
|
+
'organization',
|
|
56
|
+
'location',
|
|
57
|
+
'person',
|
|
58
|
+
];
|
|
59
|
+
// Track extracted ranges to avoid overlaps
|
|
60
|
+
const extractedRanges = [];
|
|
61
|
+
for (const type of extractionOrder) {
|
|
62
|
+
const pattern = PATTERNS[type];
|
|
63
|
+
if (!pattern)
|
|
64
|
+
continue;
|
|
65
|
+
// Reset regex lastIndex
|
|
66
|
+
pattern.lastIndex = 0;
|
|
67
|
+
let match;
|
|
68
|
+
while ((match = pattern.exec(text)) !== null) {
|
|
69
|
+
const start = match.index;
|
|
70
|
+
const end = start + match[0].length;
|
|
71
|
+
// Check for overlap with already extracted entities
|
|
72
|
+
const overlaps = extractedRanges.some(range => (start >= range.start && start < range.end) ||
|
|
73
|
+
(end > range.start && end <= range.end) ||
|
|
74
|
+
(start <= range.start && end >= range.end));
|
|
75
|
+
if (!overlaps) {
|
|
76
|
+
entities.push({
|
|
77
|
+
type,
|
|
78
|
+
text: match[0],
|
|
79
|
+
start,
|
|
80
|
+
end,
|
|
81
|
+
});
|
|
82
|
+
extractedRanges.push({ start, end });
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
// Sort by position
|
|
87
|
+
return entities.sort((a, b) => a.start - b.start);
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* 特定のタイプのエンティティのみ抽出
|
|
91
|
+
*/
|
|
92
|
+
extractByType(text, type) {
|
|
93
|
+
const pattern = PATTERNS[type];
|
|
94
|
+
if (!pattern || !text)
|
|
95
|
+
return [];
|
|
96
|
+
const entities = [];
|
|
97
|
+
pattern.lastIndex = 0;
|
|
98
|
+
let match;
|
|
99
|
+
while ((match = pattern.exec(text)) !== null) {
|
|
100
|
+
entities.push({
|
|
101
|
+
type,
|
|
102
|
+
text: match[0],
|
|
103
|
+
start: match.index,
|
|
104
|
+
end: match.index + match[0].length,
|
|
105
|
+
});
|
|
106
|
+
}
|
|
107
|
+
return entities;
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* エンティティを正規化
|
|
111
|
+
*/
|
|
112
|
+
normalizeEntity(entity) {
|
|
113
|
+
let normalized;
|
|
114
|
+
switch (entity.type) {
|
|
115
|
+
case 'phone':
|
|
116
|
+
// Remove hyphens and spaces
|
|
117
|
+
normalized = entity.text.replace(/[-\s]/g, '');
|
|
118
|
+
break;
|
|
119
|
+
case 'date': {
|
|
120
|
+
// Try to parse Japanese date format
|
|
121
|
+
const jpMatch = entity.text.match(/(\d{4})年(\d{1,2})月(\d{1,2})日/);
|
|
122
|
+
if (jpMatch?.[1] && jpMatch?.[2] && jpMatch?.[3]) {
|
|
123
|
+
normalized = `${jpMatch[1]}-${jpMatch[2].padStart(2, '0')}-${jpMatch[3].padStart(2, '0')}`;
|
|
124
|
+
}
|
|
125
|
+
else {
|
|
126
|
+
// Try standard date format
|
|
127
|
+
const stdMatch = entity.text.match(/(\d{4})[-/](\d{1,2})[-/](\d{1,2})/);
|
|
128
|
+
if (stdMatch?.[1] && stdMatch?.[2] && stdMatch?.[3]) {
|
|
129
|
+
normalized = `${stdMatch[1]}-${stdMatch[2].padStart(2, '0')}-${stdMatch[3].padStart(2, '0')}`;
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
break;
|
|
133
|
+
}
|
|
134
|
+
case 'money': {
|
|
135
|
+
// Extract numeric value
|
|
136
|
+
const numMatch = entity.text.match(/[\d,]+(?:\.\d+)?/);
|
|
137
|
+
if (numMatch) {
|
|
138
|
+
normalized = numMatch[0].replace(/,/g, '');
|
|
139
|
+
}
|
|
140
|
+
break;
|
|
141
|
+
}
|
|
142
|
+
case 'email':
|
|
143
|
+
// Lowercase email
|
|
144
|
+
normalized = entity.text.toLowerCase();
|
|
145
|
+
break;
|
|
146
|
+
case 'url':
|
|
147
|
+
// Lowercase URL
|
|
148
|
+
normalized = entity.text.toLowerCase();
|
|
149
|
+
break;
|
|
150
|
+
default:
|
|
151
|
+
normalized = entity.text;
|
|
152
|
+
}
|
|
153
|
+
return {
|
|
154
|
+
...entity,
|
|
155
|
+
normalized,
|
|
156
|
+
};
|
|
157
|
+
}
|
|
158
|
+
/**
|
|
159
|
+
* 重複エンティティをマージ
|
|
160
|
+
*/
|
|
161
|
+
mergeEntities(entities) {
|
|
162
|
+
const merged = new Map();
|
|
163
|
+
for (const entity of entities) {
|
|
164
|
+
const key = `${entity.type}:${entity.text}`;
|
|
165
|
+
const existing = merged.get(key);
|
|
166
|
+
if (existing) {
|
|
167
|
+
existing.count++;
|
|
168
|
+
}
|
|
169
|
+
else {
|
|
170
|
+
merged.set(key, { ...entity, count: 1 });
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
return Array.from(merged.values()).sort((a, b) => b.count - a.count);
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
//# sourceMappingURL=entity-extractor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"entity-extractor.js","sourceRoot":"","sources":["../../src/entity/entity-extractor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/entity/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EACL,eAAe,GAChB,MAAM,uBAAuB,CAAC;AAE/B,YAAY,EACV,MAAM,EACN,UAAU,GACX,MAAM,uBAAuB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/entity/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EACL,eAAe,GAChB,MAAM,uBAAuB,CAAC"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @nahisaho/katashiro-analyzer
|
|
3
|
+
* 分析・推論パッケージ
|
|
4
|
+
*
|
|
5
|
+
* @requirement REQ-ANALYZE-001 ~ REQ-ANALYZE-011
|
|
6
|
+
* @design DES-KATASHIRO-001 §2.2 Analyzer Container
|
|
7
|
+
* @task TSK-020 ~ TSK-025
|
|
8
|
+
*/
|
|
9
|
+
export type { ISummarizer, IFactChecker, IBiasDetector, IContradictionDetector, ITrendAnalyzer, ISentimentAnalyzer, IMoAEngine, } from './interfaces.js';
|
|
10
|
+
export type { Summary, FactCheckResult, BiasReport, Contradiction, TrendData, SentimentResult, MoAResponse, } from './types.js';
|
|
11
|
+
export { TextAnalyzer } from './text/index.js';
|
|
12
|
+
export { StructureAnalyzer, type Heading, type Section, type OutlineNode, type ListInfo, type CodeBlock, type TableInfo, type StructureAnalysis, } from './structure/index.js';
|
|
13
|
+
export { EntityExtractor, type Entity, type EntityType, } from './entity/index.js';
|
|
14
|
+
export { RelationAnalyzer, type RelationType, type EntityPair, type Relation, type GraphNode, type GraphEdge, type RelationGraph, } from './relation/index.js';
|
|
15
|
+
export { TopicModeler, type Topic, type TopicDistribution, type SimilarDocument, type DocumentCluster, } from './topic/index.js';
|
|
16
|
+
export { QualityScorer, type QualityDimension, type QualityScore, type QualityReport, } from './quality/index.js';
|
|
17
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,YAAY,EACV,WAAW,EACX,YAAY,EACZ,aAAa,EACb,sBAAsB,EACtB,cAAc,EACd,kBAAkB,EAClB,UAAU,GACX,MAAM,iBAAiB,CAAC;AAEzB,YAAY,EACV,OAAO,EACP,eAAe,EACf,UAAU,EACV,aAAa,EACb,SAAS,EACT,eAAe,EACf,WAAW,GACZ,MAAM,YAAY,CAAC;AAGpB,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EACL,iBAAiB,EACjB,KAAK,OAAO,EACZ,KAAK,OAAO,EACZ,KAAK,WAAW,EAChB,KAAK,QAAQ,EACb,KAAK,SAAS,EACd,KAAK,SAAS,EACd,KAAK,iBAAiB,GACvB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,eAAe,EACf,KAAK,MAAM,EACX,KAAK,UAAU,GAChB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,gBAAgB,EAChB,KAAK,YAAY,EACjB,KAAK,UAAU,EACf,KAAK,QAAQ,EACb,KAAK,SAAS,EACd,KAAK,SAAS,EACd,KAAK,aAAa,GACnB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,YAAY,EACZ,KAAK,KAAK,EACV,KAAK,iBAAiB,EACtB,KAAK,eAAe,EACpB,KAAK,eAAe,GACrB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,aAAa,EACb,KAAK,gBAAgB,EACrB,KAAK,YAAY,EACjB,KAAK,aAAa,GACnB,MAAM,oBAAoB,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @nahisaho/katashiro-analyzer
|
|
3
|
+
* 分析・推論パッケージ
|
|
4
|
+
*
|
|
5
|
+
* @requirement REQ-ANALYZE-001 ~ REQ-ANALYZE-011
|
|
6
|
+
* @design DES-KATASHIRO-001 §2.2 Analyzer Container
|
|
7
|
+
* @task TSK-020 ~ TSK-025
|
|
8
|
+
*/
|
|
9
|
+
// 実装
|
|
10
|
+
export { TextAnalyzer } from './text/index.js';
|
|
11
|
+
export { StructureAnalyzer, } from './structure/index.js';
|
|
12
|
+
export { EntityExtractor, } from './entity/index.js';
|
|
13
|
+
export { RelationAnalyzer, } from './relation/index.js';
|
|
14
|
+
export { TopicModeler, } from './topic/index.js';
|
|
15
|
+
export { QualityScorer, } from './quality/index.js';
|
|
16
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAsBH,KAAK;AACL,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EACL,iBAAiB,GAQlB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,eAAe,GAGhB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,gBAAgB,GAOjB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,YAAY,GAKb,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,aAAa,GAId,MAAM,oBAAoB,CAAC"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Analyzerインターフェース定義
|
|
3
|
+
*
|
|
4
|
+
* @requirement REQ-ANALYZE-001 ~ REQ-ANALYZE-011
|
|
5
|
+
* @design DES-KATASHIRO-001 §2.2 Analyzer Container
|
|
6
|
+
*/
|
|
7
|
+
import type { Result, Content } from '@nahisaho/katashiro-core';
|
|
8
|
+
import type { Summary, FactCheckResult, BiasReport, Contradiction, TrendData, SentimentResult, MoAResponse } from './types.js';
|
|
9
|
+
/** @requirement REQ-ANALYZE-001 */
|
|
10
|
+
export interface ISummarizer {
|
|
11
|
+
summarize(content: Content, maxLength?: number): Promise<Result<Summary, Error>>;
|
|
12
|
+
}
|
|
13
|
+
/** @requirement REQ-ANALYZE-002 */
|
|
14
|
+
export interface IFactChecker {
|
|
15
|
+
check(claim: string, sources: Content[]): Promise<Result<FactCheckResult, Error>>;
|
|
16
|
+
}
|
|
17
|
+
/** @requirement REQ-ANALYZE-003 */
|
|
18
|
+
export interface IBiasDetector {
|
|
19
|
+
detect(content: Content): Promise<Result<BiasReport, Error>>;
|
|
20
|
+
}
|
|
21
|
+
/** @requirement REQ-ANALYZE-004 */
|
|
22
|
+
export interface IContradictionDetector {
|
|
23
|
+
findContradictions(contents: Content[]): Promise<Result<Contradiction[], Error>>;
|
|
24
|
+
}
|
|
25
|
+
/** @requirement REQ-ANALYZE-005 */
|
|
26
|
+
export interface ITrendAnalyzer {
|
|
27
|
+
analyze(topic: string, timeRange: string): Promise<Result<TrendData, Error>>;
|
|
28
|
+
}
|
|
29
|
+
/** @requirement REQ-ANALYZE-006 */
|
|
30
|
+
export interface ISentimentAnalyzer {
|
|
31
|
+
analyze(content: Content): Promise<Result<SentimentResult, Error>>;
|
|
32
|
+
}
|
|
33
|
+
/** @requirement REQ-ANALYZE-011 */
|
|
34
|
+
export interface IMoAEngine {
|
|
35
|
+
query(prompt: string, providers?: string[]): Promise<Result<MoAResponse, Error>>;
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=interfaces.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"interfaces.d.ts","sourceRoot":"","sources":["../src/interfaces.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AAChE,OAAO,KAAK,EACV,OAAO,EACP,eAAe,EACf,UAAU,EACV,aAAa,EACb,SAAS,EACT,eAAe,EACf,WAAW,EACZ,MAAM,YAAY,CAAC;AAEpB,mCAAmC;AACnC,MAAM,WAAW,WAAW;IAC1B,SAAS,CAAC,OAAO,EAAE,OAAO,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC;CAClF;AAED,mCAAmC;AACnC,MAAM,WAAW,YAAY;IAC3B,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,eAAe,EAAE,KAAK,CAAC,CAAC,CAAC;CACnF;AAED,mCAAmC;AACnC,MAAM,WAAW,aAAa;IAC5B,MAAM,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC,CAAC;CAC9D;AAED,mCAAmC;AACnC,MAAM,WAAW,sBAAsB;IACrC,kBAAkB,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,aAAa,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC;CAClF;AAED,mCAAmC;AACnC,MAAM,WAAW,cAAc;IAC7B,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC,CAAC;CAC9E;AAED,mCAAmC;AACnC,MAAM,WAAW,kBAAkB;IACjC,OAAO,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,eAAe,EAAE,KAAK,CAAC,CAAC,CAAC;CACpE;AAED,mCAAmC;AACnC,MAAM,WAAW,UAAU;IACzB,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC,CAAC;CAClF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"interfaces.js","sourceRoot":"","sources":["../src/interfaces.ts"],"names":[],"mappings":"AAAA;;;;;GAKG"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/quality/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EACL,aAAa,GACd,MAAM,qBAAqB,CAAC;AAE7B,YAAY,EACV,gBAAgB,EAChB,YAAY,EACZ,aAAa,GACd,MAAM,qBAAqB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/quality/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EACL,aAAa,GACd,MAAM,qBAAqB,CAAC"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* QualityScorer - コンテンツ品質スコアリング
|
|
3
|
+
*
|
|
4
|
+
* @requirement REQ-ANALYZE-011
|
|
5
|
+
* @design DES-KATASHIRO-001 §2.2 Analyzer Container
|
|
6
|
+
* @task TSK-025
|
|
7
|
+
*/
|
|
8
|
+
/**
|
|
9
|
+
* 品質次元
|
|
10
|
+
*/
|
|
11
|
+
export interface QualityDimension {
|
|
12
|
+
readonly name: string;
|
|
13
|
+
readonly score: number;
|
|
14
|
+
readonly details?: string;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* 品質スコア
|
|
18
|
+
*/
|
|
19
|
+
export interface QualityScore {
|
|
20
|
+
readonly overall: number;
|
|
21
|
+
readonly dimensions: QualityDimension[];
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* 品質レポート
|
|
25
|
+
*/
|
|
26
|
+
export interface QualityReport {
|
|
27
|
+
readonly score: QualityScore;
|
|
28
|
+
readonly summary: string;
|
|
29
|
+
readonly strengths: string[];
|
|
30
|
+
readonly improvements: string[];
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* コンテンツ品質スコアリング実装
|
|
34
|
+
*/
|
|
35
|
+
export declare class QualityScorer {
|
|
36
|
+
/**
|
|
37
|
+
* コンテンツ品質をスコアリング
|
|
38
|
+
*/
|
|
39
|
+
scoreContent(text: string): QualityScore;
|
|
40
|
+
/**
|
|
41
|
+
* 可読性スコア
|
|
42
|
+
*/
|
|
43
|
+
scoreReadability(text: string): QualityDimension;
|
|
44
|
+
/**
|
|
45
|
+
* 完全性スコア
|
|
46
|
+
*/
|
|
47
|
+
scoreCompleteness(text: string): QualityDimension;
|
|
48
|
+
/**
|
|
49
|
+
* 引用・参照スコア
|
|
50
|
+
*/
|
|
51
|
+
scoreCitation(text: string): QualityDimension;
|
|
52
|
+
/**
|
|
53
|
+
* 客観性スコア
|
|
54
|
+
*/
|
|
55
|
+
scoreObjectivity(text: string): QualityDimension;
|
|
56
|
+
/**
|
|
57
|
+
* 新鮮さスコア
|
|
58
|
+
*/
|
|
59
|
+
scoreFreshness(text: string): QualityDimension;
|
|
60
|
+
/**
|
|
61
|
+
* 品質レポート生成
|
|
62
|
+
*/
|
|
63
|
+
getQualityReport(text: string): QualityReport;
|
|
64
|
+
}
|
|
65
|
+
//# sourceMappingURL=quality-scorer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"quality-scorer.d.ts","sourceRoot":"","sources":["../../src/quality/quality-scorer.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,UAAU,EAAE,gBAAgB,EAAE,CAAC;CACzC;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,KAAK,EAAE,YAAY,CAAC;IAC7B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,CAAC;IAC7B,QAAQ,CAAC,YAAY,EAAE,MAAM,EAAE,CAAC;CACjC;AA0BD;;GAEG;AACH,qBAAa,aAAa;IACxB;;OAEG;IACH,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY;IA6BxC;;OAEG;IACH,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,gBAAgB;IA0ChD;;OAEG;IACH,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,gBAAgB;IAkDjD;;OAEG;IACH,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,gBAAgB;IA0C7C;;OAEG;IACH,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,gBAAgB;IAyChD;;OAEG;IACH,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,gBAAgB;IA8C9C;;OAEG;IACH,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa;CA+B9C"}
|