2 个不稳定版本
0.1.0 | 2024 年 5 月 30 日 |
---|---|
0.0.0 | 2023 年 9 月 1 日 |
124 在 文本处理
93 每月下载量
1MB
26K SLoC
vidyut-prakriya
潘衍词生成器
vidyut-prakriya
根据潘衍语法的规则生成梵文单词及其 prakriyā(词源),目前实现了大约 2,000 个规则。我们的长期目标是提供一个完整的《阿斯塔迪亚伊》实现。
这个 crate 是作为 Ambuda 项目的组成部分进行积极开发的。如果您喜欢我们的工作并希望为它做出贡献,请参阅下面的 贡献 部分。我们还鼓励您 加入我们的 Discord 服务器,在那里您可以遇到其他梵文程序员和爱好者。
在线演示在此 这里。
概述
vidyut-prakriya
有三个显著特点
-
准确性。我们尽可能遵循潘衍语法的规则。我们返回的每个单词都可以选择性地包含一个 prakriyā,该 prakriyā 列出了使用的每个规则及其结果。
-
速度。在我的笔记本电脑上(2.4GHz 8核 CPU,64 GB DDR4 RAM),此 crate 在单个线程上每秒生成近 50,000 个单词。在其他条件相同的情况下,快速程序更容易运行和测试,这意味着我们可以以更高的标准生产更长的单词列表。
-
可移植性。此 crate 编译成快速本地代码,并且可以绑定到大多数其他编程语言,只需一点努力。特别是,此 crate 可以编译成 WebAssembly,这意味着它可以在现代网页浏览器中运行。
vidyut-prakriya
目前对基本动词有很强的支持。有关未来计划,请参阅我们的 路线图。
用法
要生成所有基本 tinantas 在 kartari prayoga 中,请运行
$ make create_tinantas > output.csv
第一次运行 make create_tinantas
速度会很慢,因为您的机器首先需要编译 vidyut-prakriya
。然而,在完成这个初始编译步骤后,后续的运行将会快得多,并且 make create_tinantas
很可能在几秒钟内完成编译和执行。
要程序化生成 prakriyas,您可以使用下面的启动代码
use vidyut_prakriya::Vyakarana;
use vidyut_prakriya::args::*;
let v = Vyakarana::new();
let dhatu = Dhatu::mula("BU", Gana::Bhvadi);
let args = Tinanta::builder()
.dhatu(dhatu)
.lakara(Lakara::Lat)
.prayoga(Prayoga::Kartari)
.purusha(Purusha::Prathama)
.vacana(Vacana::Eka)
.build().unwrap();
let prakriyas = v.derive_tinantas(&args);
for p in prakriyas {
println!("{}", p.text());
println!("---------------------------");
for step in p.history() {
let terms: Vec<_> = step.result().iter().map(|x| x.text()).filter(|x| !x.is_empty()).collect();
let result = terms.join(" + ");
println!("{:<10} | {}", step.rule().code(), result);
}
println!("---------------------------");
println!("\n");
}
上述代码的输出
Bavati
---------------------------
1.3.1 | BU
3.2.123 | BU + la~w
1.3.2 | BU + la~w
1.3.3 | BU + la~w
1.3.9 | BU + l
1.3.78 | BU + l
3.4.78 | BU + tip
1.3.3 | BU + tip
1.3.9 | BU + ti
3.4.113 | BU + ti
3.1.68 | BU + Sap + ti
1.3.3 | BU + Sap + ti
1.3.8 | BU + Sap + ti
1.3.9 | BU + a + ti
3.4.113 | BU + a + ti
7.3.84 | Bo + a + ti
1.4.14 | Bo + a + ti
6.1.78 | Bav + a + ti
8.4.68 | Bav + a + ti
---------------------------
左列显示了在推导过程中应用的每个规则的简单字符串标签,您可以在 Rule
类型的注释中找到这些标签可以取的详细值的详细信息。我们建议使用 ashtadhyayi.com
来了解更多关于这些规则的信息。
右列显示了正在进行的 prakriya。我们使用的是其他 Ashtadhyayi 网站上常见的输出约定。此文本的编码格式为 SLP1,这是我们在整个crate中使用的编码格式。
有关更多详细信息,请参阅以下 Vyakarana
结构中的方法
derive_tinantas
(用于动词)derive_subantas
(用于名词)derive_krdantas
(用于动词后缀)derive_taddhitantas
(用于名词后缀)
贡献
vidyut-prakriya
是一个雄心勃勃的项目,您的贡献可以帮助它成长。
报告错误
最简单的方法是如果您发现错误,请 在 GitHub 上提交问题。请告诉我们您期望看到哪种形式。我们也会非常感谢来自语法文献的相关引用,以便我们更好地理解和解决该问题。
修改代码
首先,尝试在您的机器上运行我们现有的代码。我们建议您首先运行我们的集成测试
$ make create_test_files
$ make test_all
接下来,尝试使用我们的 prakriya 调试器,它可以显示给定单词的确切推导过程
$ make debugger
一旦您确认了您的设置工作正常,我们建议您阅读有关 Term
(在 term
模块中)和 Prakriya
(在 prakriya
模块中)的文档。代码的几乎每个部分都涉及到这两个结构。
为了熟悉我们的规则,我们建议您浏览一下 ashtadhyayi
模块,它定义了我们的高级API,并包装了我们在系统中使用的所有规则。我们鼓励您阅读我们详尽的注释并探索 ashtadhyayi
中使用的较小模块。
现在您可以开始修改代码了。在您进行更改后,运行 make test_all
来验证代码的影响。
如果您对您的更改感到满意,您将需要更新我们的集成测试文件。这个过程有三个步骤。首先,运行以下步骤并确认您的测试失败
$ make create_test_files
$ make test_all
make test_all
应该在哈希比较错误上失败。复制新的哈希代码,将 test_all
中的现有哈希代码替换为复制的值。然后再次运行 make test_all
并确认所有测试都通过。
数据
本软件包包含来自ashtadhyayi.com的Dhatupatha,ashtadhyayi.com的作者已慷慨地同意在MIT许可下与我们分享此文件。
有关此Dhatupatha的谱系详细信息,请参阅我们的单独数据README。
设计
详细信息请参阅ARCHITECTURE.md
。
依赖项
~7.5MB
~119K SLoC