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%的概率使用普通句子

结语

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

相关推荐
宋拾壹30 分钟前
fastadmin列表中查看列表,并且添加增加相应的数据
javascript·php·fastadmin
云水一下1 小时前
Vue.js从零到精通系列(三):组件化基础——Props、Emits、插槽与生命周期
前端·javascript·vue.js
小糯米6012 小时前
JavaScript表达式与运算符
开发语言·javascript·ecmascript
体验家2 小时前
体验家 XMPlus 网页端问卷 SDK 技术解析:用几行 JavaScript 实现精准场景触发与防打扰机制
开发语言·前端·javascript
VidDown2 小时前
VidDown 工具站:视频分辨率技术
javascript·网络·编辑器·音视频·视频编解码·视频
小鹿软件办公3 小时前
倒计时开启:Chromium 宣布几周内将全面切断 MV2 扩展支持
开发语言·javascript·ublock origin
Csvn3 小时前
TypeScript:你以为安全的 `JSON.parse` 其实是颗雷 — 运行时类型安全实战
前端·javascript
矩阵科学3 小时前
Langchain.js 实战五:Agent 实战
langchain·node.js
触底反弹3 小时前
从 JS 引擎执行原理理解数据类型:栈内存、堆内存与作用域
javascript·数据结构·面试
橘子星3 小时前
深入理解线性数据结构:栈、队列与链表
前端·javascript