This library takes a sentence and a paraphrase corpus, recursively finds paraphrases based on the corpus, expands the given sentence, and generates a paraphrase lattice.
This library also provides a method to search a phrase in the paraphrase lattice.
Add this to your Cargo.toml
:
toml
[dependencies]
aho-corasick = "0.2.1"
This example generates a paraphrase lattice and searches a phrase in the generated lattice.
```rust use parattice::PaRattice; use parattice::LatticeKMP; use parattice::Lattice;
// 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 let path = Path::new("paraphrase-lattice.dot"); let mut file = File::create(&path)?; file.writeall(lattice.dumpdot(true).as_bytes())?;
// serialization & deserialization let bytes = lattice.tobytes(); let newlattice = Lattice::newfrombytes(&bytes);
// search let kmp = LatticeKMP::new(vec!["幹", "細胞"]); let results = kmp.search(&newlattice); for result in &results { for edge in result { print!("({}, {}) ", edge.0, edge.1); } println!(); let s = lattice.gettrunk_span(result.clone()); for edge in &s { print!("({}, {}) ", edge.0, edge.1); } println!("\n==========="); } ```
Copyright 2020 Xcoo, Inc.
Licensed under the Apache License, Version 2.0.