feat: 资源部署
This commit is contained in:
@@ -206,32 +206,41 @@ async function main() {
|
||||
const charString = JSON.parse(fs.readFileSync(charStringPath, 'utf-8'));
|
||||
|
||||
// 获取所有汉字
|
||||
const chars = charString['3500'].split('');
|
||||
console.log(`共有 ${chars.length} 个汉字需要处理`);
|
||||
const allChars = charString['3500'].split('');
|
||||
console.log(`共有 ${allChars.length} 个汉字需要处理`);
|
||||
|
||||
// 检查是否有已存在的进度文件
|
||||
const outputPath = path.join(__dirname, '../data/char/char_introduce.json');
|
||||
let results = [];
|
||||
let startIndex = 0;
|
||||
let existingResults = [];
|
||||
const generatedSet = new Set();
|
||||
|
||||
if (fs.existsSync(outputPath)) {
|
||||
try {
|
||||
results = JSON.parse(fs.readFileSync(outputPath, 'utf-8'));
|
||||
startIndex = results.length;
|
||||
console.log(`发现已有进度,从第 ${startIndex + 1} 个汉字继续`);
|
||||
existingResults = JSON.parse(fs.readFileSync(outputPath, 'utf-8'));
|
||||
existingResults.forEach((item) => generatedSet.add(item.char));
|
||||
console.log(`发现已有 ${existingResults.length} 个汉字介绍`);
|
||||
} catch (e) {
|
||||
console.log('已有文件解析失败,从头开始');
|
||||
}
|
||||
}
|
||||
|
||||
// 过滤出未生成的汉字
|
||||
const charsToGenerate = allChars.filter((char) => !generatedSet.has(char));
|
||||
console.log(`其中 ${generatedSet.size} 个已生成,${charsToGenerate.length} 个待生成`);
|
||||
|
||||
if (charsToGenerate.length === 0) {
|
||||
console.log('所有汉字介绍已生成完毕,无需处理');
|
||||
return;
|
||||
}
|
||||
|
||||
// 批量处理配置
|
||||
const BATCH_SIZE = 20; // 每次 API 调用处理 20 个汉字
|
||||
const DELAY_BETWEEN_BATCHES = 1000; // 批次间延迟1秒
|
||||
|
||||
for (let i = startIndex; i < chars.length; i += BATCH_SIZE) {
|
||||
const batch = chars.slice(i, Math.min(i + BATCH_SIZE, chars.length));
|
||||
for (let i = 0; i < charsToGenerate.length; i += BATCH_SIZE) {
|
||||
const batch = charsToGenerate.slice(i, Math.min(i + BATCH_SIZE, charsToGenerate.length));
|
||||
console.log(
|
||||
`\n处理第 ${i + 1} - ${Math.min(i + BATCH_SIZE, chars.length)} 个汉字(共 ${batch.length} 个)...`
|
||||
`\n处理第 ${i + 1} - ${Math.min(i + BATCH_SIZE, charsToGenerate.length)} 个汉字(共 ${batch.length} 个)...`
|
||||
);
|
||||
console.log(`汉字列表: ${batch.join('')}`);
|
||||
|
||||
@@ -243,19 +252,21 @@ async function main() {
|
||||
console.log(` ${item.char}: ${item.introduce}`);
|
||||
}
|
||||
|
||||
results.push(...batchResults);
|
||||
// 合并到已有结果
|
||||
existingResults.push(...batchResults);
|
||||
batchResults.forEach((item) => generatedSet.add(item.char));
|
||||
|
||||
// 每批处理完后保存进度
|
||||
fs.writeFileSync(outputPath, JSON.stringify(results, null, 2), 'utf-8');
|
||||
console.log(`已保存进度:${results.length}/${chars.length}`);
|
||||
fs.writeFileSync(outputPath, JSON.stringify(existingResults, null, 2), 'utf-8');
|
||||
console.log(`已保存进度:${existingResults.length}/${allChars.length}`);
|
||||
|
||||
// 批次间延迟,避免API限流
|
||||
if (i + BATCH_SIZE < chars.length) {
|
||||
if (i + BATCH_SIZE < charsToGenerate.length) {
|
||||
await delay(DELAY_BETWEEN_BATCHES);
|
||||
}
|
||||
}
|
||||
|
||||
console.log(`\n完成!共生成 ${results.length} 个汉字介绍`);
|
||||
console.log(`\n完成!共生成 ${existingResults.length} 个汉字介绍`);
|
||||
console.log(`结果已保存到: ${outputPath}`);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user