@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.
Files changed (61) hide show
  1. package/dist/entity/entity-extractor.d.ts +44 -0
  2. package/dist/entity/entity-extractor.d.ts.map +1 -0
  3. package/dist/entity/entity-extractor.js +176 -0
  4. package/dist/entity/entity-extractor.js.map +1 -0
  5. package/dist/entity/index.d.ts +6 -0
  6. package/dist/entity/index.d.ts.map +1 -0
  7. package/dist/entity/index.js +5 -0
  8. package/dist/entity/index.js.map +1 -0
  9. package/dist/index.d.ts +17 -0
  10. package/dist/index.d.ts.map +1 -0
  11. package/dist/index.js +16 -0
  12. package/dist/index.js.map +1 -0
  13. package/dist/interfaces.d.ts +37 -0
  14. package/dist/interfaces.d.ts.map +1 -0
  15. package/dist/interfaces.js +8 -0
  16. package/dist/interfaces.js.map +1 -0
  17. package/dist/quality/index.d.ts +6 -0
  18. package/dist/quality/index.d.ts.map +1 -0
  19. package/dist/quality/index.js +5 -0
  20. package/dist/quality/index.js.map +1 -0
  21. package/dist/quality/quality-scorer.d.ts +65 -0
  22. package/dist/quality/quality-scorer.d.ts.map +1 -0
  23. package/dist/quality/quality-scorer.js +308 -0
  24. package/dist/quality/quality-scorer.js.map +1 -0
  25. package/dist/relation/index.d.ts +6 -0
  26. package/dist/relation/index.d.ts.map +1 -0
  27. package/dist/relation/index.js +5 -0
  28. package/dist/relation/index.js.map +1 -0
  29. package/dist/relation/relation-analyzer.d.ts +80 -0
  30. package/dist/relation/relation-analyzer.d.ts.map +1 -0
  31. package/dist/relation/relation-analyzer.js +192 -0
  32. package/dist/relation/relation-analyzer.js.map +1 -0
  33. package/dist/structure/index.d.ts +5 -0
  34. package/dist/structure/index.d.ts.map +1 -0
  35. package/dist/structure/index.js +5 -0
  36. package/dist/structure/index.js.map +1 -0
  37. package/dist/structure/structure-analyzer.d.ts +108 -0
  38. package/dist/structure/structure-analyzer.d.ts.map +1 -0
  39. package/dist/structure/structure-analyzer.js +248 -0
  40. package/dist/structure/structure-analyzer.js.map +1 -0
  41. package/dist/text/index.d.ts +5 -0
  42. package/dist/text/index.d.ts.map +1 -0
  43. package/dist/text/index.js +5 -0
  44. package/dist/text/index.js.map +1 -0
  45. package/dist/text/text-analyzer.d.ts +56 -0
  46. package/dist/text/text-analyzer.d.ts.map +1 -0
  47. package/dist/text/text-analyzer.js +281 -0
  48. package/dist/text/text-analyzer.js.map +1 -0
  49. package/dist/topic/index.d.ts +6 -0
  50. package/dist/topic/index.d.ts.map +1 -0
  51. package/dist/topic/index.js +5 -0
  52. package/dist/topic/index.js.map +1 -0
  53. package/dist/topic/topic-modeler.d.ts +79 -0
  54. package/dist/topic/topic-modeler.d.ts.map +1 -0
  55. package/dist/topic/topic-modeler.js +267 -0
  56. package/dist/topic/topic-modeler.js.map +1 -0
  57. package/dist/types.d.ts +74 -0
  58. package/dist/types.d.ts.map +1 -0
  59. package/dist/types.js +7 -0
  60. package/dist/types.js.map +1 -0
  61. package/package.json +39 -0
@@ -0,0 +1,308 @@
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
+ const SUBJECTIVE_PATTERNS = [
12
+ /私[はが]?思[うい]/,
13
+ /絶対に/,
14
+ /最高/,
15
+ /最悪/,
16
+ /素晴らしい/,
17
+ /ひどい/,
18
+ /大好き/,
19
+ /大嫌い/,
20
+ /!+/,
21
+ /?+/,
22
+ /きっと/,
23
+ /たぶん/,
24
+ /definitely/i,
25
+ /absolutely/i,
26
+ /amazing/i,
27
+ /terrible/i,
28
+ /best/i,
29
+ /worst/i,
30
+ ];
31
+ /**
32
+ * コンテンツ品質スコアリング実装
33
+ */
34
+ export class QualityScorer {
35
+ /**
36
+ * コンテンツ品質をスコアリング
37
+ */
38
+ scoreContent(text) {
39
+ if (!text || text.trim().length === 0) {
40
+ return {
41
+ overall: 0,
42
+ dimensions: [],
43
+ };
44
+ }
45
+ const dimensions = [
46
+ this.scoreReadability(text),
47
+ this.scoreCompleteness(text),
48
+ this.scoreCitation(text),
49
+ this.scoreObjectivity(text),
50
+ this.scoreFreshness(text),
51
+ ];
52
+ // Calculate weighted average
53
+ const weights = [0.25, 0.2, 0.2, 0.2, 0.15];
54
+ let overall = 0;
55
+ for (let i = 0; i < dimensions.length; i++) {
56
+ overall += (dimensions[i]?.score ?? 0) * (weights[i] ?? 0.2);
57
+ }
58
+ return {
59
+ overall: Math.min(Math.max(overall, 0), 1),
60
+ dimensions,
61
+ };
62
+ }
63
+ /**
64
+ * 可読性スコア
65
+ */
66
+ scoreReadability(text) {
67
+ if (!text.trim()) {
68
+ return { name: 'readability', score: 0, details: '空のテキスト' };
69
+ }
70
+ // Split into sentences
71
+ const sentences = text.split(/[。!?.!?]+/).filter(s => s.trim().length > 0);
72
+ if (sentences.length === 0) {
73
+ return { name: 'readability', score: 0.5, details: '文が検出されませんでした' };
74
+ }
75
+ // Calculate average sentence length
76
+ const avgLength = sentences.reduce((sum, s) => sum + s.trim().length, 0) / sentences.length;
77
+ // Score based on average sentence length
78
+ // Ideal sentence length is around 20-40 characters
79
+ let score;
80
+ if (avgLength <= 40) {
81
+ score = 1;
82
+ }
83
+ else if (avgLength <= 60) {
84
+ score = 0.9;
85
+ }
86
+ else if (avgLength <= 80) {
87
+ score = 0.7;
88
+ }
89
+ else if (avgLength <= 100) {
90
+ score = 0.5;
91
+ }
92
+ else {
93
+ score = 0.3;
94
+ }
95
+ // Check for paragraph breaks (bonus)
96
+ const paragraphs = text.split(/\n\s*\n/).filter(p => p.trim().length > 0);
97
+ if (paragraphs.length > 1) {
98
+ score = Math.min(score + 0.1, 1);
99
+ }
100
+ return {
101
+ name: 'readability',
102
+ score,
103
+ details: `平均文長: ${avgLength.toFixed(1)}文字`,
104
+ };
105
+ }
106
+ /**
107
+ * 完全性スコア
108
+ */
109
+ scoreCompleteness(text) {
110
+ if (!text.trim()) {
111
+ return { name: 'completeness', score: 0, details: '空のテキスト' };
112
+ }
113
+ let score = 0.3; // Base score for having content
114
+ const details = [];
115
+ // Check for headings
116
+ const headings = text.match(/^#+\s+.+$/gm) ?? [];
117
+ if (headings.length > 0) {
118
+ score += 0.2;
119
+ details.push(`${headings.length}個の見出し`);
120
+ }
121
+ // Check for multiple sections
122
+ const sections = text.split(/\n#{1,3}\s+/).length;
123
+ if (sections > 2) {
124
+ score += 0.15;
125
+ details.push('複数セクション');
126
+ }
127
+ // Check for lists
128
+ const lists = text.match(/^[-*+]\s+.+$/gm) ?? text.match(/^\d+\.\s+.+$/gm) ?? [];
129
+ if (lists.length > 0) {
130
+ score += 0.1;
131
+ details.push('リスト含む');
132
+ }
133
+ // Check for reasonable length
134
+ const wordCount = text.split(/\s+/).length;
135
+ if (wordCount > 100) {
136
+ score += 0.15;
137
+ details.push('十分な長さ');
138
+ }
139
+ // Check for code blocks
140
+ const codeBlocks = text.match(/```[\s\S]*?```/g) ?? [];
141
+ if (codeBlocks.length > 0) {
142
+ score += 0.1;
143
+ details.push('コードブロック含む');
144
+ }
145
+ return {
146
+ name: 'completeness',
147
+ score: Math.min(score, 1),
148
+ details: details.join(', ') || 'コンテンツあり',
149
+ };
150
+ }
151
+ /**
152
+ * 引用・参照スコア
153
+ */
154
+ scoreCitation(text) {
155
+ if (!text.trim()) {
156
+ return { name: 'citation', score: 0, details: '空のテキスト' };
157
+ }
158
+ let score = 0.2; // Base score
159
+ const details = [];
160
+ // Check for URLs
161
+ const urls = text.match(/https?:\/\/[^\s<>"{}|\\^`\[\]]+/g) ?? [];
162
+ if (urls.length > 0) {
163
+ score += Math.min(0.3, urls.length * 0.1);
164
+ details.push(`${urls.length}個のURL`);
165
+ }
166
+ // Check for citation patterns [1], [2], etc.
167
+ const citations = text.match(/\[\d+\]/g) ?? [];
168
+ if (citations.length > 0) {
169
+ score += Math.min(0.2, citations.length * 0.05);
170
+ details.push(`${citations.length}個の引用`);
171
+ }
172
+ // Check for "参考" or "参照" sections
173
+ if (/参考|参照|References|Sources|Bibliography/i.test(text)) {
174
+ score += 0.15;
175
+ details.push('参考セクション');
176
+ }
177
+ // Check for quotes
178
+ const quotes = text.match(/「[^」]+」|"[^"]+"/g) ?? [];
179
+ if (quotes.length > 0) {
180
+ score += Math.min(0.15, quotes.length * 0.03);
181
+ details.push(`${quotes.length}個の引用符`);
182
+ }
183
+ return {
184
+ name: 'citation',
185
+ score: Math.min(score, 1),
186
+ details: details.join(', ') || '引用なし',
187
+ };
188
+ }
189
+ /**
190
+ * 客観性スコア
191
+ */
192
+ scoreObjectivity(text) {
193
+ if (!text.trim()) {
194
+ return { name: 'objectivity', score: 0, details: '空のテキスト' };
195
+ }
196
+ let score = 0.8; // Start high, penalize subjective content
197
+ const details = [];
198
+ let subjectiveCount = 0;
199
+ for (const pattern of SUBJECTIVE_PATTERNS) {
200
+ const matches = text.match(pattern);
201
+ if (matches) {
202
+ subjectiveCount += matches.length;
203
+ }
204
+ }
205
+ if (subjectiveCount > 0) {
206
+ score -= Math.min(0.5, subjectiveCount * 0.1);
207
+ details.push(`${subjectiveCount}個の主観的表現`);
208
+ }
209
+ // Check for data/numbers (more objective)
210
+ const numbers = text.match(/\d+(?:[,.]\d+)?(?:%|円|ドル|個|件|人)?/g) ?? [];
211
+ if (numbers.length > 0) {
212
+ score += Math.min(0.15, numbers.length * 0.02);
213
+ details.push('数値データ含む');
214
+ }
215
+ // Check for "によると" (according to)
216
+ if (/によると|according to/i.test(text)) {
217
+ score += 0.1;
218
+ details.push('出典参照あり');
219
+ }
220
+ return {
221
+ name: 'objectivity',
222
+ score: Math.min(Math.max(score, 0), 1),
223
+ details: details.join(', ') || '客観的',
224
+ };
225
+ }
226
+ /**
227
+ * 新鮮さスコア
228
+ */
229
+ scoreFreshness(text) {
230
+ const currentYear = new Date().getFullYear();
231
+ // Extract years from text
232
+ const yearMatches = text.match(/20\d{2}年?/g) ?? [];
233
+ const years = yearMatches.map(y => parseInt(y.replace('年', '')));
234
+ if (years.length === 0) {
235
+ return {
236
+ name: 'freshness',
237
+ score: 0.5, // Neutral score when no dates
238
+ details: '日付情報なし',
239
+ };
240
+ }
241
+ // Get most recent year mentioned
242
+ const mostRecent = Math.max(...years);
243
+ const age = currentYear - mostRecent;
244
+ let score;
245
+ let details;
246
+ if (age <= 0) {
247
+ score = 1;
248
+ details = '最新';
249
+ }
250
+ else if (age <= 1) {
251
+ score = 0.9;
252
+ details = '1年以内';
253
+ }
254
+ else if (age <= 2) {
255
+ score = 0.7;
256
+ details = '2年以内';
257
+ }
258
+ else if (age <= 5) {
259
+ score = 0.5;
260
+ details = `${age}年前`;
261
+ }
262
+ else {
263
+ score = Math.max(0.2, 0.5 - (age - 5) * 0.05);
264
+ details = `${age}年前(古い情報)`;
265
+ }
266
+ return {
267
+ name: 'freshness',
268
+ score,
269
+ details,
270
+ };
271
+ }
272
+ /**
273
+ * 品質レポート生成
274
+ */
275
+ getQualityReport(text) {
276
+ const score = this.scoreContent(text);
277
+ const strengths = [];
278
+ const improvements = [];
279
+ for (const dim of score.dimensions) {
280
+ if (dim.score >= 0.7) {
281
+ strengths.push(`${dim.name}: ${dim.details}`);
282
+ }
283
+ else if (dim.score < 0.5) {
284
+ improvements.push(`${dim.name}の改善: ${dim.details}`);
285
+ }
286
+ }
287
+ let summary;
288
+ if (score.overall >= 0.8) {
289
+ summary = '高品質なコンテンツです。';
290
+ }
291
+ else if (score.overall >= 0.6) {
292
+ summary = '良好なコンテンツですが、改善の余地があります。';
293
+ }
294
+ else if (score.overall >= 0.4) {
295
+ summary = '基本的なコンテンツですが、複数の改善が推奨されます。';
296
+ }
297
+ else {
298
+ summary = 'コンテンツの品質向上が必要です。';
299
+ }
300
+ return {
301
+ score,
302
+ summary,
303
+ strengths,
304
+ improvements,
305
+ };
306
+ }
307
+ }
308
+ //# sourceMappingURL=quality-scorer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"quality-scorer.js","sourceRoot":"","sources":["../../src/quality/quality-scorer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Relation module exports
3
+ */
4
+ export { RelationAnalyzer, } from './relation-analyzer.js';
5
+ export type { RelationType, EntityPair, Relation, GraphNode, GraphEdge, RelationGraph, } from './relation-analyzer.js';
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/relation/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EACL,gBAAgB,GACjB,MAAM,wBAAwB,CAAC;AAEhC,YAAY,EACV,YAAY,EACZ,UAAU,EACV,QAAQ,EACR,SAAS,EACT,SAAS,EACT,aAAa,GACd,MAAM,wBAAwB,CAAC"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Relation module exports
3
+ */
4
+ export { RelationAnalyzer, } from './relation-analyzer.js';
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/relation/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EACL,gBAAgB,GACjB,MAAM,wBAAwB,CAAC"}
@@ -0,0 +1,80 @@
1
+ /**
2
+ * RelationAnalyzer - エンティティ間関係分析
3
+ *
4
+ * @requirement REQ-ANALYZE-009
5
+ * @design DES-KATASHIRO-001 §2.2 Analyzer Container
6
+ * @task TSK-023
7
+ */
8
+ import type { Entity } from '../entity/entity-extractor.js';
9
+ /**
10
+ * 関係タイプ
11
+ */
12
+ export type RelationType = 'works_for' | 'located_in' | 'owns' | 'part_of' | 'temporal' | 'causal' | 'related';
13
+ /**
14
+ * エンティティペア
15
+ */
16
+ export interface EntityPair {
17
+ readonly source: Entity;
18
+ readonly target: Entity;
19
+ readonly distance: number;
20
+ readonly context: string;
21
+ }
22
+ /**
23
+ * 抽出された関係
24
+ */
25
+ export interface Relation {
26
+ readonly type: RelationType;
27
+ readonly source: Entity;
28
+ readonly target: Entity;
29
+ readonly confidence: number;
30
+ readonly evidence?: string;
31
+ }
32
+ /**
33
+ * 関係グラフのノード
34
+ */
35
+ export interface GraphNode {
36
+ readonly id: string;
37
+ readonly entity: Entity;
38
+ }
39
+ /**
40
+ * 関係グラフのエッジ
41
+ */
42
+ export interface GraphEdge {
43
+ readonly source: string;
44
+ readonly target: string;
45
+ readonly type: RelationType;
46
+ readonly confidence: number;
47
+ }
48
+ /**
49
+ * 関係グラフ
50
+ */
51
+ export interface RelationGraph {
52
+ readonly nodes: GraphNode[];
53
+ readonly edges: GraphEdge[];
54
+ }
55
+ /**
56
+ * エンティティ間関係分析実装
57
+ */
58
+ export declare class RelationAnalyzer {
59
+ /**
60
+ * テキストとエンティティから関係を抽出
61
+ */
62
+ extractRelations(text: string, entities: Entity[]): Relation[];
63
+ /**
64
+ * エンティティの共起を検出
65
+ */
66
+ findCooccurrences(text: string, entities: Entity[]): EntityPair[];
67
+ /**
68
+ * 関係タイプを推論
69
+ */
70
+ inferRelationType(pair: EntityPair): RelationType;
71
+ /**
72
+ * 関係の信頼度を計算
73
+ */
74
+ private calculateConfidence;
75
+ /**
76
+ * 関係からグラフを構築
77
+ */
78
+ buildRelationGraph(relations: Relation[]): RelationGraph;
79
+ }
80
+ //# sourceMappingURL=relation-analyzer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"relation-analyzer.d.ts","sourceRoot":"","sources":["../../src/relation/relation-analyzer.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAc,MAAM,+BAA+B,CAAC;AAExE;;GAEG;AACH,MAAM,MAAM,YAAY,GACpB,WAAW,GACX,YAAY,GACZ,MAAM,GACN,SAAS,GACT,UAAU,GACV,QAAQ,GACR,SAAS,CAAC;AAEd;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAED;;GAEG;AACH,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAC;IAC5B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAED;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAC;IAC5B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,KAAK,EAAE,SAAS,EAAE,CAAC;IAC5B,QAAQ,CAAC,KAAK,EAAE,SAAS,EAAE,CAAC;CAC7B;AA0CD;;GAEG;AACH,qBAAa,gBAAgB;IAC3B;;OAEG;IACH,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,QAAQ,EAAE;IAqC9D;;OAEG;IACH,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,UAAU,EAAE;IA0BjE;;OAEG;IACH,iBAAiB,CAAC,IAAI,EAAE,UAAU,GAAG,YAAY;IAiCjD;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAuB3B;;OAEG;IACH,kBAAkB,CAAC,SAAS,EAAE,QAAQ,EAAE,GAAG,aAAa;CAuCzD"}
@@ -0,0 +1,192 @@
1
+ /**
2
+ * RelationAnalyzer - エンティティ間関係分析
3
+ *
4
+ * @requirement REQ-ANALYZE-009
5
+ * @design DES-KATASHIRO-001 §2.2 Analyzer Container
6
+ * @task TSK-023
7
+ */
8
+ /**
9
+ * 関係パターン定義
10
+ */
11
+ const RELATION_PATTERNS = [
12
+ {
13
+ sourceTypes: ['person'],
14
+ targetTypes: ['organization'],
15
+ keywords: [/働[いくけ]/, /勤務/, /所属/, /社員/, /従業員/, /の[社会]長/, /の部長/, /の課長/],
16
+ relationType: 'works_for',
17
+ },
18
+ {
19
+ sourceTypes: ['organization', 'person'],
20
+ targetTypes: ['location'],
21
+ keywords: [/にある/, /にあり/, /へある/, /へあり/, /に位置/, /へ位置/, /に所在/, /へ所在/, /本社/, /拠点/, /オフィス/, /住[むん]/],
22
+ relationType: 'located_in',
23
+ },
24
+ {
25
+ sourceTypes: ['person', 'organization'],
26
+ targetTypes: ['organization'],
27
+ keywords: [/所有/, /保有/, /オーナー/, /買収/, /傘下/],
28
+ relationType: 'owns',
29
+ },
30
+ {
31
+ sourceTypes: ['organization'],
32
+ targetTypes: ['organization'],
33
+ keywords: [/子会社/, /グループ/, /部門/, /一部/, /傘下/],
34
+ relationType: 'part_of',
35
+ },
36
+ ];
37
+ /**
38
+ * エンティティ間関係分析実装
39
+ */
40
+ export class RelationAnalyzer {
41
+ /**
42
+ * テキストとエンティティから関係を抽出
43
+ */
44
+ extractRelations(text, entities) {
45
+ if (entities.length < 2) {
46
+ // Check for temporal relations with single date entity
47
+ const dateEntities = entities.filter(e => e.type === 'date');
48
+ if (dateEntities.length > 0) {
49
+ return dateEntities.map(e => ({
50
+ type: 'temporal',
51
+ source: e,
52
+ target: e,
53
+ confidence: 0.7,
54
+ evidence: text,
55
+ }));
56
+ }
57
+ return [];
58
+ }
59
+ const relations = [];
60
+ const pairs = this.findCooccurrences(text, entities);
61
+ for (const pair of pairs) {
62
+ const relationType = this.inferRelationType(pair);
63
+ const confidence = this.calculateConfidence(pair, relationType);
64
+ if (confidence > 0.3) {
65
+ relations.push({
66
+ type: relationType,
67
+ source: pair.source,
68
+ target: pair.target,
69
+ confidence,
70
+ evidence: pair.context,
71
+ });
72
+ }
73
+ }
74
+ return relations;
75
+ }
76
+ /**
77
+ * エンティティの共起を検出
78
+ */
79
+ findCooccurrences(text, entities) {
80
+ const pairs = [];
81
+ for (let i = 0; i < entities.length; i++) {
82
+ for (let j = i + 1; j < entities.length; j++) {
83
+ const e1 = entities[i];
84
+ const e2 = entities[j];
85
+ if (!e1 || !e2)
86
+ continue;
87
+ const distance = Math.abs(e1.end - e2.start);
88
+ const start = Math.min(e1.start, e2.start);
89
+ const end = Math.max(e1.end, e2.end);
90
+ const context = text.slice(Math.max(0, start - 10), Math.min(text.length, end + 10));
91
+ pairs.push({
92
+ source: e1,
93
+ target: e2,
94
+ distance,
95
+ context,
96
+ });
97
+ }
98
+ }
99
+ return pairs;
100
+ }
101
+ /**
102
+ * 関係タイプを推論
103
+ */
104
+ inferRelationType(pair) {
105
+ const { source, target, context } = pair;
106
+ // Check patterns
107
+ for (const pattern of RELATION_PATTERNS) {
108
+ const sourceMatch = pattern.sourceTypes.includes(source.type);
109
+ const targetMatch = pattern.targetTypes.includes(target.type);
110
+ if (sourceMatch && targetMatch) {
111
+ for (const keyword of pattern.keywords) {
112
+ if (keyword.test(context)) {
113
+ return pattern.relationType;
114
+ }
115
+ }
116
+ }
117
+ // Also check reverse
118
+ const reverseSourceMatch = pattern.sourceTypes.includes(target.type);
119
+ const reverseTargetMatch = pattern.targetTypes.includes(source.type);
120
+ if (reverseSourceMatch && reverseTargetMatch) {
121
+ for (const keyword of pattern.keywords) {
122
+ if (keyword.test(context)) {
123
+ return pattern.relationType;
124
+ }
125
+ }
126
+ }
127
+ }
128
+ // Default fallback
129
+ return 'related';
130
+ }
131
+ /**
132
+ * 関係の信頼度を計算
133
+ */
134
+ calculateConfidence(pair, relationType) {
135
+ let confidence = 0.5;
136
+ // Distance factor: closer entities have higher confidence
137
+ if (pair.distance < 10) {
138
+ confidence += 0.2;
139
+ }
140
+ else if (pair.distance < 30) {
141
+ confidence += 0.1;
142
+ }
143
+ // Type-specific confidence boost
144
+ if (relationType !== 'related') {
145
+ confidence += 0.2;
146
+ }
147
+ // Context length factor
148
+ if (pair.context.length > 20) {
149
+ confidence += 0.1;
150
+ }
151
+ return Math.min(confidence, 1.0);
152
+ }
153
+ /**
154
+ * 関係からグラフを構築
155
+ */
156
+ buildRelationGraph(relations) {
157
+ const nodeMap = new Map();
158
+ const edges = [];
159
+ for (const relation of relations) {
160
+ // Add source node
161
+ const sourceId = `${relation.source.type}:${relation.source.text}`;
162
+ if (!nodeMap.has(sourceId)) {
163
+ nodeMap.set(sourceId, {
164
+ id: sourceId,
165
+ entity: relation.source,
166
+ });
167
+ }
168
+ // Add target node (if different from source)
169
+ const targetId = `${relation.target.type}:${relation.target.text}`;
170
+ if (!nodeMap.has(targetId) && relation.source !== relation.target) {
171
+ nodeMap.set(targetId, {
172
+ id: targetId,
173
+ entity: relation.target,
174
+ });
175
+ }
176
+ // Add edge (only if source and target are different)
177
+ if (sourceId !== targetId) {
178
+ edges.push({
179
+ source: sourceId,
180
+ target: targetId,
181
+ type: relation.type,
182
+ confidence: relation.confidence,
183
+ });
184
+ }
185
+ }
186
+ return {
187
+ nodes: Array.from(nodeMap.values()),
188
+ edges,
189
+ };
190
+ }
191
+ }
192
+ //# sourceMappingURL=relation-analyzer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"relation-analyzer.js","sourceRoot":"","sources":["../../src/relation/relation-analyzer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Structure module exports
3
+ */
4
+ export { StructureAnalyzer, type Heading, type Section, type OutlineNode, type ListInfo, type CodeBlock, type TableInfo, type StructureAnalysis, } from './structure-analyzer.js';
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/structure/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,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,yBAAyB,CAAC"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Structure module exports
3
+ */
4
+ export { StructureAnalyzer, } from './structure-analyzer.js';
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/structure/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EACL,iBAAiB,GAQlB,MAAM,yBAAyB,CAAC"}