6个版本 (破坏性更新)

0.5.1 2019年8月9日
0.5.0 2019年6月29日
0.4.0 2019年3月16日
0.3.0 2018年12月29日
0.1.0 2018年12月11日

#784 in 文本处理


sententiae 中使用

MIT 许可证

175KB
2.5K SLoC

Verba

Verba是一个用于处理拉丁词汇的库。这个库旨在处理大部分语法工作,例如名词和形容词的变格以及动词的变位,对于单个拉丁词汇。

名词

拉丁名词根据数和格进行变格。名词模块包含用于创建规则、不规则和不可变格名词的子模块。每种类型都实现了Noun特质,它有一个变格函数,该函数接受一个数和格。

例如,要创建规则第一变格名词porta,portae,您将调用 verba::Regular::new("porta".to_string(), "portae".to_string());

要变格属格复数,您将调用 noun.decline(Number::Plural, Case::Genitive);

不规则名词使用包含不规则变格的覆盖的 HashMap<(Number, Case), Option<Vec<String>>> 创建。例如,要创建不规则名词vīs,vīs,您首先创建覆盖的HashMap

overrides.insert((Number::Singular, Case::Nominative), Some(vec!["vīs".to_string()]));
overrides.insert((Number::Singular, Case::Genitive), Some(vec!["vīs".to_string()]));
overrides.insert((Number::Singular, Case::Dative), Some(vec!["".to_string()]));
overrides.insert((Number::Singular, Case::Accusative), Some(vec!["vim".to_string()]));
overrides.insert((Number::Singular, Case::Ablative), Some(vec!["".to_string()]));
overrides.insert((Number::Singular, Case::Vocative), Some(vec!["vīs".to_string()]));
overrides.insert((Number::Plural, Case::Genitive), Some(vec!["vīrium".to_string()]));
overrides.insert((Number::Plural, Case::Accusative), Some(vec!["vīrēs".to_string(), "vīrīs".to_string()]));

这个HashMap重写了所有六个单数情况以及复数的属格和宾格形式。剩余的情况;复数的主格、与格、宾格和呼格;将按照普通名词的规则变化。为了实现这一点,verba::noun::Irregular::new函数也需要传递一个词根和一个变化组。要创建不规则名词,请调用verba::Irregular::new(declension, Gender::Feminine, "vīr".to_string(), Group::Third)

调用变化函数时,如果传递的数字和情况出现在传递的HashMap中,则会提供不规则形式;否则,将使用传递的词根和变化组将其变化为普通名词。例如,noun.decline(Number::Singular, Case::Genitive)将返回Some(vec!["vīs.to_string()]);调用不在重写HashMap中的noun.decline(Number::Plural, Case::Dative)将返回Some(vec!["vīribus".to_string()]))

不可变化名词在变化时不会改变形式。要创建不可变化的名词nīl,请调用verba::Indeclinable::new("nīl".to_string(), Gender::Neuter)

调用其变化将返回nīl,无论传递给它的数字和情况如何。

形容词

拉丁形容词根据语法数、格和性别进行变化。形容词模块目前仅包含用于创建普通形容词的子模块。

拉丁形容词的词典形式可以有多种形式。对于第一和第二变化组的形容词,提供了阳性、阴性和中性的形式。要创建形容词,首先需要创建词典形式,然后将该词典形式传递给新函数

let dictionary = A::DictionaryForm::Three("altus".to_string(), "alta".to_string(), "altum".to_string());

let adjective;
match A::Regular::new(dictionary) {
    Ok(a) => adjective = a,
    Err(_) => panic!("Failed to create a regular adjective.");
}

要获取单数的阴性所有格形式,您将调用 adjective.decline(Number::Singular, Case::Genitive, Gender::Feminine),这将返回 Some((vec!(["altae".to_string()])).

动词

拉丁动词根据语气、语态、时态、数和人称进行变化。动词模块目前仅包含创建不规则动词的子模块。

要创建不规则动词 laudō, laudāre, laudāvī, laudātum,您将调用 verba::Regular::new(("laudō".to_string(), "laudāre".to_string(), "laudāre".to_string(), "laudāvī".to_string()).

要获取动词的第一人称复数现在主动直陈述语态形式,您将调用 verb.conjugate((V::Person::First, V::Number::Plural, V::Tense::Present, V::Voice::Active, V::Mood::Indicative),这将返回 Conjugation::Complete((vec!(["laudāmus".to_string()])).

conjugate函数返回一个Conjugate枚举,可以是Complete,表示存储的形态是完整的形态,或者是一个PassivePerfect。拉丁动词的被动完成形态是形容词形态加上sum的变位形式。PassivePerfect包含一个动词形容词形态的引用以及适当的sum形态。

要完成词尾变化,形容词形式必须根据数、格和性别进行变化。例如,调用 conjugation.decline(Number::Singular, Case::Nominative, Gender::Masculine) 将返回形容词形式的单数、主格、阳性的完整变化形式以及伴随的形式。

依赖关系

~7.5MB
~155K SLoC