diff --git a/Cargo.toml b/Cargo.toml index c9a4c76..4cb9a6f 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "instant-segment" -version = "0.6.1" +version = "0.7.0" authors = ["Dirkjan Ochtman "] edition = "2018" license = "Apache-2.0" diff --git a/benches/bench.rs b/benches/bench.rs index 63a844a..1c0f960 100644 --- a/benches/bench.rs +++ b/benches/bench.rs @@ -8,5 +8,7 @@ benchmark_main!(benches); fn short(bench: &mut Bencher) { let segmenter = instant_segment::test_data::segmenter(); let mut search = instant_segment::Search::default(); - bench.iter(|| segmenter.segment("thisisatest", &mut search)); + bench.iter(|| { + let _ = segmenter.segment("thisisatest", &mut search); + }); } diff --git a/src/lib.rs b/src/lib.rs index 48a0dea..3cb1eac 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -56,11 +56,13 @@ impl Segmenter { /// Requires that the input `text` consists of lowercase ASCII characters only. Otherwise, /// returns `Err(InvalidCharacter)`. The `search` parameter contains caches that are used /// segmentation; passing it in allows the callers to reuse the cache allocations. - /// - /// The segmentation result can be retrieved through the `Search::split()` method. - pub fn segment(&self, input: &str, search: &mut Search) -> Result<(), InvalidCharacter> { + pub fn segment<'a>( + &self, + input: &str, + search: &'a mut Search, + ) -> Result + ExactSizeIterator, InvalidCharacter> { SegmentState::new(Ascii::new(input)?, &self, search).run(); - Ok(()) + Ok(search.result.iter().map(|v| v.as_str())) } fn score(&self, word: &str, previous: Option<&str>) -> f64 { @@ -200,11 +202,6 @@ impl Search { } self.result.clear(); } - - /// Get the segmentation result - pub fn split(&self) -> impl Iterator + ExactSizeIterator { - self.result.iter().map(|v| v.as_str()) - } } type MemoKey = (Range, Range); diff --git a/src/test_cases.rs b/src/test_cases.rs index 50732e3..162dfcc 100644 --- a/src/test_cases.rs +++ b/src/test_cases.rs @@ -10,14 +10,14 @@ pub fn run(segmenter: &Segmenter) { } pub fn assert_segments(s: &[&str], search: &mut Search, segmenter: &Segmenter) { - segmenter.segment(&s.join(""), search).unwrap(); - let cmp = search.split().collect::>(); + let words = segmenter.segment(&s.join(""), search).unwrap(); + let cmp = words.collect::>(); assert_eq!(cmp, s); } pub fn check_segments(s: &[&str], search: &mut Search, segmenter: &Segmenter) -> bool { match segmenter.segment(&s.join(""), search) { - Ok(()) => s == search.split().collect::>(), + Ok(words) => s == words.collect::>(), Err(_) => false, } }