pub struct WordNetPos { /* private fields */ }Expand description
Lemma-to-POS membership lookup.
Why: #5399 rejected a process-wide OnceLock<HashMap> — CLAUDE.md permits
global state only for the tracing subscriber. Binary-searching the sorted
table directly removes the reason the global existed: there is nothing to
build, so there is nothing to share. The type is Copy and 16 bytes, so
threading it through crate::kg_extract::KgExtractConfig costs a pointer
pair rather than an Arc.
What: holds the table text and the offset its data starts at. Every lookup
is an O(log n) probe over &'static str; no allocation, no interior
mutability, no teardown.
Test: shipped_table_answers_the_four_pos_classes, mask_is_case_insensitive.
Implementations§
Source§impl WordNetPos
impl WordNetPos
Sourcepub const fn shipped() -> Self
pub const fn shipped() -> Self
The vendored WordNet 3.1 table.
Why: const so a caller that wants the shipped data pays nothing —
this is what lets KgExtractConfig::default() stay free.
What: pairs [TABLE] with its precomputed [TABLE_DATA_START].
Test: shipped_table_answers_the_four_pos_classes.
Sourcepub fn from_table(table: &'static str) -> Self
pub fn from_table(table: &'static str) -> Self
Build a lookup over a caller-supplied table in the shipped format.
Why: the binary search’s edge cases (first record, last record, absent
key either side of the range) are invisible against 83k real lemmas but
obvious against six synthetic ones.
What: same contract as Self::shipped; the caller owes byte-sorted
<lemma>\t<mask> lines and an optional # header.
Test: lookup_finds_the_first_and_last_records.
Sourcepub fn mask(&self, word: &str) -> u8
pub fn mask(&self, word: &str) -> u8
POS bitmask for word, or 0 when WordNet has never heard of it.
Why: #5399 requires unknown words to FAIL OPEN. Returning 0 rather
than an error or a default makes every caller’s “unknown” branch
explicit at the call site instead of hidden here.
What: probes as given first — the extractor lower-cases its content up
front, so that path allocates nothing — and retries lower-cased only
when the input actually contains an upper-case character. WordNet index
lemmas are all lower-case. A final retry strips a regular inflection
([base_form_candidates]), which is what lets containing read as the
verb it is instead of as an unknown word eligible to head a phrase.
Test: mask_returns_zero_for_unknown_words, mask_is_case_insensitive,
mask_resolves_regular_inflections_to_their_base_form.
Sourcepub fn is_known(&self, word: &str) -> bool
pub fn is_known(&self, word: &str) -> bool
Whether WordNet lists word under any part of speech.
Sourcepub fn is_adjective_only(&self, word: &str) -> bool
pub fn is_adjective_only(&self, word: &str) -> bool
Whether word is an adjective and nothing else.
Why: this is the head-eligibility test the noun-phrase walk uses. A word
that can ONLY be an adjective names a property, so it cannot be the head
of the phrase — hard in a hard requirement modifies, it does not
name. #5399 uses that to SKIP such a token when picking the head, not to
reject the triple: the re-walk lands on requirement, which is what the
sentence actually asserts.
What: true when the ADJ bit is set and the NOUN bit is not. An unknown
word has mask 0 and is therefore never adjective-only — the fail-open
direction, which is what keeps unknown crate names eligible as heads.
Test: adjective_only_catches_hard_and_spares_fast.
Sourcepub fn lemma_count(&self) -> usize
pub fn lemma_count(&self) -> usize
Number of records in the table.
Why: the measurement harness and the table’s own sanity floor need it.
What: counts data lines — an O(n) scan, so it is not a hot-path call.
Test: shipped_table_answers_the_four_pos_classes.
Trait Implementations§
Source§impl Clone for WordNetPos
impl Clone for WordNetPos
Source§fn clone(&self) -> WordNetPos
fn clone(&self) -> WordNetPos
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreimpl Copy for WordNetPos
Source§impl Debug for WordNetPos
impl Debug for WordNetPos
Auto Trait Implementations§
impl Freeze for WordNetPos
impl RefUnwindSafe for WordNetPos
impl Send for WordNetPos
impl Sync for WordNetPos
impl Unpin for WordNetPos
impl UnsafeUnpin for WordNetPos
impl UnwindSafe for WordNetPos
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<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