前言
这个文章生成器模块通过组合预定义的文本片段,按照特定规则随机生成连贯的文章内容。它可以用于测试数据生成、创意写作辅助或任何需要大量文本内容的场景。当然先要有一个语料库。
语料库包含多个分类:
- 标题(title) : 7个可能的文章标题,如"一天掉多少根头发"、"中午吃什么"等
- 名人名言(famous) : 100条名人名言,每条包含
{{said}}
和{{conclude}}
占位符 - 开头句(bosh_before) : 14种文章开头方式
- 正文句(bosh) : 22种正文表达方式,多数包含
{{title}}
占位符 - 结论句(conclude) : 8种结尾方式
- 引用方式(said) : 5种不同的引用表达
核心功能
该模块主要提供三个核心功能:
- 从JSON文件加载语料库
- 创建随机选择函数
- 根据语料库生成随机文章
实现解析
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%的概率使用普通句子

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