1 个不稳定版本
0.1.0 | 2024年8月14日 |
---|
472 在 文本处理 中
104 每月下载量
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