node文章生成器

前言

这个文章生成器模块通过组合预定义的文本片段,按照特定规则随机生成连贯的文章内容。它可以用于测试数据生成、创意写作辅助或任何需要大量文本内容的场景。当然先要有一个语料库。

语料库包含多个分类:

  1. 标题(title) : 7个可能的文章标题,如"一天掉多少根头发"、"中午吃什么"等
  2. 名人名言(famous) : 100条名人名言,每条包含{{said}}{{conclude}}占位符
  3. 开头句(bosh_before) : 14种文章开头方式
  4. 正文句(bosh) : 22种正文表达方式,多数包含{{title}}占位符
  5. 结论句(conclude) : 8种结尾方式
  6. 引用方式(said) : 5种不同的引用表达

核心功能

该模块主要提供三个核心功能:

  1. 从JSON文件加载语料库
  2. 创建随机选择函数
  3. 根据语料库生成随机文章

实现解析

1. 语料库加载

javascript 复制代码
export function loadCorpus(path) {
  const path1 = resolve(__dirname, '..', path);
  const data = readFileSync(path1, { encoding: 'utf-8' });
  return JSON.parse(data);
}

这个函数负责加载外部JSON语料库文件,将其解析为JavaScript对象。语料库应包含不同类别的文本片段,如名人名言、普通段落、开头和结尾语句等。

2. 随机选择器

javascript 复制代码
export function createrandPick(arr) {
  arr = [...arr]; // 创建数组副本
  function randomPick() {
    const len = arr.length - 1;
    const index = randomInt(0, len);
    const picked = arr[index];
    [arr[index], arr[len]] = [arr[len], arr[index]]; // 交换元素位置
    return picked;
  }
  randomPick(); // 抛弃第一次执行的结果
  return randomPick;
}

这个函数实现了"无放回随机选择"算法,确保每个元素被选中后不会被重复选择,直到所有元素都被选过一遍。这种算法通过交换数组元素的位置来实现高效随机选择。

3. 句子生成

javascript 复制代码
function sentence(pick, replacer) {
  let ret = pick();
  for (const key in replacer) {
    ret = ret.replace(new RegExp(`{${key}}`, "g"), replacer[key]);
  }
  return ret;
}

这个函数处理文本模板中的占位符替换,例如将{title}替换为实际的文章标题。

4. 文章生成

javascript 复制代码
export function generate(title, { corpus, min = 1000, max = 3000 }) {
  // 初始化各种文本片段的随机选择器
  const [pickFamous, pickBoshBefore, pickBosh, pickSaid, pickConclude] = [
    famous, bosh_before, bosh, said, conclude
  ].map(createrandPick);
  
  // 生成文章段落
  while (totalLength < articleLength) {
    // 随机组合不同类型的句子
    const n = randomInt(0, 100);
    if (n < 20) {
      // 插入名人名言
    } else if (n < 50) {
      // 使用引导句+普通句子
    } else {
      // 使用普通句子
    }
  }
  return article;
}

文章生成算法按照以下规则工作:

  • 随机决定文章总长度(在min和max之间)
  • 将文章划分为多个段落,每段长度随机
  • 以不同概率组合不同类型的句子:
    • 20%的概率插入名人名言
    • 30%的概率使用引导句+普通句子
    • 50%的概率使用普通句子

结语

你是否也曾想过,机器的"创作"能否触动人心?或许答案就藏在下一次生成的文章中。为什么不亲自运行这段代码,看看人工智能与人类智慧碰撞出的火花?谁知道呢------也许下一段让你会心一笑的文字,就来自这个不起眼的生成器。快来试试吧

相关推荐
gs8014021 分钟前
解构 Cordis:面向“时空可组合性”的 TypeScript 元框架深度剖析
前端·javascript·typescript
Highcharts.js41 分钟前
Highcharts大数据渲染模块Boost实战与参数最佳实践表
javascript·数据可视化·boost·highcharts·大数据渲染·加速配置·参数表
岁岁种桃花儿1 小时前
Vue核心语法第一篇:Vue是什么?
前端·javascript·vue.js
Highcharts.js1 小时前
数据可视化避坑指南 ——开发中常见图表错误与修复方案
javascript·信息可视化·数据可视化·highcharts·数据可视化避坑·修复方案
观无2 小时前
若依EasyExcel实现单元格合并
开发语言·前端·javascript
xywww1682 小时前
Node.js Claude API 实战接入:SDK 调用 Opus 5、环境变量配置与报错排查
node.js
xiaohaiAIgeo2 小时前
【2026年】HG/T 20656-2024化工暖通空调设计规范:新版标准的变化与影响
java·前端·javascript·科普知识
立少→万能汉编2 小时前
用“立少→超文本”写静态网页,标签<倍>
服务器·前端·javascript
weixin_431600442 小时前
NestJS 入门(7):生命周期钩子——构造函数和 `OnModuleInit` 差在哪?
前端·后端·学习·node.js·nest.js
深念Y2 小时前
基于 NapCat 与本地 RAG 的群聊 AI 机器人方案(ARM64 部署)
人工智能·ai·机器人·node.js·自动化·情感陪伴·bot