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.
package/README.md ADDED
@@ -0,0 +1,255 @@
1
+ # chinese-summary
2
+
3
+ [![npm version](https://img.shields.io/npm/v/chinese-summary.svg)](https://www.npmjs.com/package/chinese-summary)
4
+ [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
5
+
6
+ 中文文本概要提取库 — 纯机器算法,无 AI 依赖,零外部依赖。
7
+
8
+ 基于 TextRank + 位置加权 + TF-IDF 关键词加权 + MMR 多样性选句,支持 5 级压缩,可将长文压缩为一句话。
9
+
10
+ ## 特性
11
+
12
+ - **零外部依赖** — 纯 TypeScript 实现,无需分词器、无需 AI 模型
13
+ - **字级 n-gram** — 绕过中文分词,直接按字符滑动窗口计算相似度
14
+ - **5 级压缩** — 从"不压缩"到"极致压缩为一句话",灵活控制摘要长度
15
+ - **位置加权** — 首段首句、段落首尾句获得更高先验权重
16
+ - **TF-IDF 关键词加权** — 包含全文关键词的句子获得额外权重
17
+ - **MMR 去冗余** — 选句时兼顾相关性和多样性,避免语义重复
18
+ - **子句连词处理** — 极致压缩时自动剥离脱离上下文的连词
19
+ - **健壮性** — 完善的输入校验、参数校验、数值安全防护
20
+
21
+ ## 安装
22
+
23
+ ```bash
24
+ npm install chinese-summary
25
+ ```
26
+
27
+ ## 使用方式
28
+
29
+ ### Node.js(ESM)
30
+
31
+ ```ts
32
+ import { extractSummary, rankSentences } from "chinese-summary";
33
+
34
+ const text = "人工智能是计算机科学的重要分支。深度学习推动了AI的快速发展。自然语言处理取得了突破性进展。";
35
+
36
+ // 默认:级别 3(中度压缩,约 30% 句子)
37
+ const result = extractSummary(text);
38
+ console.log(result.text);
39
+
40
+ // 极致压缩:压缩为一句话
41
+ const extreme = extractSummary(text, { compressionLevel: 1 });
42
+ console.log(extreme.text);
43
+
44
+ // 指定句子数量(兼容旧接口)
45
+ const legacy = extractSummary(text, { sentenceCount: 2 });
46
+ console.log(legacy.text);
47
+ ```
48
+
49
+ ### Node.js(CJS)
50
+
51
+ ```js
52
+ const { extractSummary, rankSentences } = require("chinese-summary");
53
+
54
+ const result = extractSummary(text, { compressionLevel: 3 });
55
+ console.log(result.text);
56
+ ```
57
+
58
+ ### 浏览器(IIFE)
59
+
60
+ ```html
61
+ <script src="node_modules/chinese-summary/dist/chinese-summary.iife.js"></script>
62
+ <script>
63
+ var result = ChineseSummary.extractSummary(text, { compressionLevel: 2 });
64
+ console.log(result.text);
65
+ </script>
66
+ ```
67
+
68
+ ### 浏览器(ES Module)
69
+
70
+ ```html
71
+ <script type="module">
72
+ import { extractSummary } from "./node_modules/chinese-summary/dist/chinese-summary.mjs";
73
+ const result = extractSummary(text, { compressionLevel: 2 });
74
+ </script>
75
+ ```
76
+
77
+ ## 压缩级别
78
+
79
+ | 级别 | 说明 | 压缩策略 | 适用场景 |
80
+ |------|------|----------|----------|
81
+ | 1 | 极致压缩 | 子句级提取,拼接为一句话 | 标题生成、推送摘要 |
82
+ | 2 | 高度压缩 | 约 20% 句子 + 多轮重排 | 短摘要、列表预览 |
83
+ | 3 | 中度压缩 | 约 30% 句子(**默认**) | 通用摘要 |
84
+ | 4 | 轻度压缩 | 约 50% 句子 | 长摘要、速读 |
85
+ | 5 | 不压缩 | 返回全部句子 | 仅排序、调试 |
86
+
87
+ 压缩效果示例(1584 字 AI 文章):
88
+
89
+ | 级别 | 输出字数 | 压缩率 |
90
+ |------|----------|--------|
91
+ | 1 | 69 字 | 95.6% |
92
+ | 2 | 408 字 | 74.2% |
93
+ | 3 | 536 字 | 66.2% |
94
+ | 4 | 886 字 | 44.1% |
95
+ | 5 | 1603 字 | -1.2% |
96
+
97
+ ## API
98
+
99
+ ### `extractSummary(text, options?)`
100
+
101
+ 提取中文文本概要,返回 `SummaryResult`:
102
+
103
+ ```ts
104
+ interface SummaryResult {
105
+ summary: string[]; // 摘要句子(按原文顺序)
106
+ sentences: SentenceInfo[]; // 所有句子及其得分
107
+ text: string; // 摘要文本(句子间用空格连接)
108
+ compressionLevel: 1|2|3|4|5;
109
+ clauses?: ClauseInfo[]; // 子句信息(仅级别 1)
110
+ }
111
+ ```
112
+
113
+ ### `rankSentences(text, options?)`
114
+
115
+ 仅获取句子得分排名,不提取摘要。返回 `SentenceInfo[]`(按得分降序)。
116
+
117
+ ## 配置选项
118
+
119
+ ### 压缩控制
120
+
121
+ | 选项 | 类型 | 默认值 | 说明 |
122
+ |------|------|--------|------|
123
+ | `compressionLevel` | `1\|2\|3\|4\|5` | `3` | 压缩级别,与 `sentenceCount` 互斥 |
124
+ | `sentenceCount` | `number` | `3` | 摘要句子数(旧接口) |
125
+ | `maxClauses` | `number` | `3` | 极致压缩最大子句数(仅级别 1) |
126
+
127
+ ### TextRank 算法
128
+
129
+ | 选项 | 类型 | 默认值 | 范围 | 说明 |
130
+ |------|------|--------|------|------|
131
+ | `ngramSize` | `number` | `2` | 1-5 | n-gram 大小 |
132
+ | `dampingFactor` | `number` | `0.85` | 0.1-0.95 | 阻尼系数 |
133
+ | `maxIterations` | `number` | `30` | 1-200 | 最大迭代次数 |
134
+ | `convergenceThreshold` | `number` | `0.0001` | 1e-8~1 | 收敛阈值 |
135
+
136
+ ### 位置权重
137
+
138
+ | 选项 | 类型 | 默认值 | 说明 |
139
+ |------|------|--------|------|
140
+ | `weightFirstSentence` | `number` | `1.5` | 首段首句权重 |
141
+ | `weightFirstParagraph` | `number` | `1.2` | 首段其他句权重 |
142
+ | `weightParagraphStart` | `number` | `1.1` | 段落首句权重 |
143
+ | `weightParagraphEnd` | `number` | `1.05` | 段落末句权重 |
144
+
145
+ ### 多样性与关键词
146
+
147
+ | 选项 | 类型 | 默认值 | 说明 |
148
+ |------|------|--------|------|
149
+ | `mmrLambda` | `number` | `0.7` | MMR 多样性系数 λ(0.3-1.0) |
150
+ | `keywordWeight` | `number` | `1.2` | 关键词权重系数(0=关闭) |
151
+
152
+ ## 更多示例
153
+
154
+ ```ts
155
+ // 调整多样性:0.3=最大多样性,1.0=纯得分排序
156
+ extractSummary(text, { compressionLevel: 3, mmrLambda: 0.3 });
157
+
158
+ // 调整主题聚焦度:0=关闭,2.0+=强聚焦
159
+ extractSummary(text, { compressionLevel: 3, keywordWeight: 2.0 });
160
+
161
+ // 极致压缩为 5 个子句
162
+ extractSummary(text, { compressionLevel: 1, maxClauses: 5 });
163
+
164
+ // 获取句子排名(调试用)
165
+ const ranked = rankSentences(text);
166
+ ranked.slice(0, 5).forEach(s => console.log(`[${s.score.toFixed(4)}] ${s.text}`));
167
+
168
+ // 强化首段首句(适合新闻)
169
+ extractSummary(text, { compressionLevel: 3, weightFirstSentence: 2.0 });
170
+ ```
171
+
172
+ ## 构建产物
173
+
174
+ | 文件 | 格式 | 适用环境 |
175
+ |------|------|----------|
176
+ | `dist/chinese-summary.cjs` | CJS | Node.js `require()` |
177
+ | `dist/chinese-summary.mjs` | ESM | Node.js `import`、浏览器 `<script type="module">` |
178
+ | `dist/chinese-summary.iife.js` | IIFE | 浏览器 `<script>` 标签,全局变量 `ChineseSummary` |
179
+ | `dist/chinese-summary.d.ts` | 类型声明 | TypeScript 智能提示 |
180
+
181
+ ## 从源码构建
182
+
183
+ ```bash
184
+ git clone https://github.com/cn-dev/chinese-summary.git
185
+ cd chinese-summary
186
+ npm install
187
+ npm run build
188
+ ```
189
+
190
+ ## 运行测试
191
+
192
+ ```bash
193
+ # 基础功能测试
194
+ npx tsx test/test.ts
195
+
196
+ # 长文本测试(约 2000 字)
197
+ npx tsx test/test-long.ts
198
+
199
+ # 健壮性测试(74 项边界用例)
200
+ npx tsx test/test-robust.ts
201
+ ```
202
+
203
+ ## 算法说明
204
+
205
+ 本库从零实现了 TextRank 算法(未引用任何第三方库),在此基础上加入了:
206
+
207
+ - **位置先验权重** — 首段首句、段落首尾句获得更高初始分数
208
+ - **TF-IDF 关键词加权** — 以句子为文档,字级 unigram 提取关键词,包含关键词的句子获得额外权重
209
+ - **MMR 多样性选句** — `MMR(s) = λ×score(s) - (1-λ)×max_sim(s, 已选集)`,避免语义重复
210
+ - **子句连词处理** — 极致压缩时自动剥离脱离上下文的连词(如"然而""因此")
211
+
212
+ ## 项目结构
213
+
214
+ ```
215
+ chinese-summary/
216
+ ├── src/
217
+ │ └── chinese-summary.ts # 核心源码(单文件,约 1200 行)
218
+ ├── dist/ # 构建产物
219
+ ├── test/
220
+ │ ├── test.ts # 基础功能测试
221
+ │ ├── test-long.ts # 长文本测试
222
+ │ └── test-robust.ts # 健壮性测试(74 项)
223
+ ├── docs/
224
+ │ ├── usage-guide.md # 详细使用指南
225
+ │ └── test-report.md # 测试报告
226
+ ├── tsconfig.json # TypeScript 配置
227
+ ├── tsup.config.ts # 构建配置
228
+ └── package.json
229
+ ```
230
+
231
+ ## License
232
+
233
+ MIT License
234
+
235
+ Copyright (c) 2025 北京锋通科技有限公司
236
+
237
+ Authors: 郭玉峰, 吴琼
238
+
239
+ Permission is hereby granted, free of charge, to any person obtaining a copy
240
+ of this software and associated documentation files (the "Software"), to deal
241
+ in the Software without restriction, including without limitation the rights
242
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
243
+ copies of the Software, and to permit persons to whom the Software is
244
+ furnished to do so, subject to the following conditions:
245
+
246
+ The above copyright notice and this permission notice shall be included in all
247
+ copies or substantial portions of the Software.
248
+
249
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
250
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
251
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
252
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
253
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
254
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
255
+ SOFTWARE.
@@ -0,0 +1,231 @@
1
+ # chinese-summary 测试报告
2
+
3
+ > 测试日期:2026-06-16
4
+ > 测试环境:Node.js + tsx
5
+ > 测试版本:chinese-summary@1.0.0
6
+
7
+ ## 测试概览
8
+
9
+ | 测试文件 | 用例数 | 通过 | 失败 | 结果 |
10
+ |----------|--------|------|------|------|
11
+ | `test/test.ts` — 基础功能 | 5 组 | 5 组 | 0 | PASS |
12
+ | `test/test-robust.ts` — 健壮性 | 74 项 | 74 项 | 0 | PASS |
13
+ | `test/test-long.ts` — 长文本 | 3 组 | 3 组 | 0 | PASS |
14
+ | **合计** | **82 项/组** | **82** | **0** | **ALL PASS** |
15
+
16
+ ---
17
+
18
+ ## 一、基础功能测试(test/test.ts)
19
+
20
+ ### 1.1 多级压缩对比
21
+
22
+ 测试文本为 261 字的量子计算介绍(4 段 9 句),各级别输出如下:
23
+
24
+ | 级别 | 输出字数 | 句数 | 压缩率 | 说明 |
25
+ |------|----------|------|--------|------|
26
+ | 1 | 57 字 | — | 78.2% | 极致压缩,子句级提取拼接为一句话 |
27
+ | 2 | 50 字 | 2 句 | 80.8% | 高度压缩,多轮重排精选核心句 |
28
+ | 3 | 95 字 | 3 句 | 63.6% | 中度压缩,TextRank + MMR 选句 |
29
+ | 4 | 144 字 | 5 句 | 44.8% | 轻度压缩,保留约半数句子 |
30
+ | 5 | 263 字 | 9 句 | -0.8% | 不压缩,仅排序(字数微增因空格连接) |
31
+
32
+ **级别 1 子句得分:**
33
+
34
+ | 得分 | 来源句子 | 子句文本 |
35
+ |------|----------|----------|
36
+ | 1.5202 | 句3 | IBM和微软等科技巨头都在积极投入量子计算的研究。 |
37
+ | 1.4217 | 句4 | 量子计算目前仍面临许多技术挑战。 |
38
+ | 1.1595 | 句1 | 与经典计算机使用比特(0或1)不同, |
39
+ | 0.2855 | 句7 | 尽管如此, |
40
+ | 0.2668 | 句3 | 谷歌、 |
41
+ | 0.2612 | 句4 | 然而, |
42
+ | 0.2214 | 句1 | 可以同时处于0和1的叠加态。 |
43
+
44
+ > 连词"尽管如此,""然而,"被自动剥离,保证可读性。
45
+
46
+ ### 1.2 旧接口兼容性(sentenceCount)
47
+
48
+ | 参数 | 输出字数 | 句数 |
49
+ |------|----------|------|
50
+ | `sentenceCount=2` | 67 字 | 2 句 |
51
+
52
+ > 旧接口 `sentenceCount` 正常工作,与 `compressionLevel` 互斥时后者优先。
53
+
54
+ ### 1.3 极致压缩 maxClauses 参数对比
55
+
56
+ | maxClauses | 输出 |
57
+ |------------|------|
58
+ | 2 | 量子计算是一种利用量子力学原理进行计算的新型计算模式。量子计算机使用量子比特, |
59
+ | 3 | 量子计算是一种利用量子力学原理进行计算的新型计算模式。量子计算机使用量子比特,科学家们对量子计算的未来保持乐观。 |
60
+ | 4 | 量子计算是一种利用量子力学原理进行计算的新型计算模式。量子计算机使用量子比特,IBM和微软等科技巨头都在积极投入量子计算的研究。科学家们对量子计算的未来保持乐观。 |
61
+ | 5 | 量子计算是一种利用量子力学原理进行计算的新型计算模式。量子计算机使用量子比特,IBM和微软等科技巨头都在积极投入量子计算的研究。量子计算目前仍面临许多技术挑战。科学家们对量子计算的未来保持乐观。 |
62
+
63
+ ### 1.4 短文本保护
64
+
65
+ | 输入 | 输出 |
66
+ |------|------|
67
+ | "今天天气很好,适合出门散步。" | "今天天气很好,适合出门散步。" |
68
+
69
+ > 短文本(仅 1 句)在级别 1 下原样返回,不会丢失内容。
70
+
71
+ ---
72
+
73
+ ## 二、健壮性测试(test/test-robust.ts)
74
+
75
+ 共 74 项断言,全部通过。按类别分布如下:
76
+
77
+ ### 2.1 空值 / 非法输入(7 项)
78
+
79
+ | 用例 | 预期行为 | 结果 |
80
+ |------|----------|------|
81
+ | `null` | 返回空结果 | PASS |
82
+ | `undefined` | 返回空结果 | PASS |
83
+ | 数字 `123` | 返回空结果 | PASS |
84
+ | 空字符串 `""` | 返回空结果 | PASS |
85
+ | 纯空白 `" "` | 返回空结果 | PASS |
86
+ | 纯换行 `"\n\n\n"` | 返回空结果 | PASS |
87
+ | 纯制表符 `"\t\t"` | 返回空结果 | PASS |
88
+
89
+ ### 2.2 特殊字符(8 项)
90
+
91
+ | 用例 | 预期行为 | 结果 |
92
+ |------|----------|------|
93
+ | BOM + 零宽字符 | 正常处理 | PASS |
94
+ | BOM 被移除 | BOM 不出现在输出中 | PASS |
95
+ | 中文引号 `""` | 正常处理 | PASS |
96
+ | 书名号+圆括号 `《》()` | 正常处理 | PASS |
97
+ | 全角空格+省略号 | 正常处理 | PASS |
98
+ | 混合换行符 `\r\n/\r/\n` | 正常处理 | PASS |
99
+ | Emoji | 正常处理 | PASS |
100
+ | HTML 实体 `&nbsp;` | 正常处理 | PASS |
101
+
102
+ ### 2.3 极端参数(14 项)
103
+
104
+ | 用例 | 预期行为 | 结果 |
105
+ |------|----------|------|
106
+ | `compressionLevel=0` | 自动修正为有效值 | PASS |
107
+ | `compressionLevel=99` | 自动修正为有效值 | PASS |
108
+ | `compressionLevel=-1` | 自动修正为有效值 | PASS |
109
+ | `compressionLevel=1.5` | 自动修正为有效值 | PASS |
110
+ | `ngramSize=0` | 自动修正为默认值 | PASS |
111
+ | `ngramSize=100` | 自动修正为默认值 | PASS |
112
+ | `dampingFactor=0` | 自动修正为默认值 | PASS |
113
+ | `dampingFactor=2` | 自动修正为默认值 | PASS |
114
+ | `maxIterations=0` | 自动修正为默认值 | PASS |
115
+ | `minSentenceLength=-1` | 自动修正为默认值 | PASS |
116
+ | `maxClauses=0` | 自动修正为默认值 | PASS |
117
+ | `sentenceCount=NaN` | 自动修正为默认值 | PASS |
118
+ | `sentenceCount=Infinity` | 自动修正为默认值 | PASS |
119
+ | `weightFirstSentence=NaN` | 自动修正为默认值 | PASS |
120
+
121
+ ### 2.4 极短文本(4 项)
122
+
123
+ | 用例 | 预期行为 | 结果 |
124
+ |------|----------|------|
125
+ | 2 字文本 "你好" | 空结果(低于 minSentenceLength) | PASS |
126
+ | 5 字文本 "你好世界!" | 正常处理 | PASS |
127
+ | 单句级别 1 | 正常处理 | PASS |
128
+ | 单段 3 句级别 3 | 正常处理 | PASS |
129
+
130
+ ### 2.5 无句末标点(1 项)
131
+
132
+ | 用例 | 预期行为 | 结果 |
133
+ |------|----------|------|
134
+ | 无句末标点文本 | 整段作为一个句子 | PASS |
135
+
136
+ ### 2.6 纯英文 / 混合(2 项)
137
+
138
+ | 用例 | 预期行为 | 结果 |
139
+ |------|----------|------|
140
+ | 纯英文 | 正常处理 | PASS |
141
+ | 中英混合 | 正常处理 | PASS |
142
+
143
+ ### 2.7 重复文本(1 项)
144
+
145
+ | 用例 | 预期行为 | 结果 |
146
+ |------|----------|------|
147
+ | 完全重复句子 | 正常处理 | PASS |
148
+
149
+ ### 2.8 rankSentences 健壮性(4 项)
150
+
151
+ | 用例 | 预期行为 | 结果 |
152
+ |------|----------|------|
153
+ | `rankSentences(null)` | 返回空数组 | PASS |
154
+ | `rankSentences('')` | 返回空数组 | PASS |
155
+ | `rankSentences(42)` | 返回空数组 | PASS |
156
+ | `rankSentences(正常文本)` | 返回非空数组 | PASS |
157
+
158
+ ### 2.9 结果完整性校验(25 项)
159
+
160
+ 对 5 个压缩级别逐一校验,每级 5 项断言:
161
+
162
+ | 校验项 | 级别1 | 级别2 | 级别3 | 级别4 | 级别5 |
163
+ |--------|-------|-------|-------|-------|-------|
164
+ | `summary` 非空 | PASS | PASS | PASS | PASS | PASS |
165
+ | `sentences` 非空 | PASS | PASS | PASS | PASS | PASS |
166
+ | `text` 是字符串 | PASS | PASS | PASS | PASS | PASS |
167
+ | `compressionLevel` 正确 | PASS | PASS | PASS | PASS | PASS |
168
+ | `text === summary.join(' ')` | PASS | PASS | PASS | PASS | PASS |
169
+ | 所有句子得分为有限数 | PASS | PASS | PASS | PASS | PASS |
170
+
171
+ ### 2.10 子句拼接标点去重(3 项)
172
+
173
+ | 校验项 | 结果 |
174
+ |--------|------|
175
+ | 无 `。,` 重复标点 | PASS |
176
+ | 无 `,,` 重复标点 | PASS |
177
+ | 标点去重后仍有内容 | PASS |
178
+
179
+ ---
180
+
181
+ ## 三、长文本测试(test/test-long.ts)
182
+
183
+ 测试文本为 1584 字的 AI 发展史文章(8 段 20+ 句)。
184
+
185
+ ### 3.1 各级别压缩效果
186
+
187
+ | 级别 | 输出字数 | 句数 | 压缩率 | 说明 |
188
+ |------|----------|------|--------|------|
189
+ | 1 | 69 字 | — | 95.6% | 极致压缩,3 个子句拼接为一句话 |
190
+ | 2 | 408 字 | — | 74.2% | 高度压缩,多轮重排精选核心句 |
191
+ | 3 | 536 字 | — | 66.2% | 中度压缩,TextRank + MMR 选句 |
192
+ | 4 | 886 字 | — | 44.1% | 轻度压缩,保留约半数句子 |
193
+ | 5 | 1603 字 | — | -1.2% | 不压缩,仅排序(字数微增因空格连接) |
194
+
195
+ ### 3.2 极致压缩 maxClauses 参数对比
196
+
197
+ | maxClauses | 输出字数 | 压缩率 |
198
+ |------------|----------|--------|
199
+ | 2 | 49 字 | 96.9% |
200
+ | 3 | 69 字 | 95.6% |
201
+ | 4 | 94 字 | 94.1% |
202
+ | 5 | 116 字 | 92.7% |
203
+ | 6 | 145 字 | 90.8% |
204
+
205
+ ### 3.3 句子得分排名 Top-10
206
+
207
+ | 排名 | 得分 | 位置标记 | 句子(前 60 字) |
208
+ |------|------|----------|------------------|
209
+ | 1 | 2.1302 | 首段首句 | 人工智能(Artificial Intelligence,简称AI)是计算机科学的一个重... |
210
+ | 2 | 2.0271 | — | 2022年底,ChatGPT的发布更是引发了全球性的AI应用热潮,让普通大... |
211
+ | 3 | 1.7314 | — | 欧盟于2023年通过了《人工智能法案》,成为全球首个对AI进行全面立... |
212
+ | 4 | 1.7042 | 段尾 | AlphaGo的胜利不仅证明了AI在复杂决策任务上的能力,也标志着人工... |
213
+ | 5 | 1.7024 | — | 这次会议被认为是人工智能学科诞生的标志,标志着人类开始系统地研究... |
214
+ | 6 | 1.6668 | 首段+段尾 | 人工智能的发展可以追溯到20世纪50年代,当时一批具有远见卓识的科... |
215
+ | 7 | 1.5541 | 段首 | 自然语言处理是人工智能最活跃的研究方向之一。 |
216
+ | 8 | 1.5183 | 段首 | 然而,人工智能的快速发展也带来了一系列社会问题和伦理挑战。 |
217
+ | 9 | 1.4769 | — | 中国也出台了《生成式人工智能服务管理暂行办法》,对AI内容的生成和... |
218
+ | 10 | 1.4715 | 段首 | 进入21世纪后,随着计算能力的大幅提升、大数据的积累以及算法的突破... |
219
+
220
+ > 位置加权效果明显:首段首句得分最高(2.1302),段首/段尾句子普遍排名靠前。
221
+
222
+ ---
223
+
224
+ ## 四、测试结论
225
+
226
+ 1. **功能完整性**:5 级压缩、sentenceCount 旧接口、maxClauses 参数、rankSentences 排名均正常工作。
227
+ 2. **健壮性**:74 项边界用例全部通过,库对 null/undefined/空字符串/特殊字符/极端参数/极短文本等场景均有完善防护,不会崩溃。
228
+ 3. **压缩效果**:以 1584 字长文为例,级别 3(默认)压缩至 536 字(压缩率 66.2%),级别 1 极致压缩至 69 字(压缩率 95.6%),各级别压缩比例符合设计预期。
229
+ 4. **位置加权**:首段首句、段落首尾句的得分显著高于中间句子,符合中文文章"首段点题、段首概括"的结构特点。
230
+ 5. **子句连词处理**:极致压缩时,脱离上下文的连词(如"然而,""尽管如此,")被正确剥离,保证输出可读性。
231
+ 6. **标点去重**:子句拼接时不会出现 `。,` 或 `,,` 等重复标点。