chinese-summary 1.0.0 → 1.0.2

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,486 @@
1
+ # chinese-summary
2
+
3
+ 中文文本概要提取库 — 纯机器算法,无 AI 依赖,零外部依赖。
4
+
5
+ 基于 TextRank + 位置加权 + TF-IDF 关键词加权 + MMR 多样性选句,支持 5 级压缩,可将长文压缩为一句话。
6
+
7
+ > Copyright (c) 2025 北京锋通科技有限公司
8
+ > Authors: 郭玉峰, 吴琼
9
+ > License: MIT
10
+
11
+ ## 特性
12
+
13
+ - **零外部依赖**:纯 TypeScript 实现,无需分词器、无需 AI 模型
14
+ - **字级 n-gram**:绕过中文分词,直接按字符滑动窗口计算相似度
15
+ - **5 级压缩**:从"不压缩"到"极致压缩为一句话",灵活控制摘要长度
16
+ - **位置加权**:首段首句、段落首尾句获得更高先验权重
17
+ - **TF-IDF 关键词加权**:包含全文关键词的句子获得额外权重,摘要更切题
18
+ - **MMR 去冗余**:选句时兼顾相关性和多样性,避免语义重复
19
+ - **子句连词处理**:极致压缩时自动剥离脱离上下文的连词,保证可读性
20
+ - **健壮性**:完善的输入校验、参数校验、数值安全防护
21
+
22
+ ## 安装
23
+
24
+ ```bash
25
+ npm install chinese-summary
26
+ ```
27
+
28
+ 或直接引用源码:
29
+
30
+ ```ts
31
+ import { extractSummary, rankSentences } from "./src/chinese-summary";
32
+ ```
33
+
34
+ ## 构建
35
+
36
+ 项目提供四种编译产物,覆盖所有使用场景:
37
+
38
+ | 文件 | 格式 | 适用环境 |
39
+ |------|------|----------|
40
+ | `dist/chinese-summary.cjs` | CJS | Node.js `require()` |
41
+ | `dist/chinese-summary.mjs` | ESM | Node.js `import`、浏览器 `<script type="module">` |
42
+ | `dist/chinese-summary.iife.js` | IIFE | 浏览器 `<script>` 标签,全局变量 `ChineseSummary` |
43
+ | `dist/chinese-summary.d.ts` | 类型声明 | TypeScript 智能提示 |
44
+
45
+ ```bash
46
+ # 构建
47
+ npm run build
48
+ ```
49
+
50
+ ## 使用方式
51
+
52
+ ### Node.js(CJS)
53
+
54
+ ```js
55
+ const { extractSummary, rankSentences } = require("chinese-summary");
56
+
57
+ const text = "人工智能是计算机科学的重要分支。深度学习推动了AI的快速发展。自然语言处理取得了突破性进展。";
58
+
59
+ const result = extractSummary(text, { compressionLevel: 3 });
60
+ console.log(result.text);
61
+ ```
62
+
63
+ ### Node.js(ESM)
64
+
65
+ ```ts
66
+ import { extractSummary, rankSentences } from "chinese-summary";
67
+
68
+ const text = "人工智能是计算机科学的重要分支。深度学习推动了AI的快速发展。自然语言处理取得了突破性进展。";
69
+
70
+ const result = extractSummary(text, { compressionLevel: 3 });
71
+ console.log(result.text);
72
+ ```
73
+
74
+ ### 浏览器(IIFE — `<script>` 标签)
75
+
76
+ ```html
77
+ <script src="dist/chinese-summary.iife.js"></script>
78
+ <script>
79
+ var text = "人工智能是计算机科学的重要分支。深度学习推动了AI的快速发展。";
80
+ var result = ChineseSummary.extractSummary(text, { compressionLevel: 2 });
81
+ console.log(result.text);
82
+ </script>
83
+ ```
84
+
85
+ > IIFE 版本通过全局变量 `ChineseSummary` 暴露 `extractSummary` 和 `rankSentences` 两个函数。
86
+
87
+ ### 浏览器(ES Module)
88
+
89
+ ```html
90
+ <script type="module">
91
+ import { extractSummary } from "./dist/chinese-summary.mjs";
92
+
93
+ const text = document.querySelector("article").textContent;
94
+ const result = extractSummary(text, { compressionLevel: 2 });
95
+ console.log(result.text);
96
+ </script>
97
+ ```
98
+
99
+ ### npm + 打包工具(Webpack / Vite / Rollup)
100
+
101
+ ```ts
102
+ import { extractSummary } from "chinese-summary";
103
+
104
+ const result = extractSummary(text, { compressionLevel: 2 });
105
+ ```
106
+
107
+ ## 快速开始
108
+
109
+ ```ts
110
+ import { extractSummary } from "chinese-summary";
111
+
112
+ const text = "人工智能是计算机科学的重要分支。深度学习推动了AI的快速发展。自然语言处理取得了突破性进展。";
113
+
114
+ // 默认:级别 3(中度压缩,约 30% 句子)
115
+ const result = extractSummary(text);
116
+ console.log(result.text);
117
+ // → "人工智能是计算机科学的重要分支。 自然语言处理取得了突破性进展。"
118
+
119
+ // 极致压缩:压缩为一句话
120
+ const extreme = extractSummary(text, { compressionLevel: 1 });
121
+ console.log(extreme.text);
122
+ // → "人工智能是计算机科学的重要分支,自然语言处理取得了突破性进展"
123
+
124
+ // 指定句子数量(兼容旧接口)
125
+ const legacy = extractSummary(text, { sentenceCount: 2 });
126
+ console.log(legacy.text);
127
+ ```
128
+
129
+ ## 压缩级别
130
+
131
+ | 级别 | 说明 | 压缩策略 | 适用场景 |
132
+ |------|------|----------|----------|
133
+ | 1 | 极致压缩 | 子句级提取,拼接为一句话 | 标题生成、推送摘要 |
134
+ | 2 | 高度压缩 | 约 20% 句子 + 多轮重排 | 短摘要、列表预览 |
135
+ | 3 | 中度压缩 | 约 30% 句子(默认) | 通用摘要 |
136
+ | 4 | 轻度压缩 | 约 50% 句子 | 长摘要、速读 |
137
+ | 5 | 不压缩 | 返回全部句子 | 仅排序、调试 |
138
+
139
+ 各级别对比示例(1584 字 AI 文章):
140
+
141
+ | 级别 | 字数 | 压缩率 |
142
+ |------|------|--------|
143
+ | 1 | 69 字 | 95.6% |
144
+ | 2 | 408 字 | 74.2% |
145
+ | 3 | 536 字 | 66.2% |
146
+ | 4 | 886 字 | 44.1% |
147
+ | 5 | 1603 字 | -1.2% |
148
+
149
+ ## API
150
+
151
+ ### `extractSummary(text, options?)`
152
+
153
+ 提取中文文本概要。
154
+
155
+ **参数:**
156
+
157
+ | 参数 | 类型 | 必填 | 说明 |
158
+ |------|------|------|------|
159
+ | `text` | `string` | 是 | 原始中文文本 |
160
+ | `options` | `SummaryOptions` | 否 | 配置选项 |
161
+
162
+ **返回值:** `SummaryResult`
163
+
164
+ ```ts
165
+ interface SummaryResult {
166
+ summary: string[]; // 摘要句子(按原文顺序)
167
+ sentences: SentenceInfo[]; // 所有句子及其得分
168
+ text: string; // 摘要文本(句子间用空格连接)
169
+ compressionLevel: 1|2|3|4|5;
170
+ clauses?: ClauseInfo[]; // 子句信息(仅级别 1)
171
+ }
172
+ ```
173
+
174
+ ```ts
175
+ interface ClauseInfo {
176
+ text: string; // 子句文本
177
+ sourceSentenceIndex: number;// 来源句子序号
178
+ clauseIndex: number; // 在来源句子中的序号
179
+ isMainClause: boolean; // 是否为句子的主干子句(第一个子句)
180
+ score: number; // TextRank 得分
181
+ }
182
+ ```
183
+
184
+ ### `rankSentences(text, options?)`
185
+
186
+ 仅获取句子得分排名,不提取摘要。用于调试和分析。
187
+
188
+ **返回值:** `SentenceInfo[]`(按得分降序排列)
189
+
190
+ ```ts
191
+ interface SentenceInfo {
192
+ index: number; // 全文序号
193
+ text: string; // 句子文本
194
+ paragraphIndex: number; // 段落序号
195
+ sentenceInParagraph: number;// 段落内序号
196
+ isParagraphStart: boolean; // 是否段落首句
197
+ isParagraphEnd: boolean; // 是否段落末句
198
+ isFirstParagraph: boolean; // 是否首段
199
+ score: number; // TextRank 得分
200
+ }
201
+ ```
202
+
203
+ ## 配置选项
204
+
205
+ ### 压缩控制
206
+
207
+ | 选项 | 类型 | 默认值 | 说明 |
208
+ |------|------|--------|------|
209
+ | `compressionLevel` | `1\|2\|3\|4\|5` | `3` | 压缩级别,与 `sentenceCount` 互斥,优先级更高 |
210
+ | `sentenceCount` | `number` | `3` | 摘要句子数量(旧接口,仅未指定 `compressionLevel` 时生效) |
211
+ | `maxClauses` | `number` | `3` | 极致压缩时最大子句数(仅级别 1) |
212
+
213
+ ### TextRank 算法
214
+
215
+ | 选项 | 类型 | 默认值 | 范围 | 说明 |
216
+ |------|------|--------|------|------|
217
+ | `ngramSize` | `number` | `2` | 1-5 | n-gram 大小,2=bigram |
218
+ | `dampingFactor` | `number` | `0.85` | 0.1-0.95 | 阻尼系数 d |
219
+ | `maxIterations` | `number` | `30` | 1-200 | 最大迭代次数 |
220
+ | `convergenceThreshold` | `number` | `0.0001` | 1e-8~1 | 收敛阈值 |
221
+
222
+ ### 位置权重
223
+
224
+ | 选项 | 类型 | 默认值 | 范围 | 说明 |
225
+ |------|------|--------|------|------|
226
+ | `weightFirstSentence` | `number` | `1.5` | 0.5-5 | 首段首句权重 |
227
+ | `weightFirstParagraph` | `number` | `1.2` | 0.5-5 | 首段其他句权重 |
228
+ | `weightParagraphStart` | `number` | `1.1` | 0.5-5 | 段落首句权重 |
229
+ | `weightParagraphEnd` | `number` | `1.05` | 0.5-5 | 段落末句权重 |
230
+
231
+ 权重可叠加。例如首段首句 = `weightFirstSentence`,首段其他句 = `weightFirstParagraph`,非首段段落首句 = `weightParagraphStart`,段落末句额外乘以 `weightParagraphEnd`。
232
+
233
+ ### 多样性与关键词
234
+
235
+ | 选项 | 类型 | 默认值 | 范围 | 说明 |
236
+ |------|------|--------|------|------|
237
+ | `mmrLambda` | `number` | `0.7` | 0.3-1.0 | MMR 多样性系数 λ(仅级别 2-4) |
238
+ | `keywordWeight` | `number` | `1.2` | 0-5 | 关键词权重系数,0=关闭 |
239
+
240
+ **mmrLambda 调参指南:**
241
+ - `1.0`:纯得分排序,关闭 MMR(等同旧版行为)
242
+ - `0.7`:默认,平衡相关性与多样性
243
+ - `0.3`:最大多样性,摘要覆盖面最广
244
+
245
+ **keywordWeight 调参指南:**
246
+ - `0`:关闭关键词加权
247
+ - `1.2`:默认,适度提升包含关键词的句子
248
+ - `2.0+`:强主题聚焦,摘要高度围绕关键词
249
+
250
+ ### 文本处理
251
+
252
+ | 选项 | 类型 | 默认值 | 说明 |
253
+ |------|------|--------|------|
254
+ | `minSentenceLength` | `number` | `5` | 最小句子长度(字符),低于此值的句子被过滤 |
255
+ | `minClauseLength` | `number` | `3` | 最小子句长度(仅级别 1) |
256
+
257
+ ## 算法架构
258
+
259
+ ```
260
+ 输入文本
261
+
262
+ ├─ 1. 句子分割(按 。!?; 分句,按换行分段)
263
+
264
+ ├─ 2. TF-IDF 关键词提取(字级 unigram,停用字过滤)
265
+
266
+ ├─ 3. 字级 n-gram 提取(绕过分词)
267
+
268
+ ├─ 4. TextRank 迭代
269
+ │ 初始分数 = 位置权重 × 关键词权重
270
+ │ WS(Vi) = (1-d)×init(Vi) + d×Σ(sim(Vi,Vj)/Σsim(Vj,Vk))×WS(Vj)
271
+
272
+ ├─ 5. 句子选择
273
+ │ ├─ 级别 1:句子级 TextRank → Top-5 句 → 子句拆分 → 子句级 TextRank → 连词处理 → 拼接
274
+ │ ├─ 级别 2:多轮重排(两轮 TextRank)
275
+ │ ├─ 级别 3/4:TextRank + MMR 选句
276
+ │ └─ 级别 5:全部返回
277
+
278
+ └─ 6. 输出(按原文顺序排列)
279
+ ```
280
+
281
+ ### 核心算法说明
282
+
283
+ **TextRank**:本库从零实现了 TextRank 算法(未引用任何第三方 TextRank 库),将句子视为节点,字级 n-gram 相似度视为边权重,通过迭代计算每个句子的全局重要性得分。在此基础上,加入了位置先验权重和 TF-IDF 关键词权重作为初始分数,使算法更适应中文文章结构。
284
+
285
+ **位置加权**:中文文章通常遵循"首段点题、段首概括"的结构,因此首段首句、段落首句获得更高的先验权重。
286
+
287
+ **TF-IDF 关键词加权**:以句子为"文档",统计字级 unigram 的 TF-IDF 值,提取 Top-K 关键词。包含关键词越多的句子,先验权重越高。
288
+
289
+ **MMR(Maximal Marginal Relevance)**:选句时综合考虑相关性和多样性。公式:`MMR(s) = λ×score(s) - (1-λ)×max_sim(s, 已选句子集)`。每选一句,就惩罚与已选句子过于相似的新句子。
290
+
291
+ **子句连词处理**:极致压缩时,选出的子句可能以连词开头(如"然而""也""因此"),脱离上下文后语义不完整。处理策略:如果前一个子句也被选中则保留连词,否则剥离连词及后续标点。
292
+
293
+ ## 使用示例
294
+
295
+ ### 基础用法
296
+
297
+ ```ts
298
+ import { extractSummary } from "chinese-summary";
299
+
300
+ const text = `人工智能是计算机科学的重要分支,它致力于研究和开发用于模拟人类智能的理论和方法。
301
+ 深度学习技术的出现是这一轮AI复兴的关键推动力。
302
+ 自然语言处理是人工智能最活跃的研究方向之一。
303
+ 然而,人工智能的快速发展也带来了一系列社会问题和伦理挑战。
304
+ 展望未来,人工智能将继续深刻改变人类社会的方方面面。`;
305
+
306
+ // 各级别输出
307
+ for (const level of [1, 2, 3, 4, 5] as const) {
308
+ const result = extractSummary(text, { compressionLevel: level });
309
+ console.log(`级别${level}: ${result.text}`);
310
+ }
311
+ ```
312
+
313
+ ### 调整多样性
314
+
315
+ ```ts
316
+ // 关闭 MMR(纯得分排序,等同旧版行为)
317
+ const result1 = extractSummary(text, { compressionLevel: 3, mmrLambda: 1.0 });
318
+
319
+ // 最大多样性(摘要覆盖面最广)
320
+ const result2 = extractSummary(text, { compressionLevel: 3, mmrLambda: 0.3 });
321
+ ```
322
+
323
+ ### 调整主题聚焦度
324
+
325
+ ```ts
326
+ // 关闭关键词加权
327
+ const result1 = extractSummary(text, { compressionLevel: 3, keywordWeight: 0 });
328
+
329
+ // 强主题聚焦
330
+ const result2 = extractSummary(text, { compressionLevel: 3, keywordWeight: 2.0 });
331
+ ```
332
+
333
+ ### 极致压缩控制
334
+
335
+ ```ts
336
+ // 压缩为 2 个子句
337
+ const result1 = extractSummary(text, { compressionLevel: 1, maxClauses: 2 });
338
+
339
+ // 压缩为 5 个子句
340
+ const result2 = extractSummary(text, { compressionLevel: 1, maxClauses: 5 });
341
+ ```
342
+
343
+ ### 获取句子排名(调试用)
344
+
345
+ ```ts
346
+ import { rankSentences } from "chinese-summary";
347
+
348
+ const ranked = rankSentences(text);
349
+ for (const s of ranked.slice(0, 5)) {
350
+ console.log(`[${s.score.toFixed(4)}] ${s.text}`);
351
+ }
352
+ ```
353
+
354
+ ### 自定义位置权重
355
+
356
+ ```ts
357
+ // 强化首段首句(适合新闻类文章)
358
+ const result = extractSummary(text, {
359
+ compressionLevel: 3,
360
+ weightFirstSentence: 2.0,
361
+ weightFirstParagraph: 1.5,
362
+ });
363
+
364
+ // 弱化位置权重(让 TextRank 图结构主导,适合学术论文)
365
+ const result2 = extractSummary(text, {
366
+ compressionLevel: 3,
367
+ weightFirstSentence: 1.0,
368
+ weightFirstParagraph: 1.0,
369
+ weightParagraphStart: 1.0,
370
+ weightParagraphEnd: 1.0,
371
+ });
372
+ ```
373
+
374
+ ## 健壮性
375
+
376
+ 库对以下场景做了完善防护,不会崩溃:
377
+
378
+ - `null` / `undefined` / 非字符串输入 → 返回空结果
379
+ - 空字符串 / 纯空白 / 纯换行 → 返回空结果
380
+ - BOM / 零宽字符 / 混合换行符 → 自动清理
381
+ - 中文引号 `""` / 书名号 `《》` / Emoji → 正常处理
382
+ - `NaN` / `Infinity` / 超范围参数 → 自动修正为默认值
383
+ - TextRank 迭代中的 NaN / Infinity → 数值安全防护
384
+ - 单句子 / 单段落 / 重复句子 → 正常处理
385
+ - 无句末标点的文本 → 整段作为一个句子
386
+
387
+ ## 测试
388
+
389
+ 项目包含三组测试,覆盖功能验证、长文本效果和边界健壮性:
390
+
391
+ ```bash
392
+ # 基础功能测试
393
+ npx tsx test/test.ts
394
+
395
+ # 长文本测试(约 2000 字)
396
+ npx tsx test/test-long.ts
397
+
398
+ # 健壮性测试(74 项边界用例)
399
+ npx tsx test/test-robust.ts
400
+ ```
401
+
402
+ ### 测试覆盖范围
403
+
404
+ | 测试文件 | 用例数 | 覆盖内容 |
405
+ |----------|--------|----------|
406
+ | `test/test.ts` | 基础功能 | 5 级压缩输出、句子得分排名、各级别压缩率统计 |
407
+ | `test/test-long.ts` | 长文本 | 1584 字 AI 文章的各级压缩效果、极致压缩 maxClauses 参数对比、Top-10 句子排名 |
408
+ | `test/test-robust.ts` | 74 项 | null/undefined 输入、空字符串、BOM/零宽字符、NaN/Infinity 参数、超范围参数自动修正、单句/单段/重复句、混合换行符、中文引号/书名号/Emoji、无句末标点文本 |
409
+
410
+ ### 测试效果示例
411
+
412
+ 以 1584 字 AI 文章为例,各级别压缩效果:
413
+
414
+ | 级别 | 输出字数 | 压缩率 | 说明 |
415
+ |------|----------|--------|------|
416
+ | 1 | 69 字 | 95.6% | 极致压缩,3 个子句拼接为一句话 |
417
+ | 2 | 408 字 | 74.2% | 高度压缩,多轮重排精选核心句 |
418
+ | 3 | 536 字 | 66.2% | 中度压缩,TextRank + MMR 选句 |
419
+ | 4 | 886 字 | 44.1% | 轻度压缩,保留约半数句子 |
420
+ | 5 | 1603 字 | -1.2% | 不压缩,仅排序(字数微增因空格连接) |
421
+
422
+ 极致压缩 maxClauses 参数效果:
423
+
424
+ | maxClauses | 输出字数 | 压缩率 |
425
+ |------------|----------|--------|
426
+ | 2 | 49 字 | 96.9% |
427
+ | 3 | 69 字 | 95.6% |
428
+ | 4 | 94 字 | 94.1% |
429
+ | 5 | 116 字 | 92.7% |
430
+ | 6 | 145 字 | 90.8% |
431
+
432
+ ## 源码结构
433
+
434
+ 本库源码为单文件 `src/chinese-summary.ts`(约 1200 行),按流水线顺序组织,各段落职责和修改指引如下:
435
+
436
+ | 段落 | 行数 | 职责 | 修改指引 |
437
+ |------|------|------|----------|
438
+ | 类型定义 | ~80 行 | 公共接口 | 修改 API 时从这里开始 |
439
+ | 默认配置 | ~30 行 | 调参入口 | 新增选项需同步修改 SummaryOptions + DEFAULT_OPTIONS + sanitizeOptions |
440
+ | 工具函数 | ~70 行 | clampInt/Float/safeNumber | 一般不需要修改 |
441
+ | 1. 句子分割 | ~75 行 | 分句规则 | 如需支持更多标点或语言,修改此段 |
442
+ | 2. n-gram 提取 | ~25 行 | 字级滑动窗口 | 如需词级 n-gram,替换此段 |
443
+ | 2b. TF-IDF | ~90 行 | 关键词提取 | 如需换用其他关键词算法,替换此段 |
444
+ | 3. 相似度计算 | ~25 行 | n-gram 交集/log 归一化 | 如需换相似度公式,修改此段 |
445
+ | 4. 位置权重 | ~35 行 | 首段/首句/段尾先验 | 如需新增位置规则,修改此段 |
446
+ | 5. TextRank | ~85 行 | 核心迭代算法 | 如需换用 LexRank/LSA 等,替换此段 |
447
+ | 6. 压缩映射 | ~25 行 | 级别→句子数 | 如需调整各级压缩比例,修改此段 |
448
+ | 6b. MMR 选句 | ~80 行 | 多样性策略 | 如需换用其他去冗余算法,替换此段 |
449
+ | 7. 子句分割 | ~45 行 | 极致压缩专用 | 如需调整子句切分规则,修改此段 |
450
+ | 8. 子句 TextRank | ~55 行 | 极致压缩专用 | 一般不需要修改 |
451
+ | 9. 多轮重排 | ~55 行 | 高度压缩专用 | 如需调整重排策略,修改此段 |
452
+ | 10. 极致压缩 | ~190 行 | 子句提取+连词处理 | 如需调整拼接/连词逻辑,修改此段 |
453
+ | 11. 主接口 | ~155 行 | extractSummary / rankSentences | 新增压缩级别时修改此段 |
454
+
455
+ ## 局限性
456
+
457
+ - **字级 n-gram**:无法识别同义词("AI"和"人工智能"被视为不同词),可通过增大 `ngramSize` 缓解
458
+ - **无语义理解**:纯统计方法,无法理解深层语义关系
459
+ - **短文本效果有限**:少于 3 句的文本,摘要效果不明显
460
+ - **段落依赖换行**:段落划分依赖换行符,格式不规范的文本可能影响位置权重
461
+
462
+ ## 许可证
463
+
464
+ MIT License
465
+
466
+ Copyright (c) 2025 北京锋通科技有限公司
467
+
468
+ Authors: 郭玉峰, 吴琼
469
+
470
+ Permission is hereby granted, free of charge, to any person obtaining a copy
471
+ of this software and associated documentation files (the "Software"), to deal
472
+ in the Software without restriction, including without limitation the rights
473
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
474
+ copies of the Software, and to permit persons to whom the Software is
475
+ furnished to do so, subject to the following conditions:
476
+
477
+ The above copyright notice and this permission notice shall be included in all
478
+ copies or substantial portions of the Software.
479
+
480
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
481
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
482
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
483
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
484
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
485
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
486
+ SOFTWARE.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "chinese-summary",
3
- "version": "1.0.0",
3
+ "version": "1.0.2",
4
4
  "description": "中文文本概要提取库(TextRank + 位置加权 + TF-IDF + MMR)",
5
5
  "author": "郭玉峰, 吴琼 <gyfinjava@163.com> (北京锋通科技有限公司)",
6
6
  "license": "MIT",
@@ -35,7 +35,12 @@
35
35
  }
36
36
  },
37
37
  "files": [
38
- "dist"
38
+ "dist",
39
+ "src",
40
+ "test",
41
+ "docs",
42
+ "tsconfig.json",
43
+ "tsup.config.ts"
39
44
  ],
40
45
  "scripts": {
41
46
  "build": "tsup",