pub struct DiscontinuousSpan { /* private fields */ }Expand description
A discontinuous span representing non-contiguous entity mentions.
Some entities span multiple non-adjacent text regions:
- “severe [pain] in the [abdomen]” → “severe abdominal pain”
- “the [president] … [Obama]” → coreference
This is required for:
- Medical NER: Anatomical modifiers separated from findings
- Legal NER: Parties referenced across clauses
- W2NER: Word-word relation grids that detect discontinuous entities
§Offset Unit (CRITICAL)
DiscontinuousSpan uses character offsets (Unicode scalar value indices),
consistent with Entity::start /
Entity::end and anno::core::grounded::Location.
This is intentionally not byte offsets. If you have byte offsets (from regex,
str::find, tokenizers, etc.), convert them to character offsets first (see
anno::offset::SpanConverter in the anno crate).
§Example
use anno_core::DiscontinuousSpan;
// "severe pain in the abdomen" where "severe" modifies "pain"
// but they're separated by other words
let span = DiscontinuousSpan::new(vec![
0..6, // "severe"
12..16, // "pain"
]);
assert_eq!(span.num_segments(), 2);
assert!(span.is_discontinuous());Implementations§
Source§impl DiscontinuousSpan
impl DiscontinuousSpan
Sourcepub fn new(segments: Vec<Range<usize>>) -> DiscontinuousSpan
pub fn new(segments: Vec<Range<usize>>) -> DiscontinuousSpan
Create a new discontinuous span from segments.
Segments are sorted and validated (no overlaps).
Sourcepub fn contiguous(start: usize, end: usize) -> DiscontinuousSpan
pub fn contiguous(start: usize, end: usize) -> DiscontinuousSpan
Create from a single contiguous span.
Sourcepub fn num_segments(&self) -> usize
pub fn num_segments(&self) -> usize
Number of segments.
Sourcepub fn is_discontinuous(&self) -> bool
pub fn is_discontinuous(&self) -> bool
True if this spans multiple non-adjacent regions.
Sourcepub fn is_contiguous(&self) -> bool
pub fn is_contiguous(&self) -> bool
True if this is a single contiguous span.
Sourcepub fn bounding_range(&self) -> Option<Range<usize>>
pub fn bounding_range(&self) -> Option<Range<usize>>
Get the overall bounding range (start of first to end of last).
Sourcepub fn extract_text(&self, text: &str, separator: &str) -> String
pub fn extract_text(&self, text: &str, separator: &str) -> String
Extract text from each segment and join with separator.
Trait Implementations§
Source§impl Clone for DiscontinuousSpan
impl Clone for DiscontinuousSpan
Source§fn clone(&self) -> DiscontinuousSpan
fn clone(&self) -> DiscontinuousSpan
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for DiscontinuousSpan
impl Debug for DiscontinuousSpan
Source§impl<'de> Deserialize<'de> for DiscontinuousSpan
impl<'de> Deserialize<'de> for DiscontinuousSpan
Source§fn deserialize<__D>(
__deserializer: __D,
) -> Result<DiscontinuousSpan, <__D as Deserializer<'de>>::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(
__deserializer: __D,
) -> Result<DiscontinuousSpan, <__D as Deserializer<'de>>::Error>where
__D: Deserializer<'de>,
Source§impl PartialEq for DiscontinuousSpan
impl PartialEq for DiscontinuousSpan
Source§impl Serialize for DiscontinuousSpan
impl Serialize for DiscontinuousSpan
Source§fn serialize<__S>(
&self,
__serializer: __S,
) -> Result<<__S as Serializer>::Ok, <__S as Serializer>::Error>where
__S: Serializer,
fn serialize<__S>(
&self,
__serializer: __S,
) -> Result<<__S as Serializer>::Ok, <__S as Serializer>::Error>where
__S: Serializer,
impl Eq for DiscontinuousSpan
impl StructuralPartialEq for DiscontinuousSpan
Auto Trait Implementations§
impl Freeze for DiscontinuousSpan
impl RefUnwindSafe for DiscontinuousSpan
impl Send for DiscontinuousSpan
impl Sync for DiscontinuousSpan
impl Unpin for DiscontinuousSpan
impl UnsafeUnpin for DiscontinuousSpan
impl UnwindSafe for DiscontinuousSpan
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key and return true if they are equal.Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more