2个版本
0.2.2 | 2020年6月22日 |
---|---|
0.2.1 | 2020年6月22日 |
#987 in 文本处理
59KB
1K SLoC
parattice: 递归释义格生成器 🔄
这个库接收一个句子和释义语料库,根据语料库递归地找到释义,扩展给定的句子,并生成释义格。
这个库还提供了一个在释义格中搜索短语的方法。
示例
此示例生成释义格并在生成的格中搜索短语。
use parattice::Lattice;
use parattice::LatticeKMP;
use parattice::PaRattice;
// initialization
let paradict = vec![
vec![
vec!["blood", "stem", "cell"],
vec!["造血", "幹", "細胞"],
vec!["hematopoietic", "stem", "cell"],
],
vec![
vec!["造血", "幹", "細胞", "移植"],
vec!["hematopoietic", "stem", "cell", "transplantation"],
],
vec![vec!["stem", "cell"], vec!["幹", "細胞"]],
vec![
vec!["幹", "細胞", "移植"],
vec!["rescue", "transplant"],
vec!["stem", "cell", "rescue"],
],
vec![vec!["rescue"], vec!["救命"]],
vec![vec!["blood"], vec!["血液"]],
];
let parattice = PaRattice::new(paradict);
// lattice generation
let words = vec!["造血", "幹", "細胞", "移植"];
let lattice = parattice.get_lattice(&words, true, 2);
// dump a generated lattice
println!(lattice.dump_dot(true));
// serialization & deserialization
let bytes = lattice.to_bytes();
let new_lattice = Lattice::new_from_bytes(&bytes);
// search
let kmp = LatticeKMP::new(vec!["幹", "細胞"]);
let results = kmp.search(&new_lattice);
for result in &results {
for edge in result {
print!("({}, {}) ", edge.0, edge.1);
}
println!();
let s = lattice.get_trunk_span(result.clone());
for edge in &s {
print!("({}, {}) ", edge.0, edge.1);
}
println!("\n===========");
}
专利
许可
版权所有 2020 Xcoo, Inc.
在 Apache License, Version 2.0 许可下发布。