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

结语

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

相关推荐
小桥风满袖24 分钟前
极简三分钟ES6 - ES9中for await of
前端·javascript
编程贝多芬43 分钟前
Promise 的场景和最佳实践
前端·javascript
Asort1 小时前
JavaScript 从零开始(四):基础语法详解——从变量声明到数据类型的完全指南
前端·javascript
木木jio1 小时前
前端大文件分片上传 —— 基于 React 的工程化实现
前端·javascript
Lotzinfly1 小时前
12个TypeScript奇淫技巧你需要掌握😏😏😏
前端·javascript·面试
一个大苹果1 小时前
setTimeout延迟超过2^31立即执行?揭秘JavaScript定时器的隐藏边界
javascript
普郎特1 小时前
"不再迷惑!用'血缘关系'彻底搞懂JavaScript原型链机制"
前端·javascript
一枚前端小能手2 小时前
「周更第3期」实用JS库推荐:Lodash
前端·javascript
艾小码2 小时前
Vue组件到底怎么定义?全局注册和局部注册,我踩过的坑你别再踩了!
前端·javascript·vue.js
鹏多多2 小时前
前端复制功能的高效解决方案:copy-to-clipboard详解
前端·javascript