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

结语

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

相关推荐
清风徐来QCQ17 分钟前
SpringMvC
前端·javascript·vue.js
Swift社区27 分钟前
ArkTS Web 组件里,如何通过 javaScriptProxy 让 JS 同步调用原生方法
开发语言·前端·javascript
Hi_kenyon1 小时前
快速入门VUE与JS(二)--getter函数(取值器)与setter(存值器)
前端·javascript·vue.js
全栈前端老曹1 小时前
【前端路由】React Router 权限路由控制 - 登录验证、私有路由封装、高阶组件实现路由守卫
前端·javascript·react.js·前端框架·react-router·前端路由·权限路由
zhuà!1 小时前
uv-picker在页面初始化时,设置初始值无效
前端·javascript·uv
摸鱼的春哥1 小时前
实战:在 Docker (Windows) 中构建集成 yt-dlp 的“满血版” n8n 自动化工作流
前端·javascript·后端
_Rookie._2 小时前
关于迭代协议:可迭代协议和迭代器协议,生成器函数 生成器对象的理解
javascript·python
测试游记2 小时前
基于 FastGPT 的 LangChain.js + RAG 系统实现
开发语言·前端·javascript·langchain·ecmascript
Van_captain2 小时前
rn_for_openharmony常用组件_Empty空状态
javascript·开源·harmonyos
zhengxianyi5152 小时前
数据大屏-单点登录ruoyi-vue-pro
前端·javascript·vue.js