#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub enum Definiteness {
Definite,
Indefinite,
Proximal,
Distal,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub enum Time {
Past,
Present,
Future,
None,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub enum Aspect {
Simple,
Progressive,
Perfect,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Default, Hash)]
pub enum VerbClass {
State,
#[default]
Activity,
Accomplishment,
Achievement,
Semelfactive,
}
impl VerbClass {
pub fn is_stative(&self) -> bool {
matches!(self, VerbClass::State)
}
pub fn is_durative(&self) -> bool {
matches!(
self,
VerbClass::State | VerbClass::Activity | VerbClass::Accomplishment
)
}
pub fn is_telic(&self) -> bool {
matches!(self, VerbClass::Accomplishment | VerbClass::Achievement)
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub enum Sort {
Entity,
Physical,
Animate,
Human,
Plant,
Place,
Time,
Abstract,
Information,
Event,
Celestial,
Value,
Signal,
Group,
}
impl Sort {
pub fn is_compatible_with(self, other: Sort) -> bool {
if self == other {
return true;
}
match (self, other) {
(Sort::Human, Sort::Animate) => true,
(Sort::Plant, Sort::Animate) => true,
(Sort::Animate, Sort::Physical) => true,
(Sort::Human, Sort::Physical) => true,
(Sort::Plant, Sort::Physical) => true,
(_, Sort::Entity) => true,
_ => false,
}
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub enum Number {
Singular,
Plural,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub enum Gender {
Male,
Female,
Neuter,
Unknown,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub enum Case {
Subject,
Object,
Possessive,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub enum Polarity {
Positive,
Negative,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub enum Feature {
Transitive,
Intransitive,
Ditransitive,
SubjectControl,
ObjectControl,
Raising,
Opaque,
Factive,
Performative,
Collective,
Mixed,
Distributive,
Weather,
Unaccusative,
IntensionalPredicate,
Count,
Mass,
Proper,
Masculine,
Feminine,
Neuter,
Animate,
Inanimate,
Intersective,
NonIntersective,
Subsective,
Gradable,
EventModifier,
}
impl Feature {
pub fn from_str(s: &str) -> Option<Feature> {
match s {
"Transitive" => Some(Feature::Transitive),
"Intransitive" => Some(Feature::Intransitive),
"Ditransitive" => Some(Feature::Ditransitive),
"SubjectControl" => Some(Feature::SubjectControl),
"ObjectControl" => Some(Feature::ObjectControl),
"Raising" => Some(Feature::Raising),
"Opaque" => Some(Feature::Opaque),
"Factive" => Some(Feature::Factive),
"Performative" => Some(Feature::Performative),
"Collective" => Some(Feature::Collective),
"Mixed" => Some(Feature::Mixed),
"Distributive" => Some(Feature::Distributive),
"Weather" => Some(Feature::Weather),
"Unaccusative" => Some(Feature::Unaccusative),
"IntensionalPredicate" => Some(Feature::IntensionalPredicate),
"Count" => Some(Feature::Count),
"Mass" => Some(Feature::Mass),
"Proper" => Some(Feature::Proper),
"Masculine" => Some(Feature::Masculine),
"Feminine" => Some(Feature::Feminine),
"Neuter" => Some(Feature::Neuter),
"Animate" => Some(Feature::Animate),
"Inanimate" => Some(Feature::Inanimate),
"Intersective" => Some(Feature::Intersective),
"NonIntersective" => Some(Feature::NonIntersective),
"Subsective" => Some(Feature::Subsective),
"Gradable" => Some(Feature::Gradable),
"EventModifier" => Some(Feature::EventModifier),
_ => None,
}
}
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct VerbEntry {
pub lemma: String,
pub time: Time,
pub aspect: Aspect,
pub class: VerbClass,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub struct VerbMetadata {
pub lemma: &'static str,
pub class: VerbClass,
pub time: Time,
pub aspect: Aspect,
pub features: &'static [Feature],
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub struct NounMetadata {
pub lemma: &'static str,
pub number: Number,
pub features: &'static [Feature],
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub struct AdjectiveMetadata {
pub lemma: &'static str,
pub features: &'static [Feature],
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub struct CanonicalMapping {
pub lemma: &'static str,
pub polarity: Polarity,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub struct MorphologicalRule {
pub suffix: &'static str,
pub produces: &'static str,
}