#markov-chain #markov #text-generation

bin+lib markov_str

针对文本生成优化的马尔可夫链实现

1 个不稳定版本

0.1.0 2024年8月14日

472文本处理

Download history 104/week @ 2024-08-12

104 每月下载量

MIT 许可证

14KB
236 代码行

markov_str

markov_str 是一个快速且内存高效的马尔可夫链实现,针对文本生成进行了优化。

示例

let training_path = "data";

// Gets the paths of evey file and directory in the training_path.
let tpaths = fs::read_dir(training_path)
	.unwrap_or_else(|_| panic!("Can't read files from: {}", training_path));

// Only the files remain
let files = tpaths
	.filter_map(|f| f.ok())
	.filter(|f| match f.file_type() {
		Err(_) => false,
		Ok(f) => f.is_file(),
	});

// Reads every file into a string
let contents = files.filter_map(|f| read_to_string(f.path()).ok());

// Creating the Markov Chain
let markov_chain = contents.fold(
	MarkovChain::with_capacity(2, 8_000_000, Regex::new(WORD_REGEX).unwrap()),
	|mut a, s| {
		a.add_text(&s);
		a
	},
);

// Number of tokens
println!("{}", markov_chain.len());

// Generation
for _ in 0..10 {
	println!("{}", markov_chain.generate_start("among the       ", 25).unwrap());
}

此示例取自 src/main.rs,您可以通过

./get_data.sh
cargo run --release

./get_data.sh 运行它,这将从 Project Gutenberg 下载前200本书,总计超过100MB的文本。

许可证

markov_str 使用MIT许可证。您可以随意进行分支和利用。

贡献

请随意提出问题和拉取请求。如果您想帮助我目前正在进行的工作,请查看 待办事项 部分。

待办事项

  • 多线程支持
  • ChainItems区域
  • 序列化
  • 更好的代码文档
  • 更佳的性能

依赖项

~4–5.5MB
~89K SLoC