001project_wildgrowth/backend/scripts/test-structure-chunking.ts

108 lines
3.5 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/**
* 测试脚本:按章分块服务
*
* 用法:
* npx ts-node scripts/test-structure-chunking.ts [文件路径]
*/
import fs from 'fs';
import path from 'path';
import { structureChunkingService } from '../src/services/structureChunkingService';
// 测试文本:多章节
const TEST_TEXT_CHAPTERS = `
第一章 绪论
人工智能Artificial IntelligenceAI是计算机科学的一个分支
它企图了解智能的实质,并生产出一种新的能以人类智能相似的方式做出反应的智能机器。
人工智能的发展可以追溯到20世纪50年代。1956年在达特茅斯会议上
"人工智能"这一术语首次被提出。
第二章 机器学习基础
监督学习是机器学习的一种方法,其中训练数据既包含输入数据,也包含期望的输出结果。
模型通过学习输入和输出之间的映射关系来进行预测。
无监督学习是另一种机器学习方法,训练数据只包含输入数据,没有对应的输出标签。
模型需要自己发现数据中的结构和模式。
第 3 章 深度学习
深度学习是机器学习的一个子领域,使用多层神经网络来学习数据的层次化表示。
卷积神经网络CNN特别适合处理图像数据而循环神经网络RNN则适合处理序列数据。
`;
// 测试文本:无章节结构
const TEST_TEXT_NO_STRUCTURE = `
这是一段没有明确结构的文本。
它只是一些段落的集合,没有章节标题,也没有编号。
用户可能会上传这样的文本,我们需要能够处理它。
`;
async function main() {
console.log('='.repeat(60));
console.log('按章分块服务测试');
console.log('='.repeat(60));
console.log();
const filePath = process.argv[2];
let testTexts: { name: string; text: string }[] = [];
if (filePath) {
const absolutePath = path.resolve(filePath);
if (!fs.existsSync(absolutePath)) {
console.error(`错误:文件不存在 - ${absolutePath}`);
process.exit(1);
}
const fileContent = fs.readFileSync(absolutePath, 'utf-8');
testTexts.push({ name: `文件: ${path.basename(filePath)}`, text: fileContent });
} else {
testTexts = [
{ name: '多章节', text: TEST_TEXT_CHAPTERS },
{ name: '无结构', text: TEST_TEXT_NO_STRUCTURE },
];
}
for (const { name, text } of testTexts) {
console.log('-'.repeat(60));
console.log(`测试: ${name}`);
console.log(`输入长度: ${text.length} 字符`);
console.log('-'.repeat(60));
const startTime = Date.now();
const result = await structureChunkingService.parseAsync(text);
const duration = Date.now() - startTime;
console.log(`成功: ${result.success}`);
console.log(`模式: ${result.pattern || '无'}`);
console.log(`分块数: ${result.chunks.length}`);
console.log(`字符数: ${result.totalCharacters}`);
console.log(`耗时: ${duration}ms`);
console.log();
if (result.chunks.length > 0) {
console.log('分块详情:');
for (const chunk of result.chunks) {
const preview = chunk.content.substring(0, 50).replace(/\n/g, ' ');
console.log(` [${chunk.order + 1}] ${chunk.title}`);
console.log(` ${preview}${chunk.content.length > 50 ? '...' : ''} (${chunk.content.length} 字符)`);
}
} else {
console.log('未检测到章级结构');
}
console.log();
}
console.log('='.repeat(60));
console.log('测试完成');
console.log('='.repeat(60));
}
main().catch((err) => {
console.error('测试失败:', err);
process.exit(1);
});