@nahisaho/katashiro-analyzer 0.1.11 → 0.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.
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Comparator module - Multi-source comparison and analysis
3
+ * @since 0.2.0
4
+ * @requirement REQ-ANALYZE-002-ENH
5
+ * @design DES-KATASHIRO-002 §4.7 比較分析強化
6
+ */
7
+ export { MultiSourceComparator, type SourceForComparison, type ExtractedClaim, type ClaimComparison, type ComparisonResult, } from './multi-source-comparator.js';
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/comparator/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EACL,qBAAqB,EACrB,KAAK,mBAAmB,EACxB,KAAK,cAAc,EACnB,KAAK,eAAe,EACpB,KAAK,gBAAgB,GACtB,MAAM,8BAA8B,CAAC"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Comparator module - Multi-source comparison and analysis
3
+ * @since 0.2.0
4
+ * @requirement REQ-ANALYZE-002-ENH
5
+ * @design DES-KATASHIRO-002 §4.7 比較分析強化
6
+ */
7
+ export { MultiSourceComparator, } from './multi-source-comparator.js';
8
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/comparator/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EACL,qBAAqB,GAKtB,MAAM,8BAA8B,CAAC"}
@@ -0,0 +1,131 @@
1
+ /**
2
+ * MultiSourceComparator - 複数ソース比較分析
3
+ *
4
+ * @since 0.2.0
5
+ * @requirement REQ-ANALYZE-002-ENH-001
6
+ * @design DES-KATASHIRO-002 §4.7 比較分析強化
7
+ */
8
+ /**
9
+ * 比較用ソース
10
+ */
11
+ export interface SourceForComparison {
12
+ /** ソースID */
13
+ id: string;
14
+ /** コンテンツ本文 */
15
+ content: string;
16
+ /** メタデータ */
17
+ metadata?: {
18
+ title?: string;
19
+ url?: string;
20
+ credibility?: number;
21
+ };
22
+ }
23
+ /**
24
+ * 抽出されたクレーム(主張)
25
+ */
26
+ export interface ExtractedClaim {
27
+ /** 主張文 */
28
+ statement: string;
29
+ /** ソースID */
30
+ sourceId: string;
31
+ /** 抽出確度 (0-1) */
32
+ confidence: number;
33
+ /** 周辺文脈 */
34
+ context: string;
35
+ }
36
+ /**
37
+ * クレーム比較結果
38
+ */
39
+ export interface ClaimComparison {
40
+ /** 主張文(正規化済み) */
41
+ statement: string;
42
+ /** 支持するソース */
43
+ supportingSources: string[];
44
+ /** 否定するソース */
45
+ opposingSources: string[];
46
+ /** 中立(言及なし)のソース */
47
+ neutralSources: string[];
48
+ /** 合意度スコア (0-100%) */
49
+ consensusScore: number;
50
+ }
51
+ /**
52
+ * 比較分析結果
53
+ */
54
+ export interface ComparisonResult {
55
+ /** トピック */
56
+ topic: string;
57
+ /** クレーム比較リスト */
58
+ claims: ClaimComparison[];
59
+ /** 各ソース独自の洞察 */
60
+ uniqueInsights: Array<{
61
+ sourceId: string;
62
+ insight: string;
63
+ }>;
64
+ /** 比較マトリクス(Markdown表形式) */
65
+ matrix: string;
66
+ /** 要約 */
67
+ summary: string;
68
+ }
69
+ /**
70
+ * 比較オプション
71
+ */
72
+ export interface ComparisonOptions {
73
+ /** 最小クレーム長(文字数) */
74
+ minClaimLength?: number;
75
+ /** 合意判定閾値 */
76
+ consensusThreshold?: number;
77
+ /** 類似度閾値 */
78
+ similarityThreshold?: number;
79
+ }
80
+ /**
81
+ * 複数ソース比較分析クラス
82
+ */
83
+ export declare class MultiSourceComparator {
84
+ /** デフォルト設定 */
85
+ private static readonly DEFAULTS;
86
+ /**
87
+ * 複数ソースを比較分析
88
+ */
89
+ compare(topic: string, sources: SourceForComparison[], options?: ComparisonOptions): Promise<ComparisonResult>;
90
+ /**
91
+ * テキストからクレーム(主張)を抽出
92
+ */
93
+ extractClaims(content: string, sourceId: string, options: Required<ComparisonOptions>): Promise<ExtractedClaim[]>;
94
+ /**
95
+ * 事実主張かどうか判定
96
+ */
97
+ private isFactualClaim;
98
+ /**
99
+ * クレームの確度を計算
100
+ */
101
+ private calculateClaimConfidence;
102
+ /**
103
+ * 類似クレームをクラスタリング
104
+ */
105
+ private clusterClaims;
106
+ /**
107
+ * 文字列の類似度を計算(Jaccard係数ベース)
108
+ */
109
+ private calculateSimilarity;
110
+ /**
111
+ * テキストをトークン化
112
+ */
113
+ private tokenize;
114
+ /**
115
+ * クラスタの合意度を計算
116
+ */
117
+ calculateConsensus(cluster: ExtractedClaim[], allSourceIds: string[]): ClaimComparison;
118
+ /**
119
+ * 独自インサイトを抽出
120
+ */
121
+ private extractUniqueInsights;
122
+ /**
123
+ * 比較マトリクスを生成
124
+ */
125
+ generateMatrix(comparisons: ClaimComparison[], sources: SourceForComparison[]): string;
126
+ /**
127
+ * 要約を生成
128
+ */
129
+ private generateSummary;
130
+ }
131
+ //# sourceMappingURL=multi-source-comparator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"multi-source-comparator.d.ts","sourceRoot":"","sources":["../../src/comparator/multi-source-comparator.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,YAAY;IACZ,EAAE,EAAE,MAAM,CAAC;IACX,cAAc;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY;IACZ,QAAQ,CAAC,EAAE;QACT,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,GAAG,CAAC,EAAE,MAAM,CAAC;QACb,WAAW,CAAC,EAAE,MAAM,CAAC;KACtB,CAAC;CACH;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,UAAU;IACV,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY;IACZ,QAAQ,EAAE,MAAM,CAAC;IACjB,iBAAiB;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW;IACX,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,iBAAiB;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc;IACd,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,cAAc;IACd,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,mBAAmB;IACnB,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,sBAAsB;IACtB,cAAc,EAAE,MAAM,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,WAAW;IACX,KAAK,EAAE,MAAM,CAAC;IACd,gBAAgB;IAChB,MAAM,EAAE,eAAe,EAAE,CAAC;IAC1B,gBAAgB;IAChB,cAAc,EAAE,KAAK,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC7D,2BAA2B;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,SAAS;IACT,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,mBAAmB;IACnB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,aAAa;IACb,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,YAAY;IACZ,mBAAmB,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED;;GAEG;AACH,qBAAa,qBAAqB;IAChC,cAAc;IACd,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAI9B;IAEF;;OAEG;IACG,OAAO,CACX,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,mBAAmB,EAAE,EAC9B,OAAO,CAAC,EAAE,iBAAiB,GAC1B,OAAO,CAAC,gBAAgB,CAAC;IAyC5B;;OAEG;IACG,aAAa,CACjB,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,QAAQ,CAAC,iBAAiB,CAAC,GACnC,OAAO,CAAC,cAAc,EAAE,CAAC;IA6B5B;;OAEG;IACH,OAAO,CAAC,cAAc;IAiDtB;;OAEG;IACH,OAAO,CAAC,wBAAwB;IAqBhC;;OAEG;IACH,OAAO,CAAC,aAAa;IAuCrB;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAW3B;;OAEG;IACH,OAAO,CAAC,QAAQ;IAShB;;OAEG;IACH,kBAAkB,CAChB,OAAO,EAAE,cAAc,EAAE,EACzB,YAAY,EAAE,MAAM,EAAE,GACrB,eAAe;IAuBlB;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAoC7B;;OAEG;IACH,cAAc,CACZ,WAAW,EAAE,eAAe,EAAE,EAC9B,OAAO,EAAE,mBAAmB,EAAE,GAC7B,MAAM;IAwBT;;OAEG;IACH,OAAO,CAAC,eAAe;CAwCxB"}
@@ -0,0 +1,305 @@
1
+ /**
2
+ * MultiSourceComparator - 複数ソース比較分析
3
+ *
4
+ * @since 0.2.0
5
+ * @requirement REQ-ANALYZE-002-ENH-001
6
+ * @design DES-KATASHIRO-002 §4.7 比較分析強化
7
+ */
8
+ /**
9
+ * 複数ソース比較分析クラス
10
+ */
11
+ export class MultiSourceComparator {
12
+ /** デフォルト設定 */
13
+ static DEFAULTS = {
14
+ minClaimLength: 10,
15
+ consensusThreshold: 0.6,
16
+ similarityThreshold: 0.8,
17
+ };
18
+ /**
19
+ * 複数ソースを比較分析
20
+ */
21
+ async compare(topic, sources, options) {
22
+ const opts = { ...MultiSourceComparator.DEFAULTS, ...options };
23
+ if (sources.length < 2) {
24
+ throw new Error('At least 2 sources are required for comparison');
25
+ }
26
+ // 1. 各ソースからクレームを抽出
27
+ const allClaims = [];
28
+ for (const source of sources) {
29
+ const claims = await this.extractClaims(source.content, source.id, opts);
30
+ allClaims.push(...claims);
31
+ }
32
+ // 2. クレームをクラスタリング(類似クレームをグループ化)
33
+ const claimClusters = this.clusterClaims(allClaims, opts.similarityThreshold);
34
+ // 3. 各クラスタの合意度を計算
35
+ const sourceIds = sources.map(s => s.id);
36
+ const claimComparisons = claimClusters.map(cluster => this.calculateConsensus(cluster, sourceIds));
37
+ // 4. 独自インサイトを抽出
38
+ const uniqueInsights = this.extractUniqueInsights(allClaims, claimClusters, sources);
39
+ // 5. 比較マトリクスを生成
40
+ const matrix = this.generateMatrix(claimComparisons, sources);
41
+ // 6. 要約を生成
42
+ const summary = this.generateSummary(topic, claimComparisons, uniqueInsights);
43
+ return {
44
+ topic,
45
+ claims: claimComparisons,
46
+ uniqueInsights,
47
+ matrix,
48
+ summary,
49
+ };
50
+ }
51
+ /**
52
+ * テキストからクレーム(主張)を抽出
53
+ */
54
+ async extractClaims(content, sourceId, options) {
55
+ const claims = [];
56
+ // 文分割(日本語・英語対応)
57
+ const sentences = content
58
+ .split(/[。..!?!?\n]+/)
59
+ .map(s => s.trim())
60
+ .filter(s => s.length >= options.minClaimLength);
61
+ for (const sentence of sentences) {
62
+ // 事実主張フィルタ(意見・推測を除外)
63
+ if (this.isFactualClaim(sentence)) {
64
+ // 周辺文脈を取得
65
+ const contextStart = Math.max(0, content.indexOf(sentence) - 50);
66
+ const contextEnd = Math.min(content.length, content.indexOf(sentence) + sentence.length + 50);
67
+ const context = content.slice(contextStart, contextEnd);
68
+ claims.push({
69
+ statement: sentence,
70
+ sourceId,
71
+ confidence: this.calculateClaimConfidence(sentence),
72
+ context,
73
+ });
74
+ }
75
+ }
76
+ return claims;
77
+ }
78
+ /**
79
+ * 事実主張かどうか判定
80
+ */
81
+ isFactualClaim(sentence) {
82
+ // 意見・推測を示す表現を除外
83
+ const opinionPatterns = [
84
+ /思[うい]ます?/,
85
+ /考え(ます|られ)/,
86
+ /でしょう/,
87
+ /かもしれ/,
88
+ /ではないか/,
89
+ /らしい$/,
90
+ /ようだ$/,
91
+ /I think/i,
92
+ /I believe/i,
93
+ /probably/i,
94
+ /maybe/i,
95
+ /might be/i,
96
+ /could be/i,
97
+ /in my opinion/i,
98
+ ];
99
+ for (const pattern of opinionPatterns) {
100
+ if (pattern.test(sentence)) {
101
+ return false;
102
+ }
103
+ }
104
+ // 事実を示す表現を含むかチェック
105
+ const factPatterns = [
106
+ /である/,
107
+ /です$/,
108
+ /した$/,
109
+ /いる$/,
110
+ /ある$/,
111
+ /によると/,
112
+ /は.*だ$/,
113
+ /\d+[%%]/,
114
+ /\d+[年月日]/,
115
+ /is|are|was|were/i,
116
+ /according to/i,
117
+ ];
118
+ for (const pattern of factPatterns) {
119
+ if (pattern.test(sentence)) {
120
+ return true;
121
+ }
122
+ }
123
+ return sentence.length > 20; // 短すぎる文は除外
124
+ }
125
+ /**
126
+ * クレームの確度を計算
127
+ */
128
+ calculateClaimConfidence(sentence) {
129
+ let confidence = 0.5; // ベース
130
+ // 数値を含む → 具体的で信頼性高い
131
+ if (/\d/.test(sentence)) {
132
+ confidence += 0.2;
133
+ }
134
+ // 引用元を含む
135
+ if (/によると|according to/i.test(sentence)) {
136
+ confidence += 0.15;
137
+ }
138
+ // 固有名詞を含む(大文字始まり、または引用符内)
139
+ if (/[A-Z][a-z]+|「.+」|".+"/.test(sentence)) {
140
+ confidence += 0.1;
141
+ }
142
+ return Math.min(1, confidence);
143
+ }
144
+ /**
145
+ * 類似クレームをクラスタリング
146
+ */
147
+ clusterClaims(claims, similarityThreshold) {
148
+ const clusters = [];
149
+ const used = new Set();
150
+ for (let i = 0; i < claims.length; i++) {
151
+ if (used.has(i))
152
+ continue;
153
+ const currentClaim = claims[i];
154
+ if (!currentClaim)
155
+ continue;
156
+ const cluster = [currentClaim];
157
+ used.add(i);
158
+ for (let j = i + 1; j < claims.length; j++) {
159
+ if (used.has(j))
160
+ continue;
161
+ const otherClaim = claims[j];
162
+ if (!otherClaim)
163
+ continue;
164
+ const similarity = this.calculateSimilarity(currentClaim.statement, otherClaim.statement);
165
+ if (similarity >= similarityThreshold) {
166
+ cluster.push(otherClaim);
167
+ used.add(j);
168
+ }
169
+ }
170
+ clusters.push(cluster);
171
+ }
172
+ return clusters;
173
+ }
174
+ /**
175
+ * 文字列の類似度を計算(Jaccard係数ベース)
176
+ */
177
+ calculateSimilarity(text1, text2) {
178
+ const words1 = new Set(this.tokenize(text1));
179
+ const words2 = new Set(this.tokenize(text2));
180
+ const intersection = new Set([...words1].filter(w => words2.has(w)));
181
+ const union = new Set([...words1, ...words2]);
182
+ if (union.size === 0)
183
+ return 0;
184
+ return intersection.size / union.size;
185
+ }
186
+ /**
187
+ * テキストをトークン化
188
+ */
189
+ tokenize(text) {
190
+ // 簡易的なトークン化(形態素解析なし)
191
+ return text
192
+ .toLowerCase()
193
+ .replace(/[^\p{L}\p{N}\s]/gu, ' ')
194
+ .split(/\s+/)
195
+ .filter(w => w.length > 1);
196
+ }
197
+ /**
198
+ * クラスタの合意度を計算
199
+ */
200
+ calculateConsensus(cluster, allSourceIds) {
201
+ // 代表的な主張文を選択(最も確度が高いもの)
202
+ const representative = cluster.reduce((a, b) => a.confidence > b.confidence ? a : b);
203
+ // ソースを分類
204
+ const mentionedSources = new Set(cluster.map(c => c.sourceId));
205
+ const supportingSources = [...mentionedSources];
206
+ const neutralSources = allSourceIds.filter(id => !mentionedSources.has(id));
207
+ // 合意度 = 言及ソース数 / 全ソース数
208
+ const consensusScore = (supportingSources.length / allSourceIds.length) * 100;
209
+ return {
210
+ statement: representative.statement,
211
+ supportingSources,
212
+ opposingSources: [], // 否定の検出は高度なNLPが必要
213
+ neutralSources,
214
+ consensusScore,
215
+ };
216
+ }
217
+ /**
218
+ * 独自インサイトを抽出
219
+ */
220
+ extractUniqueInsights(_allClaims, clusters, sources) {
221
+ const insights = [];
222
+ // 単一ソースのみに含まれるクレームを抽出
223
+ for (const cluster of clusters) {
224
+ if (cluster.length === 1) {
225
+ const claim = cluster[0];
226
+ if (claim) {
227
+ const source = sources.find(s => s.id === claim.sourceId);
228
+ if (source && claim.confidence > 0.6) {
229
+ insights.push({
230
+ sourceId: claim.sourceId,
231
+ insight: claim.statement,
232
+ });
233
+ }
234
+ }
235
+ }
236
+ }
237
+ // ソースごとに最大3件に制限
238
+ const bySource = new Map();
239
+ for (const insight of insights) {
240
+ const list = bySource.get(insight.sourceId) || [];
241
+ if (list.length < 3) {
242
+ list.push(insight);
243
+ bySource.set(insight.sourceId, list);
244
+ }
245
+ }
246
+ return Array.from(bySource.values()).flat();
247
+ }
248
+ /**
249
+ * 比較マトリクスを生成
250
+ */
251
+ generateMatrix(comparisons, sources) {
252
+ if (comparisons.length === 0) {
253
+ return '| Claim | (No claims extracted) |\n|-------|----------------------|';
254
+ }
255
+ // ヘッダー行
256
+ const sourceNames = sources.map(s => s.metadata?.title || s.id);
257
+ const header = `| Claim | ${sourceNames.join(' | ')} |`;
258
+ const separator = `|${'-'.repeat(7)}|${sourceNames.map(() => '-'.repeat(5)).join('|')}|`;
259
+ // データ行
260
+ const rows = comparisons.slice(0, 10).map(comp => {
261
+ const shortClaim = comp.statement.slice(0, 50) + (comp.statement.length > 50 ? '...' : '');
262
+ const cells = sources.map(s => {
263
+ if (comp.supportingSources.includes(s.id))
264
+ return '✓';
265
+ if (comp.opposingSources.includes(s.id))
266
+ return '✗';
267
+ return '-';
268
+ });
269
+ return `| ${shortClaim} | ${cells.join(' | ')} |`;
270
+ });
271
+ return [header, separator, ...rows].join('\n');
272
+ }
273
+ /**
274
+ * 要約を生成
275
+ */
276
+ generateSummary(topic, comparisons, uniqueInsights) {
277
+ const consensusClaims = comparisons.filter(c => c.consensusScore >= 80);
278
+ const controversialClaims = comparisons.filter(c => c.consensusScore < 50 && c.supportingSources.length > 0);
279
+ const parts = [];
280
+ parts.push(`## ${topic} - 比較分析結果`);
281
+ parts.push('');
282
+ if (consensusClaims.length > 0) {
283
+ parts.push(`### 合意点(${consensusClaims.length}件)`);
284
+ for (const claim of consensusClaims.slice(0, 5)) {
285
+ parts.push(`- ${claim.statement}`);
286
+ }
287
+ parts.push('');
288
+ }
289
+ if (controversialClaims.length > 0) {
290
+ parts.push(`### 意見が分かれる点(${controversialClaims.length}件)`);
291
+ for (const claim of controversialClaims.slice(0, 5)) {
292
+ parts.push(`- ${claim.statement}`);
293
+ }
294
+ parts.push('');
295
+ }
296
+ if (uniqueInsights.length > 0) {
297
+ parts.push(`### 独自の視点(${uniqueInsights.length}件)`);
298
+ for (const insight of uniqueInsights.slice(0, 5)) {
299
+ parts.push(`- [${insight.sourceId}] ${insight.insight}`);
300
+ }
301
+ }
302
+ return parts.join('\n');
303
+ }
304
+ }
305
+ //# sourceMappingURL=multi-source-comparator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"multi-source-comparator.js","sourceRoot":"","sources":["../../src/comparator/multi-source-comparator.ts"],"names":[],"mappings":"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"}